一个端口上有多个连接

时间:2011-10-14 21:04:46

标签: sockets port bonjour

我使用pidgin,A,B和C运行多个bonjour客户端。
当B和C与A通话时,我发现A使用相同的端口(通过wireshark,我可以看到数据包)进行MDNS和通信,
但是B和C,每个都有两个不同的端口,一个用于MDNS,一个用于插座连接 A如何工作,为什么它只能与一个端口一起工作?一个端口如何提供多个连接?
注意:如果它是多线程的,那么当它接受连接时它会创建一个带有另一个空闲端口的新套接字,但我看到来自wireshark的数据包,客户端A只使用相同的端口进行通信和MDNS。

1 个答案:

答案 0 :(得分:5)

TCP连接实际上由元组标识:(source_address,source_port,destination_address,destination_port)。所以只要其中一个不同就没有问题。

实际上,当程序侦听给定端口中的连接时,您所说的是:使用相同的服务器端口(但不同的客户端端口或地址)创建任何新连接。

例如,在我的Linux机器上,我有一个在端口80监听的Web服务器:

$ telnet localhost 80 &
$ telnet localhost 80 &
$ lsof -n -i TCP
...
TCP 127.0.0.1:45601->127.0.0.1:80
TCP 127.0.0.1:45602->127.0.0.1:80