linux TCP服务器连接时发不出数据

来源:本站
导读:目前正在解读《linux TCP服务器连接时发不出数据》的相关信息,《linux TCP服务器连接时发不出数据》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《linux TCP服务器连接时发不出数据》的详细说明。
简介:本文是关于 linux TCP服务器连接时发不出数据 。

服务器和两个客户端连接,采用epoll非阻塞方式,客户端分别发送心跳包(6s一次),服务器发送心跳回应,接收在一个线程,人为操作服务器,每隔1S查询一次客户端业务情况,在另一个线程发送,此线程与接收线程未作互斥同步(Socket可能同时被两线程“写”)

所以服务器的两个线程大约每隔6一次数据冲突。(这是诱因)

抓包发现的确出现有一定概率的数据冲突。

冲突后,接着服务器关闭1S的查询业务,网络上只心跳包和心跳回应包。

代码上看:

每次客户端发心跳包后,服务器返回心跳回应都成功,这两种数据包都不大,都是40byte,不应该导致协议栈满问题是客户端收不到任何数据(这是我关注的问题)

抓包显示此时只有服务器端的TCP协议栈返回受到数据的纯ACK应答, ACK应答里并不包含心跳应答数据内容???

linux TCP服务器连接时发不出数据

这种包好奇怪,命名负载在TCP头尾部,但wiresharp解析却放在Ethernet头尾部,对于padding第一次听说。

整个包长度60byte,其中6byte全0填在末端,54byte是Ethernet+IP+TCP头

过了1min后客户端断开连接

抓包显示10次供400byte的心跳应答一次性发完

同事对最后一次发送的分析是:

TCP断开会有半连接状态,主动断开放问对方是否有数据要发,有就一次性发送。

大致的网络数据流程是这样

linux TCP服务器连接时发不出数据

提醒:《linux TCP服务器连接时发不出数据》最后刷新时间 2024-03-14 00:56:49,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《linux TCP服务器连接时发不出数据》该内容的真实性请自行鉴别。