代码之家  ›  专栏  ›  技术社区  ›  Paul Kelly

当服务器接受TCP连接时,端口是否更改?

  •  20
  • Paul Kelly  · 技术社区  · 14 年前

    当客户机使用TCP连接到服务器时,会为TCP流创建一个新的套接字。连接是否仍保留在连接的同一端口上,还是更改为其他端口?

    3 回复  |  直到 6 年前
        1
  •  39
  •   Marcelo Cantos    14 年前

    新的socket是一个引入的应用程序级概念,因为每个建立的连接都需要一个唯一的文件描述符(也不同于侦听文件描述符),它映射到TCP会话,但与TCP会话不同。会话本身由源地址、目标地址和端口的组合来标识。源(客户端)端口通常是随机选择的,而目标(服务器)端口是侦听端口。未分配其他端口。

        2
  •  11
  •   Hardik Modha Jayhello    4 年前

    服务器使用相同的端口侦听和接受新连接,并与远程客户端通信。

    首先,开始一个 http server 由python编写

    xiongyu@ubuntu:~$ sudo python -m SimpleHTTPServer 500
    Serving HTTP on 0.0.0.0 port 500 ...
    

    第二次使用 nc http服务器 ,我们从两个客户端开始:

    xiongyu@ubuntu:~$ nc 0.0.0.0 500
    

    netstat 要查看端口500的netstate:

    xiongyu@ubuntu:~$ netstat -natp |grep ':500'
    tcp    0      0 0.0.0.0:500         0.0.0.0:*          LISTEN      54661/python
    tcp    0      0 127.0.0.1:51586     127.0.0.1:500      ESTABLISHED 57078/nc
    tcp    0      0 127.0.0.1:51584     127.0.0.1:500      ESTABLISHED 54542/nc
    tcp    0      0 127.0.0.1:500       127.0.0.1:51586    ESTABLISHED -
    tcp    0      0 127.0.0.1:500       127.0.0.1:51584    ESTABLISHED 54661/python
    

    您可以看到,http服务器使用端口500 LISTEN 对于客户机,在新的客户机连接到服务器之后,它仍然使用端口500与客户机通信,但是使用新的文件描述符。

        3
  •  7
  •   user207421    9 年前

    与由返回的新描述符关联的套接字 accept