理解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

相关文章
相关标签/搜索