19-多个版本的netcat概览

netcat模型

image-20230218094554917

  • 服务端:bind、listen、accept

  • 客户端:解析地址、connect

 

  • 每当连接建立,客户端和服务端相同

    • 两个并发线程:

      • 从stdin标准输入read,将读到的数据写到socket

      • 从tcp socket read,读到的数据写到stdout标准输出

 

netcat运行

image-20230218094811174

ctrl+D终止

 

代码

image-20230218095451257

 

 

 

 

 

多个版本的netcat对比

 

自带的netcat

左边是chargen充当的服务端,会打印出带宽,如图为2.0GB/s.

右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,nc的CPU利用率为100,而chargen的利用率为42.2.可知带宽是受限于nc(客户端)。

image-20230218100612666

 

c++写的netcat

左边是chargen充当的服务端,会打印出带宽,如图为3.7GB/s.

右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,netcat的CPU利用率为100,而chargen的利用率为75.可知带宽是受限于netcat(客户端)。

image-20230218101428333

 

python写的netcat

左边是chargen充当的服务端,会打印出带宽,如图为1.3GB/s.

右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,python2(netcat)的CPU利用率为100,而chargen的利用率为27.7.可知带宽是受限于netcat(客户端)。

image-20230218101802749

 

python写的非阻塞netcat

左边是chargen充当的服务端,会打印出带宽,如图为1.3GB/s.

右上方是top命令,用来查看CPU占用率,从而获知带宽是受限于服务端还是客户端。见下图,python2(netcat)的CPU利用率为100,而chargen的利用率为27.3.可知带宽是受限于netcat(客户端)。

image-20230218102002261

 

总结

对应chargen使用率高,即可以简单地理解为netcat效率高。

四个版本终端netcat的chargen的使用率从高到低:c++netcat 》 自带netcat 》python netcat ≈ python nonblock netcat

在并发连接数较小的情况下:一个连接分配一个线程的带宽是会比IO复用高的。

 
posted @ 2023-04-29 15:43  DavidJIAN  阅读(112)  评论(0)    收藏  举报