@twintwin1003

Что случится, если при TCP-соединении у отправителей совпадут порт и IP?

TCP/IP сокет идентифицируется пятью параметрами {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL}
Что произойдет, если у двух разных отправителей совпадут IP и порт?
IP - высока вероятность (многие сидят за NATом)
Порт - выдается случайно, и при бОльшем количестве подключений (например, популярный веб-сервис), вероятность встретить дубликат растет.
  • Вопрос задан
  • 1740 просмотров
Пригласить эксперта
Ответы на вопрос 5
1) IP - высока вероятность (многие сидят за NATом)
Если вы о том, что в разных локальных сетях есть одинаковые ip, то нет такой вероятности. В соединении фигурирует белый ip.
Если о том, что с одного белого ip сидят несколько клиентов, то переходим к пункту 2.

2) вероятность встретить дубликат растет
не растёт. Множество портов конечно, если все порты будут исчерпаны не будет дубликатов, просто клиенту в соединении будет отказано (если вы о сервере).
Если о клиенте за NAT - NAT отображает внутренние порты на внешние. Соответственно маршрутизаторы отдают первый свободный внешний порт для нового соединения, и у двух клиентов попросту не может быть одинаковый внешний порт.
Ответ написан
@yaror
10 лет в мобильном телекоме
Если совпадут все пять значений (src ip, src port, dst ip, dst port, protocol), то пакеты, относящиеся к двум разным соединениям, перепутаются, перемешаются, и сам чёрт ногу сломит в том, что получится.

Но!
Инициатор соединения (либо NAT) Src port выбирает не просто случайный, а так, чтобы пятёрка полей (src ip, src port, dst ip, dst port, protocol) в таблице соединений не повторилась.
Вот и всё!

Действительно, как инициатор соединения, так и NAT могут переиспользовать пару (src ip, src port) для других соединений. В NAT это называется Endpoint Independent Mapping и служит для экономии адресного пула. Вдобавок, и ряд сервисов (та же ICQ) ведёт себя странно, видя несколько соединений с разными (src ip, src port), но под одной учётной записью.

Но, поскольку как минимум одно значение из тройки (dst ip, dst port, protocol) уникальное, относящиеся к разным соединениям пакеты не перемешиваются.
Ответ написан
@res2001
Developer, ex-admin
Если один и тот же IP - значит это один и тот же хост - по другому IP сети не работают.
Теоретически с одного хоста и с того же порта может быть второе подключение только в ситуации, когда клиент по какой-то причине отвалился (например комп ушел в ребут неожиданно) и при повторном подключении открыл тот же порт, а при этом сервер еще не успел разорвать прошлое соединение. В этом случае полученный SYN пакет на установку соединения вызовет ошибку на сервере, что-нибудь типа нарушение последовательности, и новое соединение установлено не будет.
Обычно клиент получит отлуп и попытается подключиться еще раз с другого порта.
А повисшее соединение на сервере отвалится по таймауту через какое-то вермя.
Ситуация достаточно специфическая, вполне возможная в жизни, но не думаю, что очень частая. И стандартные механизмы вполне нормально отработают ее.
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Ничего.

Поскольку такого быть не может. Или точнее говоря может быть - но в пределах Вашего отдельного сервера. Да, RFC1918-based сети используют совпадающую адресацию, но соединения меж ними выполняют сервера с NAT, у которых уникальные IP. Они потому-то и кончились, что должны были быть уникальными.
Ответ написан
Комментировать
vesper-bot
@vesper-bot
Любитель файрволлов
Пакеты пойдут кому-то одному. Самый частый пример - L2TP/IPsec VPN два клиента за одним натом, который не меняет порт. Когда пытается подняться второй VPN, он подняться не может, потому что у нат-устройства в таблице правил NAT запись IP/порт уже занята, и оно отправляет все обратные пакеты тому устройству, которое в этой записи прописано. Если устройство считает, что запись NAT устарела, то первый VPN разорвется, а второй построится.

В нормальной сети с нормально настроенным натом такой ситуации быть не должно, за исключением ситуации, в которой одно соединение по таймауту разорвало нат-устройство, после чего следующему соединению был назначен тот же IP+порт, что и разорванному соединению, и тут на устройство прилетел запоздалый пакет. Он в этом случае должен быть отброшен, так как его источник не соответствует записи в нат-таблице. То есть правильно считать, что такой ситуации не бывает, но при отладке нужно проверять, не оказывается ли так, что двум соединениям нат-устрйоство пытается назначить один и тот же IP+порт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы