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
我已经用接受器创建了一个 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