我读了一些关于PAWS(保护包装序列)的内容。这很有趣。我不知道实现这么复杂的事情来保证TCP的可靠性。没有PAWS,在高数据速率的情况下,可以接收延迟的旧数据包并将其视为新数据包。
我以前对此并没有多想。但现在我开始想知道数据包可以在网络中保留多长时间(特别是UDP数据包,如果数据包的类型很重要)。数据包可能会被延迟,在传送之前暂时停留在网络中。但它只能停留很短的时间,对吗?
换句话说,在断定它不会来之前等待(UDP)数据包需要多长时间?
如果有答案,那么如何确定?怎么估计呢? (用于编写与数据包超时相关的程序。)
简化示例:服务器收到2个UDP数据包。每个都包含一个整数来表示顺序。它获得了No.1和No.3。它知道No.2要么被延迟要么丢失了。经过一段时间后,No.2仍然没有来,然后它得出结论,数据包丢失了。数据包不再存在。 (因此,将来不会对新数据包造成任何麻烦,类似于PAWS旨在解决的问题。)但是,在结束No.2之前服务器应该等待多长时间了?
答案 0 :(得分:2)
UDP是一种即发即弃,尽力而为的协议。接收主机没有期望UDP数据包即将到来。上层可以使用自己的保证或期望,但UDP没有。
UDP不会像TCP那样等待数据包。
答案 1 :(得分:1)
请参阅RFC 791 #3.2:
生存时间
生存时间由发件人设置为最长时间 允许数据报在互联网系统中。如果是数据报 互联网系统比生存时间更长,然后是 必须销毁数据报。
必须在互联网标题的每个点减少此字段 处理以反映处理数据报所花费的时间。 即使实际上没有当地可用的本地信息 花费,该字段必须减少1.时间以度量为单位 秒的单位(即值1表示一秒)。就这样 最长生存时间为255秒或4.25分钟。每一个 处理数据报的模块必须至少减少TTL 即使它在不到一秒的时间内处理数据报,也就是TTL 必须将其视为数据报可能的上限 存在。目的是使无法传递的数据报成为现实 丢弃,并限制最大数据报的生命周期。