Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на вопросы по сетям.docx
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
566.34 Кб
Скачать

1.8.Трансляция сетевого адреса — nat

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 (Network Address Translation), описан- ного в RFC 3022. Суть его мы рассмотрим позже, а более подробную информа- цию можно найти в (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. В пределах территории компании у каждой машины имеется собственный уникальный адрес вида 10jc.y.z. Тем не менее, когда пакет выходит за пределы владений ком- пании, он проходит через NAT-блок, транслирующий внутренний IP-адрес ис- точника (10.0.0.1 на рисунке) в реальный IP-адрес, полученный компанией от провайдера (198.60.42.12 для нашего примера). NAT-блок обычно представля- ет собой единое устройство с брандмауэром, обеспечивающим безопасность пу- тем строго отслеживания входящего и исходящего графика компании. Брандмау- эры мы будем изучать отдельно в главе 8. 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_r.z/.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_o/.z. В случае применения ADSL или кабельного Интернета трансляция сетевых адресов может применяться для облегчения борьбы с нехваткой адресов. При- сваиваемые пользователям адреса имеют вид 10-r.z/.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 (File Transfer Protocol), использует именно такой метод и может отказаться работать при трансляции сетевых адресов, если только не будут приняты специальные меры. Протокол интернет-телефонии Н.323 (мы будем изучать его в главе 7) также обладает подобным свойством. Можно улучшить метод NAT и заставить его корректно работать с Н.323, но не- возможно же дорабатывать его всякий раз, когда появляется новое приложение. В-шестых, поскольку поле Порт источника является 16-разрядным, то на один IP-адрес может быть отображено примерно 65 536 местных адресов машин. На самом деле это число несколько меньше: первые 4096 портов зарезервированы для служебных нужд. В общем, если есть несколько IP-адресов, то каждый из них может поддерживать до 61 440 местных адресов. Эти и другие проблемы, связанные с трансляцией сетевых адресов, обсужда- ются в RFC 2993. Обычно противники использования NAT говорят, что решение проблемы нехватки IP-адресов путем создания временной уродливой заплатки только мешает процессу настоящей эволюции, заключающемуся в переходе на IPv6. Поэтому NAT — это не добро, а зло для Интернета.