Python中文
首页
教程
问答
标签
搜索
登录
注册
为什么当客户端愉快地发送TCP包时,TCP数据包总是无法到达服务器?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我已经设置了一个简单的客户机服务器,从客户机发送的TCP数据包似乎没有到达服务器。在</p> <p>正常情况下,一切正常,但当我在客户端上启动50个线程,用相同的小数据包(只有39个字节)“同时”撞击服务器时,服务器没有接收到所有字节的随机次数。更奇怪的是,它总是不接受它们。。。只接收5个字节。在</p> <p>我使用<a href="http://www.tcpdump.org/" rel="nofollow">tcpdump</a>和<a href="https://github.com/simsong/tcpflow/wiki/tcpflow-%E2%80%94-A-tcp-ip-session-reassembler" rel="nofollow">tcpflow</a>来捕获两端发生的事情(<em>如果不熟悉tcp流,它会从tcp流中删除大量的tcp SYN/ACK/FIN/etc噪声,并且只向您显示两个方向发送的数据)</em>。在</p> <p>在客户端,对于启动39字节数据包的50个线程来说,它看起来很完美。具体来说,tcpflow(使用libpcap)显示了50个相同的数据传输:</p> <pre><code>07 B6 00 01 | 00 1E 00 00 | <etc> </code></pre> <p>据我所知,libpcap/tcpdump从一个相当低的级别(低于TCP堆栈)获取数据,所以我认为这意味着数据发送正常,或者至少没有被卡在内核缓冲区中。在</p> <p>然而,从服务器端来看,一切并非完美。一个随机数失败了,而且这个比例很高。例如,在50个套接字连接中,30个可以正常工作,但是对于其中的20个,我遇到了一个协议故障,服务器的<code>socket.recv</code>超时等待字节(协议指示确切的数据包长度)。在</p> <p>在失败的方式上,<strong>非常</strong>是一致的。对于30/20情况,30个套接字完全接收传输的39个字节。剩下的20个都接收到这部分数据,之后my <code>socket.recv</code>超时:</p> ^{pr2}$ <p>20个连接中每个连接只有5个字节到达,而且似乎是在内核级别,因为tcpdump也只显示5个字节到达。在</p> <p>怎么会这样?在</p> <p>这个5字节的边界不是100%一致的。它是报头的第一部分,接下来是34字节的有效负载,但是没有到达。在客户端,它是这样分割的。在</p> <pre><code>sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) sock.sendall(HEADER) # 5 bytes sock.sendall(PAYLOAD) #34 bytes </code></pre> <p>而且这两个<code>sock.sendall</code>调用在每个线程中都成功完成,正如我所证明的那样,tcp日志记录显示,所有50次运行都完美地发送了39个字节。在</p> <p>有什么关于这件事的根本原因的想法吗?我错过了什么?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您必须非常小心,因为(由于缓冲)send和recv可能无法发送或接收到您期望的“应该”可用的数据。您还必须非常小心,任何线程都可能在任何时候阻塞,即使它“应该”能够接收到与您认为发送的数据一样多的数据。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
文本导入时标题行中的特殊字符
3 回答
文本小部件:在没有输入时更新并在循环后保持空闲
6 回答
文本小部件tkin
9 回答
文本小部件tkinter中的标签更改或文本外观更改是否有撤消功能?
9 回答
文本小部件tkinter复制图像选项
1 回答
文本小部件上的Python Tkinter ttk滚动条未缩放
8 回答
文本小部件上的滚动条可能需要根据制表符ord显示前进行滚动
4 回答
文本小部件不显示lis中的内容
7 回答
文本小部件不显示Unicode字符
3 回答
文本小部件中写入的行间距
2 回答
文本小部件中的文本作为变量
9 回答
文本小部件中的滚动条仅显示在底部
1 回答
文本小部件中的选项卡键空间计数
2 回答
文本小部件作为Lis
2 回答
文本小部件在主框架中扩展列宽
5 回答
文本小部件未使用删除功能清除
5 回答
文本小部件滚动动画(Tkinter、Python)
2 回答
文本居中。格式正确吗?
10 回答
文本差分算法
2 回答
文本已知时音频文件中的单词索引
10 回答