理解IP及DNS中的TTL

1. TTL


1.1 IP協議中的TTL


  • 定義

TTL是IP協議包中的一個值,指定數據報被路由器丟棄以前容許經過的網段數量。(IP數據包在計算機網絡中能夠轉發的最大跳數)html

在不少狀況下數據包在必定時間內不能被傳遞到目的地。解決方法就是在一段時間後丟棄這個包,而後給發送者一個報文,由發送者決定是否要重發。linux

TTL 是由發送主機設置的,以防止數據包不斷在 IP 互聯網絡上永不終止地循環。轉發 IP 數據包時,每通過一個路由器,路由器會修改TTL值, 即將改值減少1。當記數到0時,路由器決定丟棄該包,併發送一個ICMP Type 11 and Code 0 message(Time to live exceeded) 報文給最初的發送者,由發送者決定是否要重發。windows

1.1.1 常見操做系統的TTL值

UNIX 及類 UNIX 操做系統       ICMP 回顯應答的 TTL 字段值爲 255
Compaq Tru64 5.0             ICMP 回顯應答的 TTL 字段值爲 64
微軟 Windows NT/2K操做系統    ICMP 回顯應答的 TTL 字段值爲 128
微軟 Windows 95 操做系統      ICMP 回顯應答的 TTL 字段值爲 32
LINUX Kernel 2.2.x & 2.4.x   ICMP 回顯應答的 TTL 字段值爲 64

1.1.2 linux系統TTL值修改

TTL值在文件/proc/sys/net/ipv4/ip_default_ttl中定義,可經過執行echo 128 > /proc/sys/net/ipv4/ip_default_ttl命令修改
(這是短暫性的)若要永久生效可修改/etc/sysctl.conf配置文件,添加net.ipv4.ip_default_ttl=128,接着執行sysctl -p便可。緩存

1.1.3 理解發送主機

在本機(windows 10)ping本地的VMware虛擬主機(操做系統爲CentOS release 6.8),其IP爲192.168.10.128,可見TTL爲64:服務器

1.jpg

在CentOS上執行echo 168 > /proc/sys/net/ipv4/ip_default_ttl修改TTL值爲168,接着再次在本機(windows 10)ping 192.168.10.128,發現TTL由64變爲168網絡

2.jpg

3.jpg

綜上可知,這裏的發送主機指的是ping後面IP對應的主機併發


1.2 DNS中的TTL


  • 定義

  • 定義1

TTL(Time- To-Live),簡單的說它表示一條域名解析記錄在DNS服務器上的緩存時間。ide

  • 定義2

TTL值全稱是「生存時間(Time To Live)」,簡單的說它表示DNS記錄在DNS服務器上緩存時間,數值越小,修改記錄各地生效時間越快。網站

當各地的DNS(LDNS)服務器接受到解析請求時,就會向域名指定的受權DNS服務器發出解析請求從而得到解析記錄;該解析記錄會在DNS(LDNS)服務器中保存一段時間,這段時間內若是再接到這個域名的解析請求,DNS服務器將再也不向受權DNS服務器發出請求,而是直接返回剛纔得到的記錄;而這個記錄在DNS服務器上保留的時間,就是TTL值。操作系統

1.2.1 合理設置域名TTL值

1.2.1.1 增大TTL值,以節約域名解析時間

一般狀況下域名解析記錄是不多更改的。咱們能夠經過增大域名記錄的TTL值讓記錄在各地DNS服務器中緩存的時間加長,這樣在更長的時間段內,咱們訪問這個網站時,本地ISP的DNS服務器就不須要向域名的NS服務器發出解析請求,而直接從本地緩存中返回域名解析記錄,從而提升解析效率。
TTL值是以秒爲單位的,一般的默認值都是3600,也就是默認緩存1小時。咱們能夠根據實際須要把TTL值擴大,例如要緩存一天就設置成86400。

1.2.1.2 減少TTL值,減小更新域名記錄時的不可訪問時間

由於DNS記錄緩存的問題,新的域名記錄在有的地方可能生效了,但在有的地方可能等上一兩天甚至更久才生效(部分省份運營商調大了TTL值),這樣就會就致使部分用戶在一段時間內沒法訪問網站。

爲了儘量的減少各地的解析時間差,可參考如下步驟執行:

1.先查看當前域名的TTL值。

2.修改TTL值爲可設定的最小值,建議爲60秒。

3.等待一天,保證各地的DNS服務器緩存都過時並更新了記錄,可以使用cloudxns全國DNS查詢

4.設置並修改DNS解析到新的記錄,這樣各地的DNS就能以最快的速度更新到新的記錄。

5.確認各地的DNS已經更新完成後,再將TTL值設置成經常使用的值(如: TTL=86400,通常解析商提供的默認值爲600秒)。

2.參考連接

https://www.cnblogs.com/tian4837/p/4178662.html
https://osqa-ask.wireshark.org/questions/22337/ttl-time-to-live
https://blog.csdn.net/ysdaniel/article/details/6922097

相關文章
相關標籤/搜索