如果TCP套接字服务器在端口28081上侦听传入连接,然后接受连接并开始接收数据。数据进入的端口是28081还是端口发生变化。
例如,下面的伪代码中传入数据的端口是什么?它仍然是28081还是操作系统分配了一个新端口?:
bind
listen (on port 28081)
while 1
fd = accept
fork
if child process incoming data
答案 0 :(得分:34)
TCP连接由两个(IP address, TCP port)
元组唯一标识(每个端点一个)。因此,根据定义,人们不能移动连接的端口或IP地址,而只是打开另一个端口或IP地址。
如果服务器绑定到端口28081,则所有接受的连接都将在服务器端具有此端口(尽管它们很可能在客户端具有不同的端口号)。
例如,如果来自同一客户端计算机的两个进程将连接到同一服务器,则服务器端的IP address
和TCP port
将对两个连接都相同。然而,在客户端,它们将具有两个不同的端口号,允许双方的操作系统唯一地识别应该将所接收的TCP分组分配给哪个进程和文件描述符。
答案 1 :(得分:4)
是的,它保留在该端口上,但某些协议(FTP)可能会在另一个端口上打开第二个连接。不要将端口视为物理路径或插头,就像USB端口只能插入一个东西。而是将其视为所请求服务的标识符。
但是,通常会将新的套接字连接传递给另一个处理该特定连接的读/写的线程。
答案 2 :(得分:1)
可以有多个客户端连接到一个端口,因为连接由服务器和客户端IP地址和端口标识。因此,接受来自一个客户端的连接不会阻止其他客户端连接。您甚至可以从同一客户端连接另一个时间(使用另一个客户端端口)。