首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在接收到三次握手的ACK后重置TCP。

在接收到三次握手的ACK后重置TCP。
EN

Stack Overflow用户
提问于 2015-10-08 22:01:12
回答 1查看 4.8K关注 0票数 3

我有一个有多个客户端的服务器。模拟网络处于严重的拥塞状态。我发现服务器在收到ACK部分的三次握手后重置了一些TCP连接。但是,当网络处于良好状态时,这种情况就不会发生。

我发现,三人握手的ACK比SYN晚了3.5s。是因为三人握手暂停了吗?如果SYN超时,为什么不重新发送SYN.

谢谢你的建议。

EN

回答 1

Stack Overflow用户

发布于 2015-10-09 07:03:48

这看起来与SYN曲奇有关。

SYN曲奇

当Linux主机收到太多SYN通信量时,它会激活SYN cookies机制。

启用specific时,服务器将发出一个SYN段,其中包含在TCP sequence字段中编码的特定数据,从而响应SYN。在该字段中,它编码时间戳、MSS和两个端点(本地和远程IP和端口)的加密散列以及时间戳。

这样做是为了使服务器不必在此时存储任何关于连接的内容,它只需发送答案并忘记它。

然后,当客户端响应其ACK时,服务器将检查ack字段中的散列(客户端的ack是服务器的序列)。如果它是正确的,它将创建与存储在字段中的数据的连接。

SYN cookie解释了为什么服务器在超时时不重新发送SYN数据包。

但是,为什么在接收ACK后重置?

可能客户端(或服务器)位于修改端口的NAT后面,NAT也会阻塞,因此它无法将最终的ACK链接到前一个SYN,并分配一个新的源端口。当服务器接收到它时,它会重置连接(是否启用SYN并不重要)。

或者服务器进程没有以它们到达的相同速度接受连接,内核队列已经填充,较新的队列被这样丢弃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33026669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档