我一直在阅读 iptables 手册页(睡前阅读),我遇到了“TTL”目标,但它警告说:
设置或增加 TTL 字段可能非常危险
和
永远不要设置或增加离开本地网络的数据包的值!
我可以看到递减或设置较低的 TTL 可能如何导致数据包在到达目的地之前被丢弃,但递增会产生什么影响?
我一直在阅读 iptables 手册页(睡前阅读),我遇到了“TTL”目标,但它警告说:
设置或增加 TTL 字段可能非常危险
和
永远不要设置或增加离开本地网络的数据包的值!
我可以看到递减或设置较低的 TTL 可能如何导致数据包在到达目的地之前被丢弃,但递增会产生什么影响?
TTL 在通过路由器时会递减。这确保了如果数据包绕着圈子移动,它最终会死掉。
IPv4 数据包的 TTL 字段是一个 8 位字段(十进制为 255)。所以在开始时将它设置得高并不是什么大问题,因为它实际上不可能在格式良好的数据包中那么大(尽管有些东西可能会接受格式错误的 IP 数据包)。
然而,如果有什么东西增加它,并且增加步骤是循环的一部分,数据包可以继续循环而不会达到零。随着时间的推移(可能非常短,或逐渐泄漏),数据包可能会在包含该循环的系统中累积,从而导致其过载。
数据包上的 TTL 基本上使路由保持正常。如果一个数据包具有非常大的 TTL 并且由于某种原因被困在循环路由中,它可能会导致大量流量(称为“数据包风暴”)并干扰正常操作。TTL 太低会导致连接丢失,因为您会在数据包到达目的地之前丢失它。
答案似乎遗漏了一点,但这纯粹是学术性的(因为互联网上似乎需要多少跳):如果数据包通常由于 TTL 到期而无法到达目的地,则增加它将允许数据包到达目的地,但不会影响返回的数据包,并且它们会在到达您的网络之前过期。
更新:根据维基百科上的这个页面:
更新 2:当有人更新了我的帖子并引用了维基百科时,我认为最好参考 RFC 本身 - http://www.ietf.org/rfc/rfc791.txt - 只需在那里搜索 TTL 就可以了很好地解释它:
我只知道一个程序可以使用更高的 TTL 值,那就是
traceroute
. 顾名思义,它通过修改 TTL 值来跟踪到目标主机的路由。标准的最大跳数是 20,但您可以增加它。每个处理数据包的路由器都会递减 TTL 值,直到数据包到达目的地,或者 TTL 达到零,然后终止。
正如其他人所说,如果存在负循环,增加 TTL 可能会导致数据包永不死亡。通常,如果 TTL 值不够大,尝试更大 TTL 的逻辑可能应该由端到端客户端处理。
如果您确定路由器不在循环(树状拓扑)中,理论上您可以安全地增加 TTL 值。话虽如此,允许比标准更多的跃点可能会使外部网络更容易发生拥塞。如果在内部和外部网络之间有很长的路由器链,只要没有循环,较大的 TTL 值可能会有所帮助。话虽如此,有人可以很容易地向网络添加边缘并创建一个循环,因此从数据包最初起源的较大 TTL 值开始会更安全。