当客户端连接到使用TCP服务器,针对TCP流创建一个新的套接字。是否连接保持连接已作出或是否得到换到其他端口相同的端口上?
新插座介绍,因为每个建立的连接需要一个唯一的文件描述符(也在监听的文件描述符不同),这映射到应用程序级的概念,但是是不一样的,一个TCP会话。会议本身是由源地址和目的地址和端口的组合标识。源(客户端)端口通常是随机选择,而目的地(服务器)端口是监听端口。无需额外的端口分配。
与accept
服务器将使用在连接的原始套接字的服务器端的同一个端口上返回新的描述符关联的插座(假设“正常”的定义,在客户端启动连接)。新的插座将有一个不同的客户端的端口号(从查看服务器的点的远程端口)。
服务器使用相同的端口倾听和接受新的连接,并传达到远程客户端。
让我给你举一个例子,(在Linux系统):
首先,启动由蟒蛇一个http server
:
xiongyu@ubuntu:~$ sudo python -m SimpleHTTPServer 500
Serving HTTP on 0.0.0.0 port 500 ...
第二次使用nc
命令连接到http server
,在这里我们启动两个客户端通过:
xiongyu@ubuntu:~$ nc 0.0.0.0 500
使用netstat
看到端口5000的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与客户communite,但有一个新的文件描述符。