TCP keepalive是否刷新NAT的超时?

时间:2013-12-10 15:09:33

标签: sockets tcp nat

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

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

所以我的问题是:

  1. 以上陈述是否属实?
  2. NAT路由器在重新排序/清理表时是否考虑空TCP keepalive数据包?
  3. 我问这个是因为我需要在两个端点之间建立可靠的连接,这两个端点都必须能够检测并解决连接问题。我知道我可能只是自己实现了一个keepalive机制,但我想知道TCP实现是否可以用于此。

1 个答案:

答案 0 :(得分:2)

我确实认为第二个语句是指有效载荷(最短的TCP / IP数据包长度为40个字节 - TCP标头为20个字节,IPv4标头为20个字节)。

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

  

TCP,UDP和其他人的会话结束

     

当FIN被确认时,检测到TCP会话结束   会话的两半或任何一半接收到一个段   TCP标志字段中的RST位。但是,因为它是不可能的   NAT设备,以了解它看到的数据包是否实际上是   传送到目的地[...] NAT设备无法安全地假设   包含FIN或SYN的段将是最后一个包   会议[...]因此,可以假设一个会话   在此之后的4分钟后才终止   检测。 RFC中描述了对延长等待期的需求   793 [参考文献7],建议TIME-WAIT持续时间为2 * MSL(最大值   分段寿命)或4分钟。

参考:http://tools.ietf.org/html/rfc2663

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