Связывает ли сокет, что порт всегда один и тот же? - PullRequest
1 голос
/ 30 января 2012

Я нахожу на удивление мало информации о розетках в интернете. Может быть, это из-за моей стратегии поиска.

Будет ли привязка сокета к конечной точке, выбранной операционной системой / NAT (чем он фактически выбран?), Гарантировать, что пакеты, отправленные с использованием этого, всегда будут иметь один и тот же порт источника?

Например, если бы я должен был создать сокет и связать его с портом, выбранным Windows (то есть передать новый IPEndPoint (IPAddress.Any, 0)), а затем отправить два пакета на разные хосты, будет ли исходный порт двух пакетов быть таким же?

Если да, что такое «рандомизация портов NAT»? Я слышал, что это заставляет NAT выбирать новый порт для каждого хоста, на который вы отправляете данные ... это так?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Например, если бы я должен был создать сокет и привязать его к порту, выбранному Windows (т.е. передать новый IPEndPoint (IPAddress.Any, 0)), а затем отправить два пакета на разные хосты, будет ли исходный портдва пакета будут одинаковыми?

Допустим, на локальном компьютере ПК вы привязаны к определенному порту (или даже к порту 0 - так что операционная система выбирает порт для вас).Все пакеты, выходящие из ПК, будут иметь один и тот же порт источника.Гарантировано.

Но NAT - может сделать что-то совсем другое.NAT определенно преобразует IP-адрес во внешний IP-адрес, который был ему назначен.И «исходный порт» будет подвергнут «отображению».

Большинство, но не все с хорошим поведением NAT попытаются сделать следующее.Это не включает настройку поведения через правила переадресации портов, которые пользователь может настроить вручную или через UPNP.

  1. Некоторые NAT пытаются «сопоставить» исходный порт внутреннего хоста сто же значение порта при повторной передаче UDP или установлении TCP-соединения.Это не всегда возможно, если другой хост за тем же NAT уже использует этот порт.В этом случае выбирается другой порт.

  2. Для исходящих соединений TCP сопоставление портов будет происходить, когда исходящий пакет SYN покидает NAT.Сопоставление портов источника будет оставаться согласованным в течение всего времени жизни соединения TCP.

  3. Если хост, находящийся за NAT, отправляет последовательные UDP-пакеты на один и тот же удаленный IP: пара портов 1023 * внутри заданного внутреннего, хорошо ведущий себя NAT будет поддерживать то же самое сопоставление портов.Таким образом, порт источника остается тем же.

  4. И большинство хорошо управляемых NAT поддерживают одинаковое сопоставление портов источника независимо от IP-адреса назначения или порта назначения.То есть, если ПК за NAT отправляет пакеты UDP с локального порта 3000 на два разных адреса IP: порта, NAT будет транслировать исходный порт одинаково.Это называется «независимым от адреса отображением» и является важной характеристикой при настройке P2P-соединений с другими хостами, которые могут находиться за NAT.

Если да, что такое «порт NAT»рандомизация "?Я слышал, что это заставляет NAT выбирать новый порт для каждого хоста, на который вы отправляете данные ... это так?

Есть NAT, которые не так хорошо себя ведут.Основная ошибка, которую они имеют, заключается в следующем:

Когда NAT поддерживает отображение, зависящее от адреса и порта (симметричное NAT).Именно здесь NAT выбирает случайный исходный порт для каждой уникальной пары IP: порт, с которой связывается хост за NAT.Таким образом, для двух хостов (оба за разными симметричными NAT) становится очень трудно общаться друг с другом без ретрансляции.Мне говорят, что большинство мобильных устройств, осуществляющих связь через 3G, демонстрируют такое поведение.

Некоторые не очень хорошо ведущие себя NAT будут даже перехватывать данные пакетов, ища протоколы, которые могут содержать внутренние IP-адреса, и затем пытаться«исправить» пакет так, чтобы внутренний IP-адрес, передаваемый в данных пакета, теперь был внешним IP-адресом.Это устраняет проблемы для устаревших протоколов, таких как FTP.Но для других приложений это может создать больше проблем.

Существует набор технологий для прохождения NAT.Пожалуйста, прочитайте STUN , TURN и ICE .

1 голос
/ 30 января 2012

Binding используется для открытия порта для прослушивания на компьютере.Например, веб-серверы связываются с портом 80, поэтому все входящие пакеты на порт 80 обращаются к этой службе.По сути, это способ зарезервировать порт для службы в ОС.Таким образом, в этом смысле ваш исходный порт будет портом, к которому вы привязаны.Если вы один из тех, кто обращается к сервису, вы, как правило, вообще не привязываетесь, потому что не имеет значения, какой порт вы используете, только к какому порту вы подключаетесь.

Надеюсь, это ответит на ваш вопрос.Если нет, то я думаю, что я не понимаю эту должность так хорошо, как следовало бы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...