Изменения

Перейти к: навигация, поиск

Преодоление барьера из двух симметричных NAT

91 байт добавлено, 12:27, 20 сентября 2009
Нет описания правки
[[wikipedia:Network Address Translation|NAT]] (от англ. ''Network Address Translation'' — «преобразование сетевых адресов») — механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.
'''===== Дано:''' два хоста host<sub>1</sub> и host<sub>2</sub>, подключённые к сети Internet через маршрутизаторы с публичными IP-адресами nat<sub>1</sub> и nat<sub>2</sub>, осуществляющие трансляцию сетевых адресов (NAT). Каждому новому исходящему соединению от первого хоста (host<sub>1</sub>) сопоставляется некоторый свободный порт известного IP-адреса маршрутизатора (nat<sub>1</sub>), аналогично host<sub>2</sub> и nat<sub>2</sub>. Присваиваемый номер порта зависит от порта источника, а также порта и IP-адреса назначения, т.е устройства nat<sub>1</sub> и nat<sub>2</sub> осуществляют симметричную трансляцию сетевых адресов ([[wikipedia:Network_address_translation#Different_types_of_NAT|Symmetric NAT]]) типа queued resource allocation или random port allocation <ref name="stun">Обход некоторых типов Symmetric NAT с помощью STUN: <a href="http://www.cs.cornell.edu/projects/stunt/draft-takeda-symmetric-nat-traversal-00.txt"><i>Symmetric NAT Traversal using STUN [draft-00]''</a> (<a href="draft-taked-symmetric-nat-traversal-00.txt">зеркало</a>) (автор — Y.Takeda);</ref> (выбор порта из очереди свободных или выбор произвольного свободного порта).==
'''Задача:''' установить прямое IP соединение между Даны два хоста host<sub>1</sub> и host<sub>2</sub> (без пересылки всех пакетов , подключённые к сети Internet через третий хостмаршрутизаторы с публичными IP-адресами nat<sub>1</sub> и nat<sub>2</sub>, осуществляющие трансляцию сетевых адресов (NAT). Каждому новому исходящему соединению от первого хоста (host<sub>1</sub>) сопоставляется некоторый свободный порт известного IP-адреса маршрутизатора (nat<sub>1</sub>), аналогично host<sub>2</sub> и nat<sub>2</sub>. Присваиваемый номер порта зависит от порта источника, а также порта и IP-адреса назначения, т.е устройства nat<sub>1</sub> и nat<sub>2</sub> осуществляют симметричную трансляцию сетевых адресов ([[wikipedia:Network_address_translation#Different_types_of_NAT|Symmetric NAT]]) типа queued resource allocation или random port allocation <ref name="stun">Обход некоторых типов Symmetric NAT с помощью STUN: [http://www.cs.cornell.edu/projects/stunt/draft-takeda-symmetric-nat-traversal-00.txt Symmetric NAT Traversal using STUN [draft-00]] (автор — Y.Takeda);</ref> (выбор порта из очереди свободных или выбор произвольного свободного порта).
'''===== Задача ===== Установить прямое IP соединение между host<sub>1</sub> и host<sub>2</sub> (без пересылки всех пакетов через третий хост). ===== Решение:''' для ===== Для некоторых случаев, когда возможно какое-либо «предсказание» стратегий выделения портов трансляторами адресов, описаны решения в <ref name="stun" />, <ref>[[wikipedia:Simple traversal of UDP over NATs]]</ref>, и <ref>[http://www.jdrosen.net/papers/draft-rosenberg-midcom-turn-08.txt Traversal Using Relay NAT (TURN) [draft-08]]</ref>, мы же рассматриваем общий случай — очередь или случайное выделение.
Итак, '''во-первых,''' очевидно, что в этом случае без «сторонней помощи» хосты host<sub>1</sub> и host<sub>2</sub> с этой задачей справиться не смогут, т.к: (в рассуждениях (i, j) = (1,2) или (2,1))
 
# host<sub>i</sub> не может открыть соединение с host<sub>j</sub> напрямую, т.к из-за трансляции адресов во всех пакетах, направленных в Internet от host<sub>j</sub>, поле «источник» подменяется на адрес nat<sub>j</sub> и выбранный устройством nat<sub>j</sub> порт, назовём этот порт port<sub>j</sub>;
# аналогично host<sub>j</sub> не может открыть соединение с host<sub>i</sub>;
# Во-вторых, можно определить T — среднее количество новых соединений, через которое номер порта повторяется, и сразу после выполнения первого пункта алгоритма отправить m пакетов на разные IP-адреса и порты (где m — меньшее T, но сопоставимое с T число, например, T/2 или T*3/4), чтобы быстро «прокрутить» очередь или датчик случайных чисел на устройстве nat<sub>1</sub>, не обращая внимания на результат. В этом случае сложность алгоритма снизится в среднем в T/(T-m) раз.
'''===== Заключение:''' Задача «преодоления» барьера в виде двух симметричных NAT разрешима алгоритмом сложности O(n), и хотя в реальных условиях преодоление такого барьера займёт достаточно долгое время, оно всё же возможно. Реализации алгоритма на данный момент не существует, то есть все рассуждения в статье — чисто теоретические, надеюсь, однако, что из-за этого не менее корректные.=====
Задача «преодоления» барьера в виде двух симметричных NAT разрешима алгоритмом сложности O(n), и хотя в реальных условиях преодоление такого барьера займёт достаточно долгое время, оно всё же возможно. Реализации алгоритма на данный момент не существует, то есть все рассуждения в статье — чисто теоретические, надеюсь, однако, что из-за этого не менее корректные. ===== Ссылки =====
<references />
(c) [[Участник:VitaliyFilippov|Виталий Филиппов]] aka vitalif, 2007 г.
 
[[Категория:Статьи]]
[[Категория:Разработка]]
[[Категория:Перенесено с vmx.yourcmc.ru]]

Навигация