несколько соединений на одном порту - PullRequest
0 голосов
/ 15 октября 2011

Я запускаю несколько клиентов Bonjour, используя pidgin, A, B и C.
когда B и C общаются с A, я нахожу, что A использует один и тот же порт (с wireshark, я вижу пакеты) для MDNS и связи,
но B и C, каждый имеет два разных порта, один для MDNS, один для сокетного соединения.
как работает А, почему он может работать только с одним портом? Как один порт может обеспечить несколько соединений?
Внимание: если он многопоточный, то, когда он принимает соединение, он создаст новый сокет с другим свободным портом, но я видел пакеты от wireshark, клиент A просто использовал тот же порт для связи и MDNS.

1 Ответ

5 голосов
/ 15 октября 2011

TCP-соединение фактически идентифицируется кортежем: (source_address, source_port, destination_address, destination_port).Таким образом, до тех пор, пока один из них отличается, проблем не возникает.

На практике то, что вы говорите, происходит, когда программа прослушивает соединения в данном порту: любое новое соединение создается с тем же портом сервера (нодругой клиентский порт или адрес).

Например, на моей машине с Linux, где у меня есть веб-сервер, прослушивающий порт 80:

$ 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
...