Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures_10.docx
Скачиваний:
82
Добавлен:
17.03.2016
Размер:
3.03 Mб
Скачать
    1. Nat – трансляция сетевого адреса

IP-адреса являются дефицитным ресурсом. У провайдера может быть /16-адрес (бывший класс В), дающий возможность подключить 65 534 хоста. Если клиентов становится больше, начинают возникать проблемы. Хостам, подключающимся к Интернету время от времени по обычной телефонной линии, можно выделятьIP-адреса динамически, только на время соединения. Тогда один /16-адрес будет обслуживать до 65 534активныхпользователей, и этого, возможно, будет достаточно для провайдера, у которого несколько сотен тысяч клиентов. Когда сессия связи завершается,IP-адрес присваивается новому соединению. Такая стратегия может решить проблемы провайдеров, имеющих не очень большое количество частных клиентов, соединяющихся по телефонной линии, однако не поможет провайдерам, большую часть клиентуры которых составляют организации.

Дело в том, что корпоративные клиенты предпочитают иметь постоянное соединение с Интернетом, по крайней мере в течение рабочего дня. И в маленьких конторах, например туристических агентствах, состоящих из трех сотрудников, и в больших корпорациях имеются локальные сети, состоящие из некоторого числа компьютеров. Некоторые компьютеры являются рабочими станциями сотрудников, некоторые служат веб-серверами. В общем случае имеется маршрутизатор ЛВС, соединенный с провайдером по выделенной линии для обеспечения постоянного подключения. Такое решение означает, что с каждым компьютером целый день связан один IP-адрес. Вообще-то даже все вместе взятые компьютеры, имеющиеся у корпоративных клиентов, не могут перекрыть имеющиеся у провайдераIP-адреса. Для адреса длины /16 этот предел равен, как мы уже отмечали, 65 534. Однако если у поставщика услуг Интернета число корпоратив­ных клиентов исчисляется десятками тысяч, то этот предел будет достигнут очень быстро.

Проблема усугубляется еще и тем, что все большее число частных пользователей желают иметь ADSLили кабельное соединение с Интернетом. Особенности этих способов заключаются в следующем: а) пользователи получают постоянныйIP-адрес; б) отсутствует повременная оплата (взимается только ежемесячная абонентская плата). Пользователи такого рода услуг имеют постоянное подключение к Интернету. Развитие в данном направлении приводит к возрастанию дефицитаIP-адресов. ПрисваиватьIP-адреса «на лету», как это делается при телефонном подключении, бесполезно, потому что число активных адресов в каждый момент времени может быть во много раз больше, чем имеется у провайдера.

Часто ситуация еще больше усложняется за счет того, что многие пользователи ADSLи кабельного Интернета имеют дома два и более компьютера (например, по одному на каждого члена семьи) и хотят, чтобы все машины имели выход в Интернет. Что же делать – ведь есть только одинIP-адрес, выданный провайдером! Решение таково: необходимо установить маршрутизатор и объединить все компьютеры в локальную сеть. С точки зрения провайдера, в этом случае семья будет выступать в качестве аналога маленькой фирмы с несколькими компьютерами. Добро пожаловать в корпорацию Васильевых!

Проблема дефицита IP-адресов отнюдь не теоретическая и отнюдь не относится к отдаленному будущему. Она уже актуальна, и бороться с ней приходится здесь и сейчас. Долговременный проект предполагает тотальный перевод всего Интернета на протокол IPv6 со 128-битной адресацией. Этот переход действительно постепенно происходит, но процесс идет настолько медленно, что затягивается на годы. Видя это, многие поняли, что нужно срочно найти какое-нибудь решение хотя бы на ближайшее время. Такое решение было найдено в виде метода трансляции сетевого адреса,NAT(NetworkAddressTranslation), описанного вRFC3022. Суть его мы рассмотрим позже, а более подробную информацию можно найти в (Dutcher, 2001).

Основная идея трансляции сетевого адреса состоит в присвоении каждой фирме одного IP-адреса (или, по крайней мере, небольшого числа адресов) для интернет-трафика.Внутрифирмы каждый компьютер получает уникальныйIP- адрес, используемый для маршрутизации внутреннего трафика. Однако как только пакет покидает пределы здания фирмы и направляется к провайдеру, выполняется трансляция адреса. Для реализации этой схемы было создано три диапазона так называемых частных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 хостов)

Итак, первый диапазон может обеспечить адресами 16 777 216 хостов (кроме 0 и -1, как обычно), и именно его обычно предпочитают компании, даже если им на самом деле столько внутренних адресов и не требуется.

Работа метода трансляции сетевых адресов показана на рис. 5.52. В пределах территории компании у каждой машины имеется собственный уникальный адрес вида 10.x.y.z..Тем не менее, когда пакет выходит за пределы владений компании, он проходит черезNAT-блок, транслирующий внутреннийIP-адрес источника (10.0.0.1 на рисунке) в реальныйIP-адрес, полученный компанией от провайдера (198.60.42.12 для нашего примера).NAT-блок обычно представляет собой единое устройство с брандмауэром, обеспечивающим безопасность путем строго отслеживания входящего и исходящего графика компании. Брандмауэры мы будем изучать отдельно в главе 8.NAT-блок может быть интегрирован и с маршрутизатором компании.

Рис. 5.52. Расположение и работа NAT-блока

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

На самом деле произошло вот что. Разработчики NATподметили, что большая часть полезной нагрузкиIP-пакетов – это либоTCP, либоUDP. Когда мы будем в главе 6 рассматриватьTCPиUDP, мы увидим, что оба формата имеют заголовки, содержащие номера портов источника и приемника. Далее мы обсудим, что значит портTCP, но надо иметь в виду, что с портамиUDPсвязана точно такая же история. Номера портов представляют собой 16-разрядные целые числа, показывающие, где начинается и где заканчиваетсяTCP-соединение. Место хранения номеров портов используется в качестве поля, необходимого для работыNAT.

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

TCPсодержит информацию о порте источника и порте назначения. Вместе они служат для идентификации процессов на обоих концах, использующих соединение.

Проведем аналогию, которая несколько прояснит принцип использования портов. Допустим, у компании есть один общий телефонный номер. Когда люди набирают его, они слышат голос оператора, который спрашивает, с кем именно они хотели бы соединиться, и подключают их к соответствующему добавочному телефонному номеру. Основной телефонный номер является аналогией IP-адреса компании, а добавочные на обоих концах аналогичны портам. Для адресации портов используется 16-битное поле, которое идентифицирует процесс, получающий входящий пакет.

С помощью поля Порт источникамы можем решить проблему отображения адресов. Когда исходящий пакет приходит вNAT-блок, адрес источника вида 10.x.y.z заменяется настоящимIP-адресом. Кроме того, полеПорт источникаTCPзаменяется индексом таблицы переводаNAT-блока, содержащей 65 536 записей. Каждая запись содержит исходныйIP-адрес и номер исходного порта. Наконец, пересчитываются и вставляются в пакет контрольные суммы заголовковTCPиIP. Необходимо заменять полеПорт источника,потому что машины с местными адресами 10.0.0.1 и 10.0.0.2 могут случайно пожелать воспользоваться одним и тем же портом (5000-м, например). Так что для однозначной идентификации процесса отправителя одного поляПорт источникаоказывается недостаточно.

Когда пакет прибывает на NAT-блок со стороны провайдера, извлекается значение поляПорт источниказаголовкаTCP. Оно используется в качестве индекса таблицы отображенияNAT-блока. По найденной в этой таблице записи определяются внутреннийIP-адрес и настоящийПорт источникаTCP. Эти два значения вставляются в пакет. Затем заново подсчитываются контрольные суммыTCPиIP. Пакет передается на главный маршрутизатор компании для нормальной доставки с адресом вида 10.x.y.z.

В случае применения ADSLили кабельного Интернета трансляция сетевых адресов может применяться для облегчения борьбы с нехваткой адресов. Присваиваемые пользователям адреса имеют вид 10.x.y.z. Как только пакет покидает пределы владений провайдера и уходит в Интернет, он попадает вNAT-блок, который преобразует внутренний адрес в реальныйIP-адрес провайдера. На обратном пути выполняется обратная операция. В этом смысле для всего остального Интернета провайдер со своими клиентами, использующимиADSLи кабельное соединение, представляется в виде одной большой компании.

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

Во-первых, сам принцип трансляции сетевых адресов никак не вписывается в архитектуруIP, которая подразумевает, что каждыйIP-адрес уникальным образом идентифицирует только одну машину в мире. Вся программная структура Интернета построена на использовании этого факта. При трансляции сетевых адресов получается, что тысячи машин могут (и так происходит в действительности) иметь адрес 10.0.0.1.

Во-вторых, NATпревращает Интернет из сети без установления соединения в нечто подобное сети, ориентированной на соединение. Проблема в том, чтоNAT- блок должен поддерживать таблицу отображения для всех соединений, проходящих через него. Запоминать состояние соединения – дело сетей, ориентированных на соединение, но никак не сетей без установления соединений. ЕслиNAT- блок ломается и теряются его таблицы отображения, то про все ТСР-соединения, проходящие через него, можно забыть. При отсутствии трансляции сетевых адресов выход из строя маршрутизатора не оказывает никакого эффекта на деятельностьTCP. Отправляющий процесс просто выжидает несколько секунд и посылает заново все неподтвержденные пакеты. При использованииNATИнтернет становится таким же восприимчивым к сбоям, как сеть с коммутацией каналов.

В-третьих, NATнарушает одно из фундаментальных правил построения многоуровневых протоколов: уровеньkне должен строить никаких предположений относительно того, что именно уровеньk+ 1 поместил в поле полезной нагрузки. Этот принцип определяет независимость уровней друг от друга. Если когда-нибудь на сменуTCPпридет ТСР-2, у которого будет другой формат заголовка (например, 32-битная адресация портов), то трансляция сетевых адресов потерпит фиаско. Вся идея многоуровневых протоколов состоит в том, чтобы изменения в одном из уровней никак не могли повлиять на остальные уровни.NATразрушает эту независимость.

В-четвертых, процессы в Интернете вовсе не обязаны использовать только TCPилиUDP. Если пользователь машиныАрешит придумать новый протокол транспортного уровня для общения с пользователем машиныВ(это может быть сделано, например, для какого-нибудь мультимедийного приложения), то ему придется как-то бороться с тем, чтоNAT-блок не сможет корректно обработать полеПорт источникаTCP.

В-пятых, некоторые приложения вставляют IP-адреса в текст сообщений. Получатель извлекает их оттуда и затем обрабатывает. Так какNATне знает ничего про такой способ адресации, он не сможет корректно обработать пакеты, и любые попытки использования этих адресов удаленной стороной приведут к неудаче.Протокол передачи файлов, FTP (FileTransferProtocol), использует именно такой метод и может отказаться работать при трансляции сетевых адресов, если только не будут приняты специальные меры.

Эти и другие проблемы, связанные с трансляцией сетевых адресов, обсуждаются в RFC2993. Обычно противники использованияNATговорят, что решение проблемы нехваткиIP-адресов путем создания временной уродливой заплатки только мешает процессу настоящей эволюции, заключающемуся в переходе на IPv6. ПоэтомуNAT– это не добро, а зло для Интернета.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]