boost::Asio 的 Netstat 输出

Netstat output with boost::Asio

我已经用接受器创建了一个 asio 服务器:

m_acceptor(m_ios, asio::ip::tcp::endpoint(asio::ip::address_v4::any(), port_num)

其中端口号为 3333

此时netstat -antup命令显示:

13:tcp        0      0 0.0.0.0:3333 0.0.0.0:*  LISTEN      26566/./test

所以,我相信这意味着本地地址 0 0.0.0.0:3333 已准备好监听端口 3333 上的任何连接

在此之后,我启动了创建端点的客户端 ip:127.0.0.1 和端口 3333

在此之后,netstat 输出为:

tcp        0      0 0.0.0.0:3333     0.0.0.0:*         LISTEN      26566/./test

tcp        0      0 127.0.0.1:3333   127.0.0.1:46675   ESTABLISHED 26566/./test

tcp        0      0 127.0.0.1:46675  127.0.0.1:3333    ESTABLISHED 26685/./test

Process 26566 is master process
Process 26685 is slave process

我不明白的是上面显示的地址中的端口46675是什么意思?这肯定代表客户端,但是这个端口号是从哪里分配给客户端的呢? 这是否意味着客户端已连接到端口 3333 但它自己连接的端口是 46675?

Does this mean that client has connected to port 3333 but the port from which it itself connects is 46675?

基本上。它描述了客户端端点。这是 BSD/Posix 套接字行话。

What I do not understand is what does the the port 46675 mean in the address shown above? This definitely represents the client side, but from where was this port number allocated to the client?

它会自动从本地端口范围中选择(由 TCP 堆栈,通常在内核中)。例如。在 linux 上,您可以操纵该范围(如果您有权限):

sudo sysctl -w net.ipv4.ip_local_port_range="60000 61000" 

(警告:除非您知道自己在做什么,否则不要这样做)。另见 https://en.wikipedia.org/wiki/Ephemeral_port