TCP keepalive是否刷新NAT的超时?

Gri*_*ddo 5 sockets tcp nat

我已经读过 NAT路由器"假设如果在一段时间内没有发送数据,则终止连接."

我还读到 TCP keepalive数据包通常不应包含任何数据.

所以我的问题是:

  1. 上述陈述是真的吗?
  2. NAT路由器在重新排序/清理表时是否考虑空TCP keepalive数据包?

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

Ono*_*dai 2

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

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

TCP、UDP 和其他协议的会话结束

当会话的两半均确认 FIN 或任一半接收到 TCP 标志字段中带有 RST 位的数据段时,检测到 TCP 会话结束。然而,由于 NAT 设备不可能知道它看到的数据包是否实际上会传送到目的地 [...],因此 NAT 设备无法安全地假设包含 FIN 或 SYN 的段将是会话的最后一个数据包[...] 因此,仅在此检测后 4 分钟后才可以假定会话已终止。RFC 793 [参考文献 7] 中描述了这种延长等待期的必要性,其中建议 TIME-WAIT 持续时间为 2 * MSL(最大段寿命)或 4 分钟。

参考: https: //www.rfc-editor.org/rfc/rfc2663

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