網(wǎng)絡(luò)中的生存時(shí)間 (TTL) 是什么?
生存時(shí)間 (TTL) 是指數(shù)據(jù)包在被路由器丟棄之前可存在于網(wǎng)絡(luò)內(nèi)部的時(shí)間或“躍點(diǎn)”數(shù)。TTL 還用于其他上下文中,包括 CDN 緩存和 DNS 緩存。
TTL 的工作原理
信息數(shù)據(jù)包被創(chuàng)建并通過(guò) Internet 發(fā)送時(shí),有可能持續(xù)無(wú)限期地在路由器之間傳遞。為了減輕這種可能性,數(shù)據(jù)包在設(shè)計(jì)時(shí)帶有稱為生存時(shí)間或躍點(diǎn)限制的到期時(shí)間。數(shù)據(jù)包 TTL 可用于確定數(shù)據(jù)包已流通多長(zhǎng)時(shí)間,并允許發(fā)送方通過(guò) Internet 接收有關(guān)數(shù)據(jù)包路徑的信息。
每個(gè)數(shù)據(jù)包都有一個(gè)位置存儲(chǔ)數(shù)值,該數(shù)值確定數(shù)據(jù)包應(yīng)繼續(xù)在網(wǎng)絡(luò)中移動(dòng)的時(shí)間。路由器每次接收到一個(gè)數(shù)據(jù)包,都會(huì)從 TTL 計(jì)數(shù)中減一,然后將其傳遞到網(wǎng)絡(luò)中的下一個(gè)位置。如果在減去后的任意時(shí)間,TTL 計(jì)數(shù)等于零,則路由器將丟棄該數(shù)據(jù)包并將 ICMP 消息發(fā)回給原始主機(jī)。
常用的網(wǎng)絡(luò)命令 ping 和 traceroute 都使用 TTL。使用 traceroute 命令時(shí),一串剩余計(jì)數(shù)越來(lái)越高的 TTL 的數(shù)據(jù)包流將通過(guò) Internet 發(fā)送到目的地。由于連接的每一步都是其中一個(gè)數(shù)據(jù)包的最后一站,因此每個(gè)位置都會(huì)在丟棄數(shù)據(jù)包后向發(fā)送方返回 ICMP 消息。然后,ICMP 消息返回到發(fā)送方所花費(fèi)的時(shí)間就可以用于確定到達(dá)網(wǎng)絡(luò)上每個(gè)連續(xù)躍點(diǎn)所花費(fèi)的時(shí)間。
TTL 還用于什么情況?
除了在 Internet 上跟蹤路由數(shù)據(jù)包外,生存時(shí)間還用于在一定時(shí)間內(nèi)緩存信息。某些網(wǎng)絡(luò)用例以更傳統(tǒng)的方式運(yùn)行,而不是測(cè)量路由器之間的跳躍時(shí)間(每次跳躍之間的時(shí)間可能不同)。
Cloudflare CDN 這樣的 CDN 通常使用 TTL 來(lái)確定在從源站獲取新副本之前,應(yīng)從 CDN 邊緣服務(wù)器提供多長(zhǎng)時(shí)間的緩存內(nèi)容。通過(guò)正確設(shè)置源站獲取之間的時(shí)間量,CDN 能夠提供更新的內(nèi)容,而無(wú)需將請(qǐng)求不斷傳播回源站。這種優(yōu)化使 CDN 可以有效地從更靠近用戶的位置提供內(nèi)容,同時(shí)減少?gòu)脑凑鹃_(kāi)始所需的帶寬。
在 DNS 記錄的環(huán)境中,TTL 是一個(gè)數(shù)值,它確定 DNS 緩存服務(wù)器在連接到權(quán)威性 DNS 服務(wù)器并獲取記錄的新副本之前可以為 DNS 記錄提供服務(wù)的時(shí)間。