小编gar*_*gkc的帖子

只有一个 TCP 套接字(通过 nc)能够同时向同一主机/端口发送数据

简单的重现 - 在一个窗口中观察顶部的进程,在另一个窗口中运行:nc -lkp 10000 > /dev/null & ( head -50000000 /dev/urandom | nc -N 127.0.0.1 10000 ) & ( head -50000000 /dev/urandom | nc -N 127.0.0.1 10000 )

请注意,只有一个head进程nc正在主动使用 CPU。

将 strace 附加到head不活动的 - 看到它在写入时停止,例如:

strace: Process 589084 attached
write(1, "\264\347\270\26\27\24'BRb^\353\302\36@\216\17V\210*n\252`\353\330\351\276\2\250\330\350\217"..., 4096^Cstrace: Process 589084 detached
 <detached ...>
Run Code Online (Sandbox Code Playgroud)

在不同的端口上设置两个侦听器 - 例如 10000 和 10001,并且两者都全速运行。

这是一个简单的示例,但我可以使用其他输入和输出来重现它 - 例如 zcatting 大文件并通过网络将它们发送到生产服务。这与输入无关,也与监听套接字无关。

那么 - 为什么我只能有一个 tcp 连接到任何给定的主动发送数据的主机/端口?

有一个独立的数据源(如果您不相信我,请随意实验),以及一个打开自己的 TCP 连接的独立进程(netstat将显示它们都打开) - 唯一的共同点是目的地(它不必须nc倾听 …

linux linux-networking

3
推荐指数
1
解决办法
1341
查看次数

标签 统计

linux ×1

linux-networking ×1