19-多个版本的netcat概览
-
服务端:bind、listen、accept
-
客户端:解析地址、connect
-
每当连接建立,客户端和服务端相同
-
两个并发线程:
-
从stdin标准输入read,将读到的数据写到socket
-
从tcp socket read,读到的数据写到stdout标准输出
-
-
netcat运行

ctrl+D终止
代码

多个版本的netcat对比
自带的netcat
左边是chargen充当的服务端,会打印出带宽,如图为2.0GB/s.
右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,nc的CPU利用率为100,而chargen的利用率为42.2.可知带宽是受限于nc(客户端)。

c++写的netcat
左边是chargen充当的服务端,会打印出带宽,如图为3.7GB/s.
右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,netcat的CPU利用率为100,而chargen的利用率为75.可知带宽是受限于netcat(客户端)。

python写的netcat
左边是chargen充当的服务端,会打印出带宽,如图为1.3GB/s.
右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,python2(netcat)的CPU利用率为100,而chargen的利用率为27.7.可知带宽是受限于netcat(客户端)。

python写的非阻塞netcat
左边是chargen充当的服务端,会打印出带宽,如图为1.3GB/s.
右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,python2(netcat)的CPU利用率为100,而chargen的利用率为27.3.可知带宽是受限于netcat(客户端)。

总结
对应chargen使用率高,即可以简单地理解为netcat效率高。
四个版本终端netcat的chargen的使用率从高到低:c++netcat 》 自带netcat 》python netcat ≈ python nonblock netcat
在并发连接数较小的情况下:一个连接分配一个线程的带宽是会比IO复用高的。


浙公网安备 33010602011771号