TTL 值 | 在 IP 协议、ping 工具及 DNS 解析中的作用
注:本文为 “TTL” 相关文章合辑。
未整理去重。
如有内容异常,请看原文。
TTL 值的意义
2007-10-18 11:33:17
TTL 是 IP 协议包中的一个值,用于标识网络路由器是否应丢弃在网络中停留时间过长的数据包。数据包可能因多种原因在一定时间内无法到达目的地,例如,不正确的路由表可能导致数据包进入无限循环。一种解决方案是在数据包经过一段时间后将其丢弃,并向发送方发送一个报文,由发送方决定是否重发。TTL 的初始值通常为系统默认值,是数据包头部的一个 8 位字段。TTL 最初的设计意图是确定一个时间范围,超过该时间则丢弃数据包。由于每个路由器至少会将 TTL 字段减 1,因此 TTL 通常表示数据包在被丢弃前最多能经过的路由器数量。当计数到 0 时,路由器将丢弃该数据包,并向初始发送方发送一个 ICMP 报文。
在 Windows 95/98 系统中,TTL 的默认值为 32。有建议称,当到达目标节点较为困难时,可将该值设置为 128。ping
和 traceroute
均利用 TTL 值尝试到达指定主机或追踪到该主机的路由。traceroute
通过将数据包的 TTL 值设置得较小,使其在到达目的地的过程中被各个路由器依次丢弃。通过测量发送数据包到接收返回的 ICMP 报文之间的时间,可以计算出从一个路由器到另一个路由器的时间。
在使用多路复用的 IP 协议中,TTL 值表示数据包的转发范围,具体对应关系如下:
TTL 值 | 数据包的转发范围 |
---|---|
0 | 限制在同一主机 |
1 | 限制在同一子网 |
32 | 限制在同一节点 |
64 | 限制在同一区域(region) |
128 | 限制在同一大陆(continent) |
255 | 无限制 |
在网络通信中,不同操作系统通常具有不同的默认 TTL 值。基于此,有一种观点认为能够依据返回的 TTL 值来推断目标系统的类型。该观点在一定程度上是成立的,然而,这并非 TTL 的主要功能,仅仅是 TTL 的一种应用场景。需要注意的是,TTL 值可被修改。在一些特殊系统,如 NIDS network intrusion detection systems,入侵检测系统)中,会定义特殊的 TTL 值,以此拒绝非法访问数据的进入。
在执行 PING
命令时,可使用 -i
参数来指定 TTL 值。若将 TTL 设置为 0,数据包将被立即丢弃。在执行 PING
命令后,有时提示信息中会显示另一个地址,并附带类似于 “ TTL 无效 ” 的英文提示。这表明该数据包在抵达目标之前,即在到达返回 IP 位置时,其 TTL 值已降为 0 或小于下一网段允许通过的 TTL 值,因此该数据包被路由丢弃。
关于 ping 以及 TTL 的分析
KinderRiven 于 2015-06-23 18:53:28 发布
首先介绍 ping
这一工具。
ping [目标]
该命令用于向目标发送若干数据包,若目标接收到数据包,目标主机将向发送 ping
请求的主机返回一个数据包。
例如在上图中,对百度服务器进行 ping
操作(Windows 系统默认 ping
4 次)。
其中,“字节”表示数据包的大小,“时间”表示返回时间,而 TTL 的含义如下:
TTL 表示数据包的生存时间,此处显示的是剩余生存时间。TTL 用于计算数据包在路由器中的消耗时间。由于当前大多数路由器的消耗时间小于 1 秒,且小于 1 秒的时间按 1 秒计算,因此数据包每经过一个路由器节点,TTL 值减 1。
TTL 的初始值因操作系统而异:
- Linux 系统的 TTL 值默认为 64 或 255;
- Windows NT/2000/XP 系统的 TTL 值默认为 128;
- Windows 98 系统的 TTL 值默认为 32;
- UNIX 主机的 TTL 值默认为 255。
以百度服务器返回的数据包为例,其 TTL 值应为 64(通常取 2 n 2^n 2n 且最接近返回值的数值)。若返回的 TTL 值为 47,则数据包在传输过程中经过了 64 − 47 = 17 64 - 47 = 17 64−47=17 个路由器。
再例如,对本地 IP 地址进行 ping
操作:
由于本地 IP 地址的通信无需经过路由器,因此 TTL 值保持为 64,即数据包的初始生存时间默认为 64。
提到 ping
,就不得不提及 Windows 系统下的另一个工具:tracert
。
tracert [目标]
该命令用于获取主机到目标主机所经过的路由器 IP 地址。
如图所示:
tracert
的原理与 ICMP 协议相关,通过数据包的生存时间来获取路径信息。
从图中可以看出,到达目标主机共经过了 15 个路由器(不包括终点)。
需要注意的是,部分路由器可能禁止 ping
操作,因此不会返回任何信息,此时会显示“请求超时”。
此外,由于网络状况复杂多变,对不同地址进行 ping
操作时,路径可能会有所不同。例如,再次对百度进行 tracert
操作:
结果显示路径有所不同,这与不同时间的网络状况以及多种因素有关。
不同操作系统的默认 TTL(生存时间)值
allway2 于 2020-10-17 18:37:07 发布
TTL(生存时间)是网络发送的数据包中包含的一个计时器值,用于指示接收者在丢弃或过期数据(数据包)之前可以保留或使用该数据包的时间。不同操作系统的默认 TTL 值是不同的,因此可以通过 TTL 值来推断操作系统类型。通过 ping
命令可以获取 TTL 值。例如,通过 ping subinsb.com
得到的输出如下:
PING subinsb.com (108.162.199.61) 56 (84) bytes of data.
64 bytes from 108.162.199.61: icmp_seq=1 ttl=57 time=503 ms
64 bytes from 108.162.199.61: icmp_seq=2 ttl=57 time=416 ms
从输出中可以看到,TTL 值为 57。由于该网站托管在 Red Hat 系统上,返回的 TTL 值接近 64(Linux 系统的默认 TTL 值),因此可以推断出远程系统的操作系统。
以下是不同设备 / 操作系统的默认 TTL 值:
设备 / 操作系统 | 版本 | 协议 | TTL |
---|---|---|---|
AIX | TCP | 60 | |
AIX | UDP | 30 | |
AIX | 3.2, 4.1 | ICMP | 255 |
BSDI | BSD/OS 3.1 and 4.0 | ICMP | 255 |
Compa | Tru64 v5.0 | ICMP | 64 |
Cisco | ICMP | 254 | |
DEC Pathworks | V5 | TCP and UDP | 30 |
Foundry | ICMP | 64 | |
FreeBSD | 2.1R | TCP and UDP | 64 |
FreeBSD | 3.4, 4.0 | ICMP | 255 |
FreeBSD | 5 | ICMP | 64 |
HP-UX | 9.0x | TCP and UDP | 30 |
HP-UX | 10.01 | TCP and UDP | 64 |
HP-UX | 10.2 | ICMP | 255 |
HP-UX | 11 | ICMP | 255 |
HP-UX | 11 | TCP | 64 |
Irix | 5.3 | TCP and UDP | 60 |
Irix | 6.x | TCP and UDP | 60 |
Irix | 6.5.3, 6.5.8 | ICMP | 255 |
juniper | ICMP | 64 | |
MPE/IX (HP) | ICMP | 200 | |
Linux | 2.0.x kernel | ICMP | 64 |
Linux | 2.2.14 kernel | ICMP | 255 |
Linux | 2.4 kernel | ICMP | 255 |
Linux | Red Hat 9 | ICMP and TCP | 64 |
MacOS/MacTCP | 2.0.x | TCP and UDP | 60 |
MacOS/MacTCP | X (10.5.6) | ICMP/TCP/UDP | 64 |
NetBSD | ICMP | 255 | |
Netgear FVG318 | ICMP and UDP | 64 | |
OpenBSD | 2.6 & 2.7 | ICMP | 255 |
OpenVMS | 07.01.2002 | ICMP | 255 |
OS/2 | TCP/IP 3.0 | 64 | |
OSF/1 | V3.2A | TCP | 60 |
OSF/1 | V3.2A | UDP | 30 |
Solaris | 2.5.1, 2.6, 2.7, 2.8 | ICMP | 255 |
Solaris | 2.8 | TCP | 64 |
Stratus | TCP_OS | ICMP | 255 |
Stratus | TCP_OS (14.2-) | TCP and UDP | 30 |
Stratus | TCP_OS (14.3+) | TCP and UDP | 64 |
Stratus | STCP | ICMP/TCP/UDP | 60 |
SunOS | 4.1.3/4.1.4 | TCP and UDP | 60 |
SunOS | 5.7 | ICMP and TCP | 255 |
Ultrix | V4.1/V4.2A | TCP | 60 |
Ultrix | V4.1/V4.2A | UDP | 30 |
Ultrix | V4.2 – 4.5 | ICMP | 255 |
VMS/Multinet | TCP and UDP | 64 | |
VMS/TCPware | TCP | 60 | |
VMS/TCPware | UDP | 64 | |
VMS/Wollongong | 1.1.1.1 | TCP | 128 |
VMS/Wollongong | 1.1.1.1 | UDP | 30 |
VMS/UCX | TCP and UDP | 128 | |
Windows | for Workgroups | TCP and UDP | 32 |
Windows | 95 | TCP and UDP | 32 |
Windows | 98 | ICMP | 32 |
Windows | 98, 98 SE | ICMP | 128 |
Windows | 98 | TCP | 128 |
Windows | NT 3.51 | TCP and UDP | 32 |
Windows | NT 4.0 | TCP and UDP | 128 |
Windows | NT 4.0 SP5- | 32 | |
Windows | NT 4.0 SP6+ | 128 | |
Windows | NT 4 WRKS SP 3, SP 6a | ICMP | 128 |
Windows | NT 4 Server SP4 | ICMP | 128 |
Windows | ME | ICMP | 128 |
Windows | 2000 pro | ICMP/TCP/UDP | 128 |
Windows | 2000 family | ICMP | 128 |
Windows | Server 2003 | 128 | |
Windows | XP | ICMP/TCP/UDP | 128 |
Windows | Vista | ICMP/TCP/UDP | 128 |
Windows | 7 | ICMP/TCP/UDP | 128 |
Windows | Server 2008 | ICMP/TCP/UDP | 128 |
Windows | 10 | ICMP/TCP/UDP | 128 |
以下是默认 TTL 值的简短版本:
设备 / 操作系统 | TTL |
---|---|
*nix(Linux / Unix) | 64 |
Windows | 128 |
Solaris / AIX | 254 |
可以通过 ping
本地主机来获取 TTL 值:
ping -4 localhost
以下是通过 ping
本地主机得到的输出示例:
正在 Ping x [127.0.0.1] 具有 32 字节的数据:
来自 127.0.0.1 的回复:字节 = 32 时间 < 1ms TTL=128
来自 127.0.0.1 的回复:字节 = 32 时间 < 1ms TTL=128
来自 127.0.0.1 的回复:字节 = 32 时间 < 1ms TTL=128
来自 127.0.0.1 的回复:字节 = 32 时间 < 1ms TTL=128127.0.0.1 的 Ping 统计信息:数据包:已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间 (以毫秒为单位):最短 = 0ms,最长 = 0ms,平均 = 0ms
查看数据包的 TTL 值并分析传输故障
网络中的网络设备由操作系统进行处理(有些硬件设备将系统预装在硬件芯片中)。在网络遇到传输故障时,可以使用网络检测软件,结合上表的信息对网络中流通的数据包进行检测,查看数据包的 TTL 值,以确定故障是否由错误的路由等原因引起。例如,可以使用科来网络分析系统 5.0 查看一个数据包的 TTL 值。
使用抓包工具查看 TTL 值
Linux 抓包命令如下:
tcpdump -i eth0 -c 5000 -w eth0.cap
假设捕获到的数据包的 TTL 值为 247,结合上表可以确定该数据包从源端(如 61.139.2.69)到目的端(如 192.168.10.44)共经过了 (255 - 247 = 8) 个路由器,且在传输过程中未出现故障。
注意事项
- 确定数据包在网络中经过的路由器数量,可以用数据包源端设备的 TTL 默认值减去捕获到的数据包的 TTL 值。
- 如果不知道数据包源端设备的默认 TTL 值,一般使用大于捕获数据包的 TTL 且最接近该 TTL 的默认值。
- TTL 字段长度为 1 个字节,因此 TTL 的最大值为 255。
通过查看数据包的 TTL 值,可以确定网络传输是否正常。如果捕获到的数据包的 TTL 值过小,则表示网络中可能存在传输故障,应及时检查网络中三层设备的路由表配置以及各主机上的路由表信息。
示例:使用防火墙规则限制 TTL
以下是一些基于 TTL 的防火墙规则示例:
-A INPUT -p udp -m ttl --ttl-eq 98 -j DROP % TTL 等于 98 时禁止
-A INPUT -p udp -m ttl --ttl-lt 45 -j DROP % TTL 小于 45 时禁止
分析数据包
- 使用 Wireshark 查看 cap 文件,找到“time to live: 128”,可以推断攻击的服务器系统可能是 Windows 内网 IP。
- 在没有专用防护设备的条件下,防御方在资源方面处于劣势。通过对攻击发生时的 cap 文件进行分析,找出攻击数据包与正常业务流量的区别,并针对特定数据进行封堵,可以起到一定的防护作用。
如何利用 ping 命令 TTL 来判断操作系统类型
本文已于 2024-02-29 10:24:34 修改。
网络管理人员通常会使用 ping
命令来确认与某个网络是否畅通,但可能并不清楚可以通过 ping
命令返回的 TTL 值来判断操作系统类型。
首先,我们来了解一下 TTL 是什么。TTL(Time To Live,生存时间)是 IP 协议包中的一个值。当我们使用 ping
命令进行网络连通测试或测试网速时,本地计算机会向目的主机发送数据包。然而,有些数据包可能由于某些特殊原因无法正常传送到目的主机。如果没有设置 TTL 值,数据包会在网络中一直传送,从而浪费网络资源。数据包在传送过程中至少会经过一个以上的路由器,每经过一个路由器,TTL 值就会自动减 1。如果减到 0 仍未传送到目的主机,那么该数据包就会自动丢失,此时路由器会向最初的发送者发送一个 ICMP 报文。例如,如果一个主机的 TTL 值为 64,那么当它经过 64 个路由器后仍未将数据包发送到目的主机时,该数据包就会自动丢弃。不同操作系统的默认 TTL 值是不同的,因此可以根据 TTL 值来确定操作系统。
从上述操作系统默认的 TTL 值可以看出,在使用 ping
命令时,返回的 TTL 值会有所不同。这是因为数据包每经过一个路由器,TTL 值就会减 1。因此,我们可以通过判断当前 ping
命令返回的 TTL 值向上接近哪个操作系统的默认 TTL 值,来推断该主机的操作系统类型。
DNS TTL 值理解及配置
By Jamin Zhang
2016 年 04 月 12 日
引言
在域名配置过程中,不同场景和业务需求下,需要调整 DNS TTL 值。这要求我们重新审视 DNS TTL 值的含义。
什么是域名的 TTL 值
TTL(Time-To-Live)是指一条域名解析记录在 DNS 服务器中的存留时间。当 DNS 服务器接收到解析请求时,会向域名指定的 NS 服务器发出请求以获取解析记录。获取记录后,该记录将在 DNS 服务器中保存一段时间。在此期间,若再次接到该域名的解析请求,DNS 服务器将直接返回缓存的记录,而无需再次向 NS 服务器请求。记录在 DNS 服务器上保留的时间即为 TTL 值。
TTL 值设置的应用
1. 增大 TTL 值以节约域名解析时间,提升网站访问速度
通常情况下,域名记录在较长时间内(如数月甚至数年)不会发生变化。因此,可以适当增大域名记录的 TTL 值,延长记录在各地 DNS 服务器中的缓存时间。这样,在较长一段时间内,本地 ISP 的 DNS 服务器无需向域名的 NS 服务器发出解析请求,而是直接从缓存中返回域名解析记录。
当前,国内外许多平台的 TTL 值以秒为单位,常见的默认值为 3600 秒(即 1 小时)。然而,这一默认值相对较小。实际上,域名记录的更改频率极低,因此可以根据实际需求适当增大该值。例如,若希望缓存时间为一天,则可将 TTL 值设置为 86400 秒。
Godaddy 的 TTL 设置较为直观,但仅提供 5 个可选值,即使切换到高级模式,也无法提供更多选项,显得较为僵化。LifeTyper.com 将 TTL 值设置为最大值 1 周。然而,设置过大的 TTL 值可能会带来一些问题,例如在更换服务器空间时,旧记录的过期和更新时间会相对较长。
2. 减小 TTL 值以减少更换空间或域名更改时的不可访问时间
在更换服务器空间时,99.9% 的情况下会涉及 DNS 记录的更改。由于缓存机制的存在,新的域名记录在某些地区可能已经生效,而在其他地区可能需要一两天甚至更长时间才能生效。这可能导致部分用户访问到新服务器,而另一些用户仍访问到旧服务器。如果涉及邮件发送,问题将更加严重,因为重要邮件可能会被发送到已停用的旧服务器上。
为了尽可能减少各地解析时间的差异,建议按照以下步骤操作:
- 查看当前域名的 TTL 值,假设为 1 天。
- 将 TTL 值修改为可设定的最小值,建议为 1 分钟(即 60 秒)。
- 等待 1 天,确保各地 DNS 服务器的缓存过期并更新记录。
- 修改 DNS 记录,此时各地 DNS 服务器能够以最快的速度获取新的记录。
- 在确认各地 DNS 记录更新完成后,将 TTL 值重新设置为所需的值。需要注意的是,TTL 值设置为 60 秒可能过小,不利于长期使用。
上述配置的前提是 DNS 服务器完全遵守相关标准和规范。否则,即使在 NS 服务器上设置了 TTL 值,也可能无法生效。但目前尚未发现完全不遵守规范的 DNS 服务器。
然而,现实中并不存在真正意义上的高速 NS 和 DNS 服务器。例如,Godaddy 在国外评测中得分较高,但在国内的使用体验与万网相差无几;万网在国内的性能表现优异,但在国外评测中得分可能较低。对于大多数网站来说,像 Google 和微软那样在全球范围内部署大量的 CDN 加速服务器和 NS 服务器是不现实的。国内和国外的 DNS 服务难以兼顾,但并非无法实现,只是难度较大。
此外,有人认为可以通过为域名指定两个 NS 记录(一个国内,一个国外)来提高解析速度,但这并不可行。因为只有在 DNS 服务器从第一个 NS 服务器获取记录失败时,才会向第二个 NS 服务器发送解析请求。
目前,最经济有效的提速方法是调整域名记录的 TTL 值。
参考资料
- TTL 值设置:TTL值如何设置_云解析DNS(DNS)-阿里云帮助中心
域名解析 TTL 是什么?TTL 设置多少合适?
2021 年 8 月 23 日
域名解析 TTL 是指生存时间,即 DNS 解析记录在 DNS 服务器上的存留时间。TTL 的设置因应用场景不同而有所差异。以下将详细说明 DNS 域名解析 TTL 的含义以及 TTL 设置时间的建议。
域名解析 TTL
TTL(Time To Live)是指 DNS 解析记录在 DNS 服务器上的存留时间。以下通过示例进行说明:
假设域名 www.mabiji.com 的解析 IP 地址为 7.7.7.7,且将 TTL 设置为 10 分钟。当用户访问该域名时,网络宽带 ISP 服务商的 DNS 服务器会尝试解析该域名。如果在服务商的 DNS 服务器上未找到该域名的解析记录,则会通过全球 DNS 的递归查询获取解析记录,并找到对应的 IP 地址 7.7.7.7,从而完成对该网站的访问请求。
在获取解析记录后,ISP 服务商的 DNS 服务器会将该记录缓存一段时间,这段时间即为 TTL 值。在本例中,TTL 值为 10 分钟,因此该记录将在 DNS 服务器上保存 10 分钟。在 TTL 值有效期间,若有其他用户访问该域名,DNS 服务器将直接返回缓存的 IP 地址,无需再次进行全球 DNS 递归查询,从而节省用户访问网站的时间。
域名 DNS 解析 TTL 值设置建议
TTL 值的设置需要综合考虑多种因素。如果 TTL 值设置过小,解析记录在本地 ISP 服务商的 DNS 服务器上的保存时间较短,导致服务商 DNS 需要频繁进行全球 DNS 递归查询,这将影响网站域名解析的稳定性和速度。反之,如果 TTL 值设置过大,当用户修改域名解析后,生效时间会相对较长。
因此,TTL 值的设置应根据实际应用情况确定。以下是一个参考表格:
IP 是否经常变动 | 是否动态 IP | 宕机检测 | 服务架构 | 建议 TTL 值 |
---|---|---|---|---|
否 | 否 | 否 | 热备、灾备、固定 IP | 3600 |
否 | 否 | 是 | 大型网站 | 60 |
否 | 否 | 不使用 | 单服务器 | 600 |
否 | 否 | 使用 | 多服务器 | 180 |
是 | 否 | 不使用 | 单服务器 | 300 |
是 | 是 | 不限 | 不限 | 120 |
对于大多数厂商(如阿里云、腾讯云等),在添加域名解析记录时,默认的 TTL 值为 10 分钟(即 600 秒)。如果没有特殊情况,建议将 TTL 值设置为 10 分钟。
阿里云域名解析的默认 TTL 值为 10 分钟,如下图所示:
腾讯云域名解析的默认 TTL 值为 600 秒,如下图所示:
DNSPod 已并入腾讯云,腾讯云域名解析会跳转到 DNSPod,且腾讯云与 DNSPod 账号互通。
DNS TTL 最佳实践
作者:曾恒
编辑于 2018-07-23 15:50
起源
根据 CDN 团队提供的数据,发现印度地区账号域名的 DNS 解析时间比淘宝慢 174ms。这一现象引发了本文的撰写。
DNS 基础
TTL 在域名设置中是一个重要但常被忽视的值。它主要告知 Resolving Name Server 对 DNS 记录的缓存时间。用户在浏览器中输入 www.mi.com 的域名解析过程如下:
- 用户向 Resolving Name Server 发起 DNS 查询请求。Resolving Name Server 收到请求后,首先检查本地是否有该记录缓存,以及是否存在 www.mi.com 的权威服务器。如果存在,则直接发送给 www.mi.com 的权威服务器;若不存在,则继续查询 mi.com 的权威服务器;若仍不存在,则查询 com 的名称服务器,直至到达根服务器,因为每个名称服务器都知晓根名称服务器的域名和地址。
- Resolving Name Server 向根服务器发起查询(所有根服务器均提供迭代解析)。根服务器返回一个负责处理 .COM 的 gTLD 服务器域名列表。
- Resolving Name Server 接收到根服务器返回的 gTLD 服务器列表后,根据最小 RTT 算法选择一个服务器,继续查找 www.mi.com。
- gTLD 服务器同样提供迭代查询,返回给 Resolving Name Server mi.com 的权威服务器。
- Resolving Name Server 从返回的列表中选择一个服务器,继续查询 www.mi.com 的 A 记录。权威服务器查询后返回 A 记录。(需要注意的是,www.mi.com 实际上是一个 CNAME 记录,此时会重复第一步的查询过程。)
- Resolving Name Server 将 IP 地址返回给浏览器,浏览器随后向指定的 IP 发送特定请求。
整个解析过程虽然看似复杂繁琐,但实际上非常迅速,主要得益于缓存机制的存在。名称服务器将获取到的数据存入缓存,以加快后续查询的速度。下次当解析器向本地名称服务器查询某个已知域名的数据时,解析过程将大幅缩短。BIND 名称服务器还实现了否定缓存(negative caching),如果某个权威名称服务器返回的结果是所查询的域名或数据类型不存在,则本地名称服务器也会将该信息暂时放入缓存中。
例如,假设名称服务器已经查询过 www.mi.com 的地址,在查询过程中,它会将 www.mi.com 以及 mi.com 名称服务器的名称和地址(包括 www.mi.com 的 IP 地址)加入缓存。此时,如果某个解析器向该名称服务器询问 test.app.mi.com 的地址,则该名称服务器将跳过根查询这一步,因为 mi.com 是它所知道的最接近 test.app.mi.com 的祖先,于是便会直接查询 mi.com 的名称服务器。
每次在浏览器中输入域名进行查询时,以下两个问题中任何一个回答为“否”,都会触发向上一层进行查询的操作:
- 我们是否有该记录的缓存?
- 如果有缓存,TTL 是否仍然有效?
TTL 的定义
名称服务器不可能永久保存缓存数据,否则当记录发生变更时,无法及时传达。因此,通过定义一个生存时间(TTL),来限定数据在缓存中的存放时间。一旦生存时间到期,名称服务器将丢弃原有的缓存数据,并从权威名称服务器获取新的数据。例如,小米印度区域的账号域名 TTL 设置为 600 秒,在此期间如果没有相应的访问,名称服务器将丢弃缓存数据,导致频繁请求上层权威,从而在一定程度上增加解析时长。
常见 TTL 设置
TTL 通常以秒为单位,以下是一些常见的 TTL 设置:
- 300 秒 = 5 分钟 = “较短”
- 3600 秒 = 1 小时 = “短”
- 86400 秒 = 24 小时 = “长”
- 604800 秒 = 7 天 = “过长”
DNS 更改后的生效时间
在实际工作中,经常有业务人员询问:“我已经修改了域名,但为什么还没有生效?”以下是可能的原因:
a. 浏览器缓存:浏览器缓存是将文件保存在客户端,在同一个会话过程中会检查缓存的副本是否足够新。在后退网页时,访问过的资源可以从浏览器缓存中直接使用。通过减少服务器处理请求的数量,用户可以获得更快的体验。需要注意的是,浏览器缓存并不遵循 DNS TTL 值,因此此处不作过多讨论。
b. 运营商 Local DNS:运营商的 Local DNS 会通过增加 TTL 来缓存域名,从而实现用户访问流量的网内消化,降低请求频率以及整体流量。部分 Local DNS 甚至会缓存部分域名解析结果所指向的内容,并替换成第三方广告联盟的广告。
c. 复杂内部网络:具有多个 DNS 服务器的复杂内部网络可能会导致 DNS 更改时间比预期更长。
大多数服务声明如下:“注意:修改 DNS 服务器需要 0-72 小时的全球生效时间。如果发现某些地方记录尚未生效,且修改 DNS 的时间未满 72 小时,请耐心等待。”
何时使用较小的 TTL
以下情况适合使用较小的 TTL:
- 知道域名记录会频繁更改。
- 对于一些重要的域名,一旦发生记录不可达,损失较大。此时建议将 TTL 设置得较小,以便及时完成变更。(需要注意的是,部分 Local DNS 会对 TTL 进行默认设置,因此在灾难恢复时,时间可能无法完全掌控。)
- 如果在增加或修改 DNS 记录时,不慎输入错误,最好的操作方法是先将 TTL 修改为较小值,然后对记录进行修改。
- 具体情境具体分析。例如,在小米内部,办公网 DNS 和 IDC DNS 分为两部分。办公网的 DNS 管理员将 IDC 相关域名解析转发到 IDC。之前,IDC 的默认 TTL 设置为 86400 秒,导致 IDC 域名变更后,办公网需要较长时间才能同步新的记录。在经过几次投诉后,将默认 TTL 调整为 600 秒。此后,当 IDC 域名发生修改时,办公网能够在大约 10 分钟内同步到新的记录。
何时使用较大的 TTL
以下情况适合使用较大的 TTL:
- 考虑成本因素。例如,在 dnspod 中,免费托管域名的最小 TTL 为 600 秒。在 dnspod 中,较小的 TTL 意味着更高的套餐价格,即客户需要承担更大的成本。
- 较大的 TTL 可以缩短查询时间。如果每次都向权威服务器发起请求,会增加解析时间。
- 对于 MX 记录、DKIM 和 SPF、TXT 记录等,可以设置较长的 TTL。
- 如果域名指向记录很少发生更改(如 CDN 域名、CNAME、A 记录等),可以将 TTL 设置为 12 小时或一天。
- 当根域或 ISP 级别的 DNS 服务器遭受 DDoS 攻击时,如果攻击发生在 TTL 内,部分用户可能不会受到影响。
需要注意的是,在对这些长 TTL 域名进行更改时,建议同时更改 TTL 值,等待缓存生效后再进行其他更改。
TOP 500 Moz 域名的 TTL 设置
关于 TTL 的设置,是否有数据可以作为参考?Moz Top 500 网站已经将所有网站信息整理到 CSV 文件中。通过 Ruby 脚本遍历列表,可以查找每个域名当前记录的 TTL。虽然这不是一个足够宽泛的样本,但它提供了当前(缓存)结果。基于这一前提,仍有一些可以借鉴的结果。
查看修改代码:
https://gist.github.com/mbuckbee/79b2e76bd9271bea38487defd8a9138b
查看 TOP 500 Moz 域名:
https://moz.com/top500
运行结果:
https://note.youdao.com/ynoteshare/index.html?id=7a095fe319bbc36a3e22f92ad5f23a7d
img
Lowest TTL | 1 |
---|---|
Highest TTL | 127,184 |
Domains Resolved | 481 |
Average TTL | 5092.465696 |
Median TTL | 300 |
最低 TTL 值用于负载均衡,以便更快地更改 DNS 记录;最高 TTL 值则用于那些长时间未更改记录的域名。从结果来看,可以将 300 秒的 TTL 作为一个默认的最佳值。
SOA TTL
在每个 DNS 区域的顶部,有几个 TTL 在 DNS 中发挥重要作用:
- Refresh TTL:从服务器向主服务器刷新的时间。Notify 参数可以设置主服务器在发生更改时主动向从服务器更新。如果关闭 notify,则会采用这个 refresh 时间。
- Retry TTL:refresh 失败后的重试时间。
- Expiry TTL:当 refresh 和 retry 都失败,从服务器无法与主服务器建立连接时,过了 expiry 时间后,从服务器将无法提供权威解析,并删除自己的副本。
通常不建议自行修改这些 TTL 值,除非明确知道自己在做什么。
综上所述,针对最初的问题,最佳 TTL 值可以设置为 86400 秒或更大的值。通过设置更高的 TTL 值,可以发现 DNS 解析时间显著缩短。
参考文章
-
浏览器缓存:
http://www.alloyteam.com/2016/03/discussion-on-web-caching/ -
Definitive Guide to DNS TTL Settings:
https://blog.varonis.com/definitive-guide-to-dns-ttl-settings/ -
全局精确流量调度新思路 - HttpDNS 服务详解:
https://mp.weixin.qq.com/s/u6-53Kp9Jb48dKWzaJOKig -
UNDERSTANDING TTL VALUES IN DNS RECORDS:
https://ns1.com/articles/understanding-ttl-values-in-dns-records -
《DNS 与 BIND》 [美] Cricket Liu & Paul Albitz
via:
-
TTL 值的意义 - tonywam1036-ChinaUnix 博客
http://blog.chinaunix.net/uid-20592805-id-1918638.html -
关于 ping 以及 TTL 的分析_ping 设备显示请求超时和 ttl 过期有什么区别 - CSDN 博客
https://blog.csdn.net/u013451221/article/details/46608881 -
不同操作系统的默认TTL(生存时间)值_不同系统的ttl-CSDN博客
https://blog.csdn.net/allway2/article/details/109136579 -
如何利用ping命令TTL来判断操作系统类型_ttl值判断操作系统-CSDN博客
https://blog.csdn.net/qq_42293468/article/details/136361225 -
DNS TTL 值理解及配置 - Jamin Zhang
https://jaminzhang.github.io/dns/DNS-TTL-Understanding-and-Config/ -
域名解析 TTL 是什么?TTL 设置多少合适? | 码笔记
https://www.mabiji.com/domain/dnsttl.html -
DNS TTL 最佳实践 - 知乎
https://zhuanlan.zhihu.com/p/40372792
相关文章:
TTL 值 | 在 IP 协议、ping 工具及 DNS 解析中的作用
注:本文为 “TTL” 相关文章合辑。 未整理去重。 如有内容异常,请看原文。 TTL 值的意义 2007-10-18 11:33:17 TTL 是 IP 协议包中的一个值,用于标识网络路由器是否应丢弃在网络中停留时间过长的数据包。数据包可能因多种原因在一定时间内…...
代码调试:VS调试实操
1.什么是BUG? BUG原意是“虫子”,在计算机领域是指未被发现的错误,又叫程序漏洞 2.什么是调试? 当你在写完代码时需要去找代码中的问题,这个过程就叫调试 我们必须承认有这个问题并且去修复问题,可以透…...
IGMP(Internet Group Management Protocol)与组播技术深度解析
一、组播技术核心概念 1. 组播 vs 单播/广播 传输类型目标地址网络负载典型应用场景单播单一明确IP随接收者数量线性增长网页浏览、文件下载广播全网段(如255.255.255.255)强制全网设备处理ARP请求、DHCP发现组播D类地址(224.0.0.0~239.255…...
JWT(JSON Web Token)
目录 一 JWT简单介绍 二、JWT 的组成结构 1 Header(头部) 2 Payload(载荷) 三、JWT 工作原理 好文分享 session、cookie、token 详解_token session cookie-CSDN博客 一 JWT简单介绍 概念:是一种开放标准&#…...
深入理解多线程编程:从基础概念到实战应用
二进制信号量:线程同步的基础 什么是二进制信号量? 二进制信号量是一种特殊的信号量,其值只能是0或1。它是最简单的线程同步机制之一,常用于线程间的简单协调。 #include <semaphore.h>sem_t sem; // 声明二进制信号量 se…...
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
本课题为基于单片机的智能门禁系统,整个系统由AS608指纹识别模块,矩阵键盘,STM32F103单片机,OLED液晶,RFID识别模块,继电器,蜂鸣器等构成,在使用时,用户可以录入新的指纹…...
【MVP 和 MVVM 相比 MVC 有哪些优化点?】
MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中: 视图(View)和模型(Model)直接交互:View 可能直接监听 Model 的变化(如观察者模式),导致耦合。…...
蓝桥云客 刷题统计
刷题统计 问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数 a, b 和 …...
【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转
资料下载:待更新。。。。 先驱动起来再说,干中学!!! 1、实现功能 STM32同时驱动4个步进电机,支持单独调速与正反转控制 需要资源:16个任意IO口1ms定时器中断 目录 资料下载:待更…...
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新) 环境配置: 显存>24GBPyTorch 2.3.0Python 3.12(ubuntu22.04)CUDA 12.1autoDL服务器平台,(好处:可以分享镜像&…...
迅为RK3568开发板驱动开发指南helloworld驱动实验-驱动的基本框架
Linux 驱动的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数,块导出符号,模块作者信息等几部分组成,其中模块参数,模块导出符号,模块作者信息是选的部分…...
Spring Boot 3.4.3 基于 JSqlParser 和 MyBatis 实现自定义数据权限
前言 在企业级应用中,数据权限控制是保证数据安全的重要环节。本文将详细介绍如何在 Spring Boot 3.4.3 项目中结合 JSqlParser 和 MyBatis 实现灵活的数据权限控制,通过动态 SQL 改写实现多租户、部门隔离等常见数据权限需求。 一、环境准备 确保开发环境满足以下要求: …...
软件工程面试题(二十三)
1、public class Test {public static void add(Integer i){int val=i.intValue(); val+=3; i=new Integer(val); } public static void main(String[] args) {Integer i=new Integer(0); add(i); System.out.println(i.intValue());...
spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
对比详解 1. RedisTemplate 功能:Spring Data Redis的核心模板类,提供对Redis的通用操作(如字符串、哈希、列表、集合等)。使用场景:常规的Redis增删改查操作。特点: 支持序列化配置(如String…...
leetcode-热题100(3)
leetcode-74-搜索二维矩阵 矩阵最后一列升序排序,在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…...
【大模型系列篇】大模型基建工程:使用 FastAPI 构建 SSE MCP 服务器
今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤…...
基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型的原理与架构 2.2 在医疗领域的应用现状 三、术前评估与预测 3.1 患者数据收集与分析 3.1.1 临床数据收集 3.1.2 影像数据处理 3.2 大模型预测模型建立 3.2.1 数据预处理 3.…...
5.模型训练-毕设篇
vgg: base_model_vgg13 models.vgg13(pretrainedTrue) base_model_vgg13.classifier[-1] nn.Linear(4096, num_classes) base_model_vgg13.to(device)(b_img_rgb.to(device)).shapebase_model_vgg13 models.vgg13(pretrainedTrue) 作用:加载预训练的…...
[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议
第一步:先理解最基础的关系(类比快递) 假设你要给朋友寄快递: Wi-Fi:相当于“公路和卡车”,负责把包裹从你家运到快递站。 TCP/UDP:相当于“快递公司的运输规则”。 TCP:顺丰快递&…...
【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现
项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...
LeetCode算法题(Go语言实现)_23
题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ,返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。 一、代码实现 func equalPairs…...
Windows家庭版如何开启Hyper-V与关闭Hyper-V
在Windows中如果要安装桌面版Docker,那么Hyper-V一定是需要开启的,在专业版操作系统上,这个功能直接就可以勾选开启,重启之后就即可生效,但在家庭版的操作系统上,默认是没有这个选择项的,这时候我们就需要借助于命令去开启它。本文,整理了一键开启Hyper-V服务和一键关闭…...
C# 中充血模型和贫血模型
在C#中,充血模型(Rich Domain Model)和贫血模型(Anemic Domain Model)是两种截然不同的领域建模方式,核心区别在于业务逻辑的归属。以下是通俗易懂的解释: 1. 贫血模型ÿ…...
C++中的继承
#include <iostream> using namespace std;// 武器类(基类) class Weapon { protected:int atk; // 攻击力public:// 构造函数Weapon(int atk 0) : atk(atk) {}// 虚拟析构函数virtual ~Weapon() {}// set 和 get 接口void setAtk(int atk) {this…...
Uubuntu20.04复现SA-ConvONet步骤
项目地址: tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤: 一、系统更新 检查系统是否已经更新到最新版本: sudo apt-get update sudo apt-get upgra…...
Blender模型导入虚幻引擎设置
单位系统不一致 Blender默认单位是米(Meters),而虚幻引擎默认使用**厘米(Centimeters)**作为单位。 当模型从Blender导出为FBX或其他格式时,如果没有调整单位,虚幻引擎会将1米(Blen…...
大数据Spark(五十五):Spark框架及特点
文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室(Algorithms, Machines, and Pe…...
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
文章目录 前言一、asyncio基础概念1.1 什么是异步编程?1.2 asyncio核心组件 二、asyncio核心用法详解2.1 事件循环管理2.2协程与任务2.3 异步上下文管理器 三、asyncio高级特性3.1 异步生成器3.2异步队列3.3 异步锁和信号量 四、asyncio实战项目4.1 高性能Web爬虫4.…...
线段树,单点,区间修改查阅
#PermanentNotes/algorithm 思想 首先关于树有许多类型,这里我们主要首线段树,整体思想就是将一个大区间进行拆分,拆分成各个小区间,在我们进行查找,更新时,就是对区间的查找更新 类型 初始化,构建树 代码 const int Z 1e7; const ll INF 1e18; const int maxn 1e5 10…...
音视频(二)ffmpeg编译及推流
FFmpeg 大名鼎鼎,就不多介绍了 1:环境 win11_amd64 ffpmeg download:https://git.ffmpeg.org/ffmpeg.git ffmpeg msys2 download:https://www.msys2.org/ vs2022 (c 写demo用) 用别的也行 usb2.0 摄像头(有点老) opencv 看上传的…...
syslog 与 Linux 内核日志系统全面解析
在 Linux 系统中,日志是进行系统调试、故障排查和系统安全分析的重要手段。syslog 和内核日志是 Linux 日志组成的核心组件。本文将从原理、实现、配置、常见问题分析等综合解析,全面解读 Linux 下的日志机制。 一、syslog 系统概述 1.1 什么是 syslog …...
SQL问题分析与诊断(8)——关键信息(2)
8.2. 关键信息 8.2.2. 警告 查询计划中,可能会看到出现于操作符上的小图标,特别是黄色或红色的感叹号。这些图标都是警告。并非每个警告都指示一个严重问题,但发现时请检查该图标的属性窗口,其将包含该警告图标的具体细节。 8.…...
HCIA/HCIP基础知识笔记汇总
HCIA/HCIP基础知识笔记汇总 ICT产业链: 上游:芯片制造、元器件生产、光纤光缆制造 中游:硬件组装、软件开发、网络建设维护 下游:电信服务、互联网服务、终端产品 VLAN端口类型: access :…...
vue3 动态路由
定义: 对路由的添加通常是通过 routes 选项来完成的,但是在某些情况下,你可能想在应用程序已经运行的时候添加或删除路由 1. 动态添加路由规则 场景 在应用初始化时,可能需要根据用户的角色或权限动态添加路由规则。 实现 im…...
《Linux内存管理:实验驱动的深度探索》大纲
《Linux内存管理:实验驱动的深度探索》 ——通过递进式实验与问题剖析,从入门到精通 第一部分:初探内存——基础概念与简单实验 目标:理解内存的基本行为,学会观察和提问 第1章 内存初体验:从"free…...
【C语言】深入理解指针(五):sizeof、strlen与数组指针的那些事儿
前言 在C语言的学习中,指针始终是一个让人又爱又恨的话题。它强大而灵活,但同时也充满了陷阱。今天,我们就来深入探讨一下指针相关的几个重要知识点:sizeof和strlen的区别,以及数组和指针在笔试题中的那些常见问题。希…...
CMake学习-- install 指令详细说明
目录 CMake中install命令的用法背景知识使用方法项目结构示例代码CMakeLists.txt构建和安装 详细介绍安装库和头文件安装可执行文件安装额外的文件安装目录结构使用安装的库 总结 CMake中install命令的用法 背景知识 在软件开发过程中,构建和安装是两个重要的环节…...
Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast 编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下载相关…...
uniapp 微信小程序 使用ucharts
文章目录 前言一、组件功能概述二、代码结构分析2.1 模板结构 总结 前言 本文介绍一个基于 Vue 框架的小程序图表组件开发方案。该组件通过 uCharts 库实现折线图的绘制,并支持滚动、缩放、触摸提示等交互功能。文章将从代码结构、核心方法、交互实现和样式设计等方…...
空调开机启动后发出噼里啪啦的异响分析与解决
背景 当空调使用时由于制冷或制热运转时(关机后可能也会出现),塑料件热胀冷缩引起,可能会出现“咔咔”的声音;空调冷媒在空调内管路流动时会出现轻微的“沙沙”的声音;也有可能是新装的空调摆风轴出现响声…...
Python爬虫第3节-会话、Cookies及代理的基本原理
目录 一、会话和Cookies 1.1 静态网页和动态网页 1.2 无状态HTTP 1.3 常见误区 二、代理的基本原理 2.1 基本原理 2.2 代理的作用 2.3 爬虫代理 2.4 代理分类 2.5 常见代理设置 一、会话和Cookies 大家在浏览网站过程中,肯定经常遇到需要登录的场景。有些…...
《自然-方法》2024年度技术:空间蛋白质组学(spatial proteomics)
李升伟 编译 《自然-方法》第21卷 2195-2196页 (2024) 解析组织空间蛋白质组的技术,正成为图谱级研究项目的基石。这些项目正在兑现其承诺,帮助人类理解健康和疾病状态下的生物复杂性。 人类天生充满探索欲。我们热爱勘测未知疆域,并随之绘…...
pip安装timm依赖失败
在pycharm终端给虚拟环境安装timm库失败( pip install timm),提示你要访问 https://rustup.rs/ 来下载并安装 Rust 和 Cargo 直接不用管,换一条命令 pip install timm0.6.13 成功安装 简单粗暴...
【工具变量】全国分省低空经济高质量发展数据(2012-2023年)
测算方式:参考CSSCI《北京航空航天大学学报(社会科学版)》沈映春(2024)老师的做法,如商图指标构建图所示。 包含内容: 样例代码: 样例数据: 参考文献:沈映春,张豪兴.数字基础设施建设…...
【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?还有哪些部署工具?
使用 kubeadm 搭建 Kubernetes 集群是一个比较常见的方式。kubeadm 是 Kubernetes 提供的一个命令行工具,它可以简化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步骤: 1. 准备工作 确保你的环境中有两台或更多的机…...
Java 枚举类 Key-Value 映射的几种实现方式及最佳实践
Java 枚举类 Key-Value 映射的几种实现方式及最佳实践 前言 在 Java 开发中,枚举(Enum)是一种特殊的类,它能够定义一组固定的常量。在实际应用中,我们经常需要为枚举常量添加额外的属性,并实现 key-value 的映射关系。本文将详细…...
JavaScript instanceof 运算符全解析
JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…...
问题大集09-如何实现vite创建的react项目的配置别名路径@
(1)如何实现vite创建的react项目的配置别名路径 1)直接修改 Vite 配置文件 ①打开项目根目录下的 vite.config.js 文件(如果没有则新建),添加 resolve.alias 配置(新增resolve部分)…...
鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008
然后我们再来看鸿蒙中的模块如何导入导出。 其实就跟Java中的import是一个意思的。 只不过我们如果想把一个类中的某个方法导入到另一个类中, 那么首先要在这个类中去导出这个方法。 可以看到导出的关键字是export。 然后导入的关键字是import。 然后我们写个例子去看一下,…...
算法设计与分析之“分治法”
分治法(Divide and Conquer)是一种高效的算法设计策略,其核心思想是将复杂问题分解为多个子问题,递归求解后再合并结果。以下是分治法的详细介绍: 一、分治法的基本步骤 分治法遵循以下三步流程: 分解&…...