gpt4 book ai didi

sockets - TCP keepalive 是否会刷新 NAT 上的超时?

转载 作者:可可西里 更新时间:2023-11-01 02:32:11 33 4
gpt4 key购买 nike

I've read NAT 路由器“如果在特定时间段内没有发送数据,则假定连接已终止。”

I've also read TCP keepalive 数据包通常不应包含任何数据。

所以我的问题是:

  1. 以上说法是否正确?
  2. NAT 路由器在重新排序/清理它们的表时是否考虑空的 TCP keepalive 数据包?

我问这个是因为我需要两个端点之间的可靠连接,它们都必须能够检测到连接问题并使用react。我知道我可能只是自己实现了一个 keepalive 机制,但我想知道 TCP 实现是否可以用于此目的。

最佳答案

我相信第二个陈述是指有效载荷(最短的 TCP/IP 数据包长度为 40 字节 - TCP header 20 字节 + IPv4 header 20 字节)。

关于第一个,这里引用 RFC 2663:

End of session for TCP, UDP and others

The end of a TCP session is detected when FIN is acknowledged byboth halves of the session or when either half receives a segment withthe RST bit in TCP flags field. However, because it is impossible fora NAT device to know whether the packets it sees will actually bedelivered to the destination [...] the NAT device cannot safely assumethat the segments containing FINs or SYNs will be the last packets ofthe session [...] Consequently, a session can be assumed to have beenterminated only after a period of 4 minutes subsequent to thisdetection. The need for this extended wait period is described in RFC793 [Ref 7], which suggests a TIME-WAIT duration of 2 * MSL (MaximumSegment Lifetime) or 4 minutes.

引用:https://www.rfc-editor.org/rfc/rfc2663

据我了解,任何标识 session 的数据包都会重置 TTL 计数器 - 但这在很大程度上取决于实现,因为“数据”可以理解为“数据包”(最少 40 字节)或“数据包有效负载”。尽管如此,@CodeCaster 还是很准确的;永远不要假设连接是事件的,在发送之前确保它是事件的(并且,如果可能并且根据关键性,确认收到。)

关于sockets - TCP keepalive 是否会刷新 NAT 上的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497981/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com