Nat protocol что это

Обновлено: 04.07.2024

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

2. Позволяет ограничить общение снаружи ко внутренним хостам, при этом возможность общаться изнутри наружу остаётся.

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

Диапазон Количество хостов
10.0.0.0 - 10.255.255.255/8 16 777 216 хостов
172.16.0.0 - 172.31.255.255/12 1 048 576 хостов
192.168.0.0 - 192.168.255.255/16 65 536 хостов

Преобразование адреса методом NAT может производиться почти любым маршрутизирующим устройством — маршрутизатором, сервером доступа, межсетевым экраном. Принимая пакет от локального компьютера, роутер смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет. Но ведь обратным адресом в пакете указан локальный адрес компьютера, который из интернета будет недоступен. Поэтому роутер «на лету» транслирует (подменяет) обратный IP-адрес пакета на свой внешний (видимый из интернета) IP-адрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам). Комбинацию, нужную для обратной подстановки, роутер сохраняет у себя во временной таблице. Через некоторое время после того, как клиент и сервер закончат обмениваться пакетами, роутер сотрет у себя в таблице запись о n-ом порте за сроком давности.

NATExample2.jpg

Один внутренний адрес преобразуется в один внешний, все запросы, приходящие на внешний адрес будут транслироваться на внутренний, как будто хост и является обладателем белого IP-адреса. Такой подход бывает полезным, когда внутри частной сети есть сервер, к которому необходим полный доступ извне. Минус подхода в том, что он никак не помогает сохранить белые адреса.

Есть пул белых адресов, например, провайдер выделил сеть 198.51.100.0/28 с 16-ю адресами. Два из них (первый и последний) — адрес сети и широковещательный, ещё два адреса назначаются на оборудование для обеспечения маршрутизации. Двенадцать оставшихся адресов можно использовать для NAT и выпускать через них своих пользователей.

Ситуация похожа на статический NAT — один приватный адрес транслируется на один внешний, — но теперь внешний не чётко зафиксирован, а будет выбираться динамически из заданного диапазона. Проблема подхода такая же, как и в случае со статическим NAT — не решается проблема ограниченности белых адресов.

Следующий тип имеет несколько названий: NAT Overload, Port Address Translation (PAT), IP Masquerading, Many-to-One NAT. Суть этого типа в том, что через один внешний адрес выходит наружу много приватных. Этот подход, в отличие от предыдущих, позволяет решить проблему с нехваткой внешних адресов.

  • Принцип сетевых адресов никак не вписывается в архитектуру IP, которая подразумевает, что каждый IP-адрес уникальным образом идентифицирует только одну машину в мире.
  • NAT нарушает «сквозной» принцип, согласно которому каждый хост должен уметь отправлять пакет любому другому хосту в любой момент времени. Поскольку отображение адресов в NAT задается исходящими пакетами, входящие пакеты не принимаются до тех пор, пока не отправлены исходящие.
  • NAT превращает Интернет из сети без установления соединения в нечто подобное сети, ориентированной на соединение. Проблема в том, что NAT-блок должен поддерживать таблицу отображения для всех соединений, проходящих через него. Запоминать состояние соединения — дело сетей, ориентированных на соединение, но никак не сетей без установления соединений.
  • При использовании NAT нарушается одно из фундаментальных правил построения многоуровневых протоколов: уровень [math]k[/math] не должен строить никаких предположений относительно того, что именно уровень [math]k + 1[/math] поместил в поле полезной нагрузки.
  • Процессы в Интернете вовсе не обязаны использовать только TCP или UDP. Если пользователь машины [math]A[/math] решит придумать новый протокол транспортного уровня для общения с пользователем машины [math]B[/math] , то ему придется как-то бороться с тем, что NAT не сможет корректно обработать поле Порт источника TCP.

Hole punching — метод для прямого соединения двух хостов, которые находятся за NAT-ами. Для инициации соединения требуется третья сторона – сервер, который виден обоим компьютерам. Обычно используются публичные STUN-серверы.

STUN (сокр. от англ. Session Traversal Utilities for NAT, Утилиты прохождения сессий для NAT) — это сетевой протокол, который позволяет клиенту, находящемуся за сервером трансляции адресов (или за несколькими такими серверами), определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети, связанный с определённым внутренним номером порта. Эта информация используется для установления соединения UDP между двумя хостами в случае, если они оба находятся за маршрутизатором NAT.

Если [math]A[/math] и [math]B[/math] находятся за одним и тем же NAT-ом, то они соединятся через приватные адреса, иначе через публичные. На картинке показан пример, когда [math]A[/math] и [math]B[/math] находятся за разными NAT-ами.

UDPHolePunching.jpg

  • Клиент [math]A[/math] использует TCP соединение с [math]S[/math] , чтобы попросить о помощи для подключения к [math]B[/math] .
  • [math]S[/math] отвечает [math]A[/math] , отправляя приватный и публичный адреса [math]B[/math] , и в то же время посылает [math]B[/math] приватный и публичный адреса [math]A[/math] .
  • Из тех же самых локальных портов TCP, которые [math]A[/math] и [math]B[/math] используют для соединения с [math]S[/math] , [math]A[/math] и [math]B[/math] каждый асинхронно совершают попытки подключения друг к другу по публичному и приватному адресам, и одновременно слушают эти порты на входящие соединения.
  • Когда TCP соединение устанавливается, клиенты идентифицируют друг друга, чтобы убедиться, что они подключены к нужному клиенту. Если проверка подлинности завершается неудачно, клиенты закрывают эту связь и продолжают ожидание. Клиенты используют первое успешное соединение.

В отличие от UDP, где каждый клиент только нуждается в одном сокете, чтобы взаимодействовать с [math]S[/math] и любым числом хостов одновременно, в TCP приложение должно управлять несколькими сокетами привязаными к одному локальному TCP порту на клиенте. Каждый клиент нуждается в сокете, который соединяет его с [math]S[/math] , слушающем сокете, который будет принимать входящие соединения, и в двух дополнительных сокетах, с помощью которых клиент будет инициировать исходящие соединения с публичными и приватными TCP адресами другого клиента.


Прошлый материал был, как раз посвящен TCP IP, сегодня же мы разберем за что отвечает протокол TCP и что это вообще такое.

TCP протокол


Это стандарт, который определяет как нужно устанавливать связь и поддерживать ее, чтобы две программы могли обмениваться данными между собой.

Интересно! Существует еще один транспортный протокол UDP, о нем мы поговорим в следующей отдельной статье, там же и разберем, чем они вообще отличаются друг от друга.

Является именно надежным протоколом так как:

Заголовок TCP протокола

Весит 20 байт, если нет дополнительных опций, вот как он выглядит:


Также, вам может быть интересна статья о том, что такое dns сервер. В ней очень подробно и интересно описано об этой глобальной системе.

Недостатки

Поддержка NAT Traversal в шлюзах интернета

Поддержка NAT Traversal в шлюзах интернета реализована в виде поддержки спецификации IGD (Internet Gateway Device), определенной Рабочим комитетом по шлюзам интернета в рамках Форума UPnP. Производители шлюзов должны иметь в виду, что API-интерфейсы NAT Traversal, включенные в Windows, исходят из следующих предположений о работе устройств IGD.

  • Устройства IGD объявляют в каждый момент времени только один внешний интерфейс. Хотя с технической точки зрения допустимо объявление нескольких внешних интерфейсов, API-функции NAT Traversal будут использовать только первый из них.
  • IGD поддерживают сопоставления портов, обеспечивающие пересылку пакетов с любого удаленного IP-адреса внутренним клиентам.
  • IGD поддерживают сопоставления портов, в которых в качестве клиента указан широковещательный адрес.
  • IGD поддерживают различные номера для внешнего порта NAT и внутреннего порта клиента.
  • IGD генерируют объявления с номером версии 1.
  • Статические сопоставления портов действуют неограниченно долго, невзирая на перезагрузки, изменения IP-адресов и присутствие клиента на сервере.

На момент написания данного документа уже несколько ведущих производителей объявили о планах начать в 2001 г. поставки поддерживающих эти спецификации UPnP шлюзовых устройств интернета, совместимых с API-интерфейсами Windows NAT Traversal. Это важное событие как для пользователей, так и для отрасли в целом.

Чем больше производителей шлюзов интернета осознают преимущества технологии UPnP как средства обхода проблем NAT и чем больше пользователей знакомятся с этими средствами, тем выше шансы на то, что решение NAT Traversal на базе UPnP станет непременным атрибутом устройств данной категории. Производителям шлюзов интернета следует вступать в ряды Форума UPnP — так они смогут быстрее узнать о том, как добиться совместимости своих устройств со стандартами UPnP.

Следует заметить, что средство общего доступа к подключению интернета в Windows XP поддерживает версию 0.9 стандарта UPnP IGD. Ожидается, что версия 1.0 будет совместима с версией 0.9.

Преимущества

Before hole punching.jpg

NAT выполняет три важных функции.

TCP протокол


Это стандарт, который определяет как нужно устанавливать связь и поддерживать ее, чтобы две программы могли обмениваться данными между собой.

Интересно! Существует еще один транспортный протокол UDP, о нем мы поговорим в следующей отдельной статье, там же и разберем, чем они вообще отличаются друг от друга.

Является именно надежным протоколом так как:

Заголовок TCP протокола

Весит 20 байт, если нет дополнительных опций, вот как он выглядит:


Также, вам может быть интересна статья о том, что такое dns сервер. В ней очень подробно и интересно описано об этой глобальной системе.

Типы NAT

1. Статический, Static NAT

Берется один IP-адрес из внутренней сети и преобразовывается во внешний/публичный и все запросы, которые будут на него посылаться извне, будут пересылаться именно на этот внутренний айпи. Т.е. для всемирной паутины он будет выглядеть полностью, как белый/публичный IP.

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

Работает это так:

  1. Есть во внутренней сети айпи 172.15.4.3, он обращается ко внешнему серверу на 198.2.6.2, отправляет пакет данных вначале естественно на шлюз.
  2. Шлюз 172.15.4.1, на котором настроен NAT преобразует его в белый/внешний 198.1.12.8.
  3. По глобальном интернете пакеты передаются по этому IP-адресу и обратно приходят к нему же.
  4. На маршрутизаторе с НАТ есть указание, все пакеты данных, которые приходят на 198.1.12.8 перенаправлять на 172.15.4.3.


Вот и все. Если у вас несколько роутеров, то такую процедуру можно проделать со всеми ними.

2. Динамический, Dynamic NAT

Тут все практически также, как и со статичным НАТ, также 1 внутренний айпи привязан к 1 внешнему, но с той лишь разницей, что адреса теперь будут выдаваться динамически каждому нуждающемуся пользователю во внутренней сети, а не одному определенному узлу.

Все бы хорошо, но если, например, адресов 12, а пользователей 300? Те, кто успел, те и смогут их использовать.

3. NAT Overload

Этот вид еще имеет другие названия такие как: Many-to-One NAT, Port Address Translation (PAT) и IP Masquerading.

Как вы знаете, чаще всего провайдер выдает вам лишь один IP адрес, который может быть статическим или динамическим. Но дома может быть множество устройств с разными программами, которым необходим доступ во всемирную паутину и как определить, какое из них отправило запрос, какое приложение? Проблема эта решается использованием портов, по этой ссылке очень подробно описана эта тема.


Теперь данные отправляемые в интернет будут выглядеть так:

В NAT-таблицу записываются значения отправителя и получателя:

  • Локальный сокет отправителя 1: 173.52.6.7:21784; сокет получателя: 192.16.5.3:80
  • Глобальный сокет отправителя 1: 198.50.100.9:11837; сокет получателя: 192.16.5.3:80
  • Локальный сокет отправителя 2: 173.52.4.5:32714; сокет получателя: 192.16.5.3:80
  • Локальный сокет отправителя 2: 198.50.100.11:27289; сокет получателя: 192.16.5.3:80

Когда приходит ответ от сервера происходит сопоставление данных с таблицей и пакеты данных доставляются именно тому, кто совершил запрос.

Преимущества NAT

Недостатки NAT

В заключение

Надеюсь вам стало чуточку понятнее, что это такое. Старался написать все, как можно понятнее без заумных терминов и других определений. Надеюсь вам понравилось и до встречи на страницах данного портала.

Заключение

NAT представляет собой одобренное группой IETF решение проблемы исчерпания пространства имен IPv4. Шлюзы интернета, использующие NAT, часто устанавливаются дома и в небольших офисах. Они применяются потому, что дешевы, легко управляемы и не требуют установки специального программного обеспечения.

Недостатком использования NAT является то, что оно препятствует применению коллективных игр, служб общения в режиме реального времени и приложений одноранговой связи. Это объясняется тем, что сетевые протоколы действуют исходя из предположений об архитектуре сети, которые с появлением NAT перестают выполнятся.

Технология NAT Traversal позволяет приложениям обнаружить устройство NAT, определить совместно используемый IP-адрес, допускающий глобальную маршрутизацию, и настроить статические сопоставления портов с целью устранения некоторых проблем связи. Решение NAT Traversal не избавляет от всех проблем, связанных с NAT, но предотвращает некоторые из них.

API-интерфейсы NAT Traversal в составе Windows XP

API-интерфейсы NAT Traversal устанавливаются в Windows XP по умолчанию. Их также можно устанавливать на компьютерах, работающих под управлением Windows Me и Windows 98; для этого используется специальная программа, имеющаяся на компакт-диске Windows XP, — мастер настройки сети (Network Setup Wizard). Для доступа к API-интерфейсам NAT Traversal пользователи также должны установить обозреватель Internet Explorer версии 6.0, обеспечивающий дополнительную поддержку средства синтаксического разбора XML. NAT Traversal в Windows 2000 на данный момент не поддерживается.

Принципы работы NAT Traversal

NAT Traversal в своей работе опирается на протоколы обнаружения и управления, входящие в спецификации, установленные Форумом UPnP (Universal Plug and Play). В составе Форума UPnP имеется рабочий комитет, занимающийся составлением протокола управления шлюзовыми устройствами интернета (Internet Gateway Device, IGD) и определением служб для этих устройств. Шлюзы интернета, поддерживающие обязательные элементы протокола управления устройствами IGD, будут объявлять о своем присутствии и публиковать XML-документы с описаниями для пунктов управления своих локальных сетей. Из этих документов пункты управления смогут узнать, какие операции UPnP требуется вызвать для того, чтобы определить, включена ли поддержка NAT в шлюзе, и выполнить сопоставление портов. API-интерфейс NAT Traversal в составе Windows позволяет избежать необходимости доступа к UPnP напрямую; он включает функции обнаружения, управления и настройки устройства NAT.

Image01.jpg

Как работает TCP соединение

Соединение отправителя и получателя (два узла) происходит так:

1. Отправитель отсылает получателю специальный пакет, именуемый SYN, т.е. пригашает к соединению
2. Получатель отвечает уже пакетом SYN-ACK, т.е. соглашается
3. Отправитель отсылает спец. пакет ACK, т.е. подтверждает, что согласие получено


На этом TCP-соединение успешно установлено и получатель с отправителем могут спокойно обмениваться информацией. При передаче все пакеты данных нумеруются, отсылаются подтверждения о получении каждого из них, а потерянные пересылаются заново.

TCP порты

На каждом компьютере установлено, как минимум несколько программ. И сразу несколько из них могут обмениваться информацией, как же их различать? Именно для этого и были придуманы TCP порты, это по сути уникальный идентификатор соединения между двумя программами.

Есть целый ряд уже зарезервированных портов, которые являются стандартом:


Также, стоит отметить, что порты данного протокола никак не пересекаются с такими же, но у UDP. Так, например, порт: 1234 не пересечется с таким же, но у UDP.

В заключение

Вот вы и узнали, что это такое, постарался написать, как можно более понятно, без лишних терминов. Главное знать, как это работает и серфинг в интернете станет еще куда интереснее.


Из прошлого материала вы могли узнать о сетевом шлюзе, сейчас давайте разберемся, что из себя представляет технология NAT, как она работает и зачем была в принципе придумана и внедрена.

Реализуется через маршрутизатор, на программном уровне или настраивается самим провайдером. Полностью расшифровывается, как Network Address Translation и переводится на русский, как Преобразование Сетевых Адресов.


Содержание

NAT Traversal API

Когда сетевому приложению нужно обнаружить устройство NAT и отрегулировать параметры его работы, приложение может воспользоваться интерфейсом NAT Traversal API, входящим в комплект Windows (и полностью описанным в материалах пакета Platform SDK), и выполнить следующие функции:

  • определить, присутствует ли устройство NAT;
  • получить внешний IP-адрес NAT;
  • получить данные о статическом сопоставлении конкретного внешнего порта, если таковое существует;
  • добавить статическое сопоставление портов, если внешний порт не был ранее назначен;
  • включить или отключить конкретное сопоставление портов, не удаляя его;
  • изменить описание статического сопоставление портов, понятное для пользователя;
  • удалить статическое сопоставление портов;
  • получить список статических сопоставлений портов для локальной сети.

С помощью этих функций приложения могут обходить многие проблемы, вызываемые наличием NAT. Следует учесть, что API-интерфейсы NAT Traversal в составе Windows на сегодняшний день поддерживают сопоставления портов только неограниченного срока действия — так называемые статические сопоставления портов.

Как приложения используют NAT Traversal

Способ использования NAT Traversal приложением зависит от ряда факторов, например, от того, каким должен быть срок действия сопоставления портов и сколько клиентов или служб используют данный порт. Очень важно, чтобы приложения в конце уничтожали («очищали») создаваемые ими статические сопоставления портов, чтобы освобождать порты для других приложений.

Если приложение представляет собой сетевую службу (например, веб-сервер), которой требуется какой-либо широко известный порт на всем протяжении ее существования, программа установки такого приложения может настроить статическое сопоставление порта с помощью API-интерфейсов NAT Traversal. Если сетевая топология остается постоянной и механизмы очистки не затрагивают это сопоставление, внешние клиенты смогут контактировать со службой в течение всего периода ее работы. Удалить сопоставление должна будет программа удаления приложения. После аварийного сбоя статические сопоставления портов останутся, несмотря на отсутствие службы. Изменение внешнего IP-адреса будет автоматически учтено статическим сопоставлением портов.

Если приложение не будет работать постоянно или нет гарантии, что его статические сопоставления портов будут все время поддерживаться сетью, оно может резервировать какой-либо известный порт при каждом запуске и возвращать его при каждом завершении работы. Это можно делать с помощью параллельно активизируемого сценария. Возможен и иной вариант: вместо добавления и удаления сопоставления портов приложение будет каждый раз включать и выключать его. Можно также оставить статическое сопоставление портов постоянно действующим и просто обновлять его при запуске приложения. И в этом случае изменение внешнего IP-адреса автоматически учитывается статическим сопоставлением портов. Если один и тот же внутренний номер порта используется сразу несколькими приложениями разных клиентов частной сети, эти приложения придется немного изменить, чтобы обеспечить работу нескольких клиентов.

Если службе необходимо прослушивать произвольный порт в течение короткого промежутка времени, она должна запросить статическое сопоставление порта в приложении, а не в сценарии. Закончив работу, служба должна сразу же выполнить очистку (удалить сопоставление). В приложении следует вести учет собственных действующих сопоставлений портов. В итоге если произойдет сбой приложения и оно не успеет закрыть сопоставления портов, при следующем запуске приложения оно сможет получить все данные, необходимые для очистки.

Если приложение должно выйти из сети без очистки своих сопоставлений портов, они будут сохранены, и ответственность за очистку перекладывается на пользователя. В настоящее время в Windows механизм очистки отсутствует, поскольку трудно определить, когда приложение заканчивает пользоваться сопоставлением.

Читайте также: