Могут ли быть установлены два идентичных сокета?

#sockets

#сокеты

Вопрос:

Сокет — это комбинация IP-адреса, транспортного протокола и номера порта.
Например: два хоста, находящиеся в разных локальных сетях за NAT, могут иметь один и тот же IP (скажем, 192.168.0.2).
Когда эти хосты подключаются к веб-серверу, могут ли быть установлены два идентичных сокета?
Я знаю, что порты генерируются случайным образом, но на разных хостах может быть сгенерирован один и тот же.
Или это сервер сообщает, что этот номер порта уже используется? Или это NAT-устройство, которое меняет SRC IP в IP-пакете? Как тогда устройство NAT узнает, куда отправлять пакет обратно хосту в локальной сети?

Спасибо

Комментарии:

1. «за NAT» — таким образом, у них будет свой общедоступный IP-адрес в качестве исходного IP-адреса, а не IP-адрес локальной сети.

Ответ №1:

Как вы правильно догадались, именно NAT присваивает эфемерный номер порта, поэтому они не могут совпадать. Следовательно, с точки зрения сервера, целевой дуплет узла № 1 будет чем-то вроде 192.168.0.2: 46812, а для узла № 2 — 192.168.0.2:51378. Когда NAT получает эти пакеты, он знает, какому хосту за NAT принадлежит пакет, на основе номера порта. Если у вас есть доступ к консоли компьютера, вы можете проверить номера с помощью netstat -anp

Комментарии:

1. Итак, всю работу выполняет NAT, повторно капсулируя IP-адрес SRC и номер порта. Спасибо, ребята, за помощь 🙂

2. и да, небольшая поправка — 192.168.0.2 должен быть адресом NAT. Я бы также не стал использовать здесь «инкапсуляцию», это больше похоже на перезапись IP-заголовка.