2015-08-31 2 views
3

У меня есть очень простой вопрос о TCP.Несколько TCP-соединений на одном IP-порту и порту

Рассмотрит приложение, скажет DEST с IP Dest IP прослушивает порт 6789.

Теперь у меня есть 2 приложения источника, которые способны посылать сообщения этого приложения DEST и они общаются по протоколу TCP.

исходная система Скажет 1 SRC1 и исходная система 2 SRC2 с IP-адресами SRC1 и SRC2 соответственно.

В идеале только один из этих исходных систем будет работать, и я вижу, что у меня есть активное соединение между SRC1 или SRC2 и DEST, выполнив команду netstat на исходной системе (netstat -nao | grep 6789).

Теперь только за черт этого я начал вторую исходную систему, а также и с удивлением узнал, что результат netstat на обоих исходных систем показывает активное соединение TCP с приложением DEST прослушивает порт 6789.

Результат netstat команды на SRC1 и SRC2 серверах:

TCP SRC1 IP:17678 DEST IP: 6789 ESTABLISHED 

TCP SRC2 IP:51298 DEST IP: 6789 ESTABLISHED 

Я был под впечатлением, что DEST приложение прослушивает IP DEST1 и порт 6789 может иметь только 1 переменного тока (DEST сервер IP:6789 может иметь только 1 активное TCP-соединение).

+2

Что бы вы ни думали об этом ?! –

ответ

7

Если бы вы считали, что это правда, веб-серверы не будут работать. Веб-серверы в основном прослушивают два порта: 80 для HTTP и 443 для HTTPS. Веб-серверы часто имеют сразу несколько тысяч клиентов.

Приложение может иметь много соединений через один порт. Он может различать соединения с помощью комбинации источника/порта соединительного узла. Фактически, каждый исходный узел может иметь соединения на нескольких портах (адрес действительно представляет собой комбинацию адреса и порта) на один и тот же порт назначения, если приложение поддерживает его.

9

TCP-соединение определяется 4-мя корнями: локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт. Обратите внимание, что я не сказал источник и пункт назначения, потому что, как только соединение установлено, нет никакого различия.

В примере, который вы указали, два соединения имели один IP и общий порт, но другие IP и порт были разными.

Это отличается от прослушивающего сокета TCP, который определяется только локальным IP-адресом и портом. Это означает, что только один сокет может прослушивать новые подключения на данном порту. После установления соединения у вас есть новый сокет, определенный упомянутым выше 4-кортежем, хотя все соединения, происходящие из данного прослушивающего сокета, будут иметь один и тот же локальный IP-адрес и порт, но разные удаленные IP-адреса и/или порты.

+0

и что, если IP-адреса источника и порта одинаковы? Скажите пример нескольких вкладок, открытых в браузере, получающих данные на одном сервере? – Saad

+0

@ Саад, они не могут быть одинаковыми. В подобной ситуации у вас будет несколько сокетов с одинаковыми исходными и удаленными IP-адресами, а порт на стороне сервера будет таким же, но порты клиентской стороны будут разными для каждого. – dbush

+0

Итак, если UDP управляется, все еще разные сокеты в каком-то одном и том же сценарии? – Saad

Смежные вопросы