当前位置: 首页 > 知识库问答 >
问题:

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

朱修德
2023-03-14

我读到过NAT路由器“假设一个连接已经终止,如果一段时间内没有发送数据。”

我还读到TCP保活数据包通常不应该包含任何数据。

所以我的问题是:

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

我之所以这么问是因为我需要两个endpoint之间的可靠连接,其中两个endpoint都必须能够检测连接问题并对其作出反应。我知道我自己可能只是实现一个keepalive机制,但我想知道TCP实现是否可以用于此。

共有1个答案

诸俊才
2023-03-14

我相信第二条语句指的是有效负载(最短的TCP/IP数据包长度为40字节--TCP报头为20字节+IPv4报头为20字节)。

关于第一个,这里引用了RFC2663中的一段话:

TCP、UDP和其他的会话结束

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

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

据我所知,任何标识会话的数据包都会重置TTL计数器--但这在很大程度上取决于实现,因为“数据”可以理解为“数据包”(至少40字节)或“数据包有效负载”。尽管如此,@codecaster是一针见血的;永远不要假设连接是活动的,在发送之前确保它是活动的(并且,如果可能的话,根据关键程度,确认接收。)

 类似资料:
  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可

  • 问题内容: 如何检查datetime64是否为NaT?我似乎无法从文档中挖掘任何东西。我知道Pandas可以做到,但我不想对如此基本的东西添加依赖。 问题答案: 简介: 这个答案是在Numpy版本为1.11的时候写的,而NAT比较的行为应该从版本1.12开始改变。显然不是这种情况,答案的第二部分就错了。答案的第一部分可能不适用于新版本的numpy。确保已检查以下MSeifert的答案。 第一次进行

  • 有关MysqlDump进程的问题。 在获取mysqldump时,是否发生了刷新日志?假设mysqldump运行单事务,那么会创建新的二进制日志文件吗?

  • 我有一个奇怪的问题与Kafka->elasticsearch连接器。当我第一次启动时,我在elasticsearch中收到了一个新数据,并通过kibana dashboard进行了检查,但当我使用同一个producer应用程序在kafka中生成新数据并尝试再启动一次connector时,我在elasticsearch中没有得到任何新数据。现在我遇到了这样的错误: 我正在使用next命令运行连接器:

  • 使用Debezium 0.7从MySQL读取,但在初始快照阶段会出现刷新超时和OutOfMemoryError错误。看下面的日志,连接器似乎试图一次写入太多消息: 想知道正确的设置是什么http://debezium.io/docs/connectors/mysql/#connector-大型数据库的属性( 按照以下建议更改了设置,并解决了问题:

  • 问题内容: 我正在使用Wget通过cron通过以下命令运行PHP脚本: 该脚本最多需要5-6分钟来进行处理。WGet是否会等待它并一直提供它所需的时间,还是会超时? 问题答案: 根据wget的手册页,有两个与超时有关的选项-默认读取超时为900s-所以我说是的,它可能会超时。 这是有问题的选项: 将网络超时设置为秒秒。这等效于同时指定, 和和 。 对于这三个选项: 将DNS查找超时设置为秒秒。 在