【问题标题】:Netstat output with boost::Asio带有 boost::Asio 的 Netstat 输出
【发布时间】:2018-01-05 06:16:37
【问题描述】:

我已经创建了一个带有接受器的 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?

【问题讨论】:

    标签: sockets boost boost-asio netstat


    【解决方案1】:

    这是否意味着客户端已连接到端口 3333,但它自己连接的端口是 46675?

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

    我不明白的是上面显示的地址中的端口 46675 是什么意思?这绝对代表客户端,但是这个端口号是从哪里分配给客户端的呢?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多