Со своего домашнего компьютера за стандартным домашним маршрутизатором / NAT я открываю один socket
и отправляю данные на два разных сервера (с разными общедоступными IP-адресами):
import socket, time
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for addr in ['203.0.113.2', '198.51.100.77']:
soc.sendto(b'', (addr, 4000))
data, _ = soc.recvfrom(6)
print(data)
time.sleep(2)
На первомсервер прослушивает порт 4000, я замечаю, что 4000 был преобразован NAT в порт 57358.
На втором сервере, слушающем порт 4000, я заметил, что 4000 также был преобразован в порт 57358 .
Это стандартное документированное поведение, когда
- при открытии сокета
- отправка данных на первый сервер,
- преобразование NAT-маршрутизаторапорт 4000 - 57358
, затем при отправке данных на другой IP-адрес с таким же сокетом NAT преобразует порт 4000 в тот же порт ? (57358 в моем примере)
или это просто удача?
Примечание: я проверял это как с компьютера, подключенного к домашнему маршрутизатору ISP, так и с компьютера, подключенногона мой телефон, модем через WiFi, в обоих случаяхЯ получаю такое же поведение.