Реализация IP поверх различных стандартов LAN

По мере совершенствования нашего мастерства в поиске неисправностей нам понадобится понимание инкапсуляции LAN. Технологии LAN охватывают такие технологии настольных компьютеров, как Ethernet, Token Ring и Arcnet, и технологии MAN, например FDDI. В таких технологиях, как Ethernet могут существовать несколько типов инкапсуляции, что вызывает некоторые проблемы взаимодействия. В каждой из этих технологий дейтаграммы IP необходимо разграничивать, адресовать и идентифицировать как дейтаграммы IP.
Ethernet II При пересылке через сеть Ethernet дейтаграммы IP используют либо инкапсуляцию Ethernet II, либо IEEE 802.3 SNAP. Инкапсуляция Ethernet II использует двухбайтовое поле типа для обозначения протокола верхнего уровня. У этого поля два значения: 0x08-00 соответствует IP, а 0x08-06 соответствует ARP.
Дейтаграммы IP, посылаемые в составе кадров Ethernet II, имеют максимальный размер 1500 байтов и минимальный размер 46 байтов. Дейтаграммы IP размером меньше 46 байтов дополняются нулями до 46 байтов, чтобы сохранить минимальный размер кадра Ethernet, равный 64 байтам (не включая преамбулу).
Как можно видеть на рис, кадр Ethernet II состоит из преамбулы, за которой следует адрес места назначения, адрес источника, поле типа, полезная нагрузка и, наконец, контрольная последовательность кадра. (DSAP) и точки доступа службы источника (SSAP), чтобы выделить кадр SNAP. Управляющий код 0x03 идентифицирует ненумерованный кадр. Поле кода организации задается равным 0x00-00-00, а дальше следует поле типа: 0x08-00 для IP и 0x08-06 для ARP — такое же, как в типе кадра Ethernet П.
Дейтаграммы IP, посланные в составе кадров SNAP IEEE 802.3, имеют максимальный размер 1492 и минимальный размер 38 байтов. Это слегка отличается от ограничений размера Ethernet II и отражает больший размер накладных расходов инкапсуляции 802.3 SNAP. Дейтаграммы IP меньше 38 байтов в длину дополняются нулями, чтобы сохранить минимальный размер кадра Ethernet, равный 64 байтам (не включая преамбулу и начальный ограничитель).
Сравнение Ethernet II и IEEE 802.3 В нормальной повседневной сети действительно возможно присутствие Ethernet II и IEEE 802.3. Дело в том, что стандарты TCP/IP требуют, чтобы все хосты могли посылать и получать инкапсулированные кадры Ethernet II. Кроме того, большинство хостов могут получать инкапсулированные пакеты IEEE 802.3. Некоторые хосты в сети могут одновременно посылать и получать пакеты IEEE 802.3. В таком случае, однако, по умолчанию должен использоваться тип Ethernet П. На рис. одновременно показаны пакеты IEEE 802.3 и Ethernet II, поэтому можно получить хорошее представление о различиях между двумя методами инкапсуляции.
Ethernet II используется по умолчанию для большинства сетей. Как можно видеть на рис. 1.13, оба формата кадров имеют шестибайтовые (48 битов) адреса места назначения и источника. Это адрес MAC, адрес Ethernet или аппаратный адрес хоста, который физически соединен с сетью. Эти адреса преобразуются в четырехбайтовые (32 бита) IP-адреса с помощью протокола преобразования адресов ARP, который будет рассмотрен в следующей главе.
В заголовке Ethernet II следующие два байта используются для указания типа (0x08-00 для IP, 0x08-06 для ARP). Это то же самое поле, которое позже встретится в кадре 802.3 точно перед началом части данных в кадре. Кадр IEEE 802.3 имеет вместо типа двухбайтовое поле длины. Оно не имеет соответствия в кадре Ethernet II, позволяя тем самым отличить эти два метода инкапсуляции кадра. За полем типа в заголовке Ethernet II следует часть кадра с данными с размером от 46 до 1500 байтов.
В методе инкапсуляции IEEE 802.3 после адресов места назначения и источника находится двухбайтовое поле длины. Это поле используется для указания, сколько дальше следует байтов, но не включая CRC в конце кадра. После поля длины следует раздел, определенный главой 802.2 проекта IEEE. Первые три поля в этом разделе являются полями LLC. Поля DSAP и SSAP всегда заданы как АА, а контрольное поле всегда задано как 03. В следующих пяти байтах данных SNAP код организации задан как 0x00-00-00, что требует трех байтов. Следующие два байта формируют поле типа, которое является таким же, как поле типа, имеющееся в Ethernet П. Это будет 0x08-00 для IP, 0x08-06 для ARP или 0x08-35 для кадра RARP. Другие типы перечислены в Приложении В.
Поле циклического избыточного кода (CRC) содержит контрольную сумму, которая используется для обнаружения в кадре ошибок. Иногда его называют также контрольной последовательностью кадра (FRC).
Минимальный размер инкапсулированных кадров IEEE 802.3 и кадров Ethernet II одинаков. Но в связи с дополнительными полями, вставленными перед данными в кадре типа IEEE 802.3 (которые занимают восемь байтов), минимальный и максимальный объемы данных на восемь байтов меньше, чем для кадров типа Ethernet II.

АТМ Технология

ATM (Asynchronous Transfer Mode, асинхронный режим передачи) является службой с поддержкой соединения и с негарантированной доставкой. Он хорошо масштабируется и используется в LAN и WAN. АТМ отличается от Frame Relay тем, что вместо разбиения сообщений на кадры переменного размера все сообщения разбиваются на ячейки одинакового размера. Каждая ячейка имеет пятибайтовый заголовок и 48-байтовое поле данных. Так как все ячейки имеют одинаковый размер, коммутация может быть сделана очень быстрой, и поэтому необходимость в буферизации исчезает.
Поскольку это асинхронный метод, нет необходимости в технике TDM. При использовании АТМ станция может посылать ячейки, когда ей это понадобится, а не ожидать очереди передачи, как в случае TDM.
Хотя АТМ не соответствует точно модели OSI, большинство его функций можно соотнести с канальным и сетевым уровнями. Поэтому он может действовать во множестве различных физических сред передачи, включая SONET и FDDI. Уровень адаптации АТМ соответствует сеансовому и транспортному уровням модели OSI. Он отвечает за получение данных для протоколов более высокого уровня, такого как IP, и сегментирует данные в 48-байтовые ячейки для передачи через сеть АТМ. ISDN Это коммуникационный протокол, предложенный телефонными компаниями, который позволяет телефонным сетям передавать данные, голос и другие источника трафика по телефонным линиям. ISDN построен на двух основных типах коммуникационных каналов. Первым является канал-носитель, или В-канал (Bearer), который может переносить голос, данные или изображения со скоростью 64 Кбит/сек, а вторым является канал данных, или D-канал (Data), который имеет скорость 16 Кбит/сек и используется для контрольной информации, передачи сигналов и данных управления линией. ISDN реализуется обычно в двух версиях: ISDN Basic Rate Interface (BRI) с двумя каналами В и одним каналом D и ISDN Primary Rate Interface (PRI) с 23 каналами В и каналом D.
HDLC Синхронный бит-ориентированный протокол канального уровня, разработанный ISO. Производный от SDLC, HDLC определяет метод инкапсуляции данных на синхронных последовательных линиях, используя символы обрамления кадра и контрольные суммы. Данные переносятся в кадрах, которые могут содержать переменный объем данных.
SLIP Используется как метод инкапсуляции последовательного канала, поэтому является простым протоколом кадрирования пакетов. SLIP определяет несколько символов, которые обрамляют пакеты IP в последовательном канале. Это техника с минимальными накладными расходами, которая не предоставляет согласования адресации, идентификации протокола, обнаружения ошибок или механизма сжатия. Созданный для использования на медленных последовательных линиях связи (например, модемах), он определяет два специальных символа, которые применяются для обрамления кадра.
Первый — символ END (ОхСО), который используется для определения конца дейтаграммы IP. Второй символ — ESC (OxDB) используется для указания, когда символ ОхСО встречается внутри дейтаграммы IP. ESC-символ SLIP отличается от ESC-символа ASCII (0x1В).
SLIP использует технику, называемую символьным заполнением, для предотвращения появления символа END в середине дейтаграммы IP. Если символ END (ОхСО) встречается внутри исходной дейтаграммы IP, то он заменяется последовательностью OxDB-DC. Если символ ESC (OxDB) встречается внутри дейтаграммы IP, то он заменяется последовательностью OxDB-DD. Это предотвращает зависание модема в середине передачи.
Максимальный размер дейтаграммы IP для SLIP обычно ограничен 1500 байтами на более новых системах или 1006 байтами на реализациях Berkley UNIX версии 4.2. Однако эта распространенная практика не определена в стандартах.
Чтобы сократить объем накладных расходов на потенциально медленных последовательных линиях связи, в RFC 1144 определен метод сжатия заголовков IP и TCP в заголовок размером от 3-х до 5-ти байтов, который известен как OSLIP или Compressed SLIP.
РРР Протокол РРР — наследник SLIP. PPP предоставляет соединения маршрутизатор-маршрутизатор и хост-сеть через синхронные последовательные линии связи, такие как ISDN или SONET, а также асинхронные каналы, например типичные телефонные коммутируемые линии. Он исправляет недостатки SLIP.

Семейство протоколов PPP

РРР является семейством протоколов, которые предоставляют мульти-протокольную инкапсуляцию, протокол контроля линии (LCP) для создания, конфигурирования и тестирования соединения канала данных, и семейство протоколов управления сетью (NCP) для создания и конфигурирования протоколов различных сетевых уровней.
Как можно видеть на рис, РРР устанавливает флаг как 0х7Е (01111110), чтобы указать начало и конец кадра РРР. В последовательных кадрах РРР будет задан только один символ флага. Поле адреса используется для адресации пакета для узла места назначения. В двухточечной линии связи узел назначения адресовать не нужно. Поэтому в РРР поле адреса задается как OxFF, т.е. как адрес широковещания.
В среде HDLC контрольное поле используется для функции подтверждения и упорядочивания уровня канала данных; однако в РРР контрольное поле задано как 0x03 для указания кадра ненумерованной информации (UI). Это то же самое, что и бит, который задается в методах кадрирования Ethernet.
Поле протокола имеет два байта и используется для идентификации протокола в полезной нагрузке РРР. Если поле задано как 0x00-21, то оно указывает на дейтаграмму IP. Контрольная последовательность кадра (FCS) является двухбайтовой CRC, аналогичной тому, что используется для инкапсуляции Ethernet.
Как и SLIP, РРР имеет метод, предотвращающий появление символа флага в середине данных. В синхронной линии связи, такой как ISDN, используется заполнение битами для вставки дополнительных битов, чтобы отметить, когда появляется символ флага. Закодированное представление байтов может содержать более 8 битов, но дополнительные биты добавляются и удаляются аппаратурой синхронной линии связи.
РРР использует также заполнение символами (подобно SLIP) на асинхронных линиях для предотвращения появления флага внутри кадра РРР. Если символ 0х7Е появляется в исходной дейтаграмме IP, то он заменяется строкой символов 0x7D-5D. Если символ ESC (0x7D) возникает в исходной дейтаграмме, то он заменяется последовательностью 0x7D-5D снова в 0x7D.
Символы меньше 0x20 также модифицируются, чтобы последовательные драйверы не интерпретировали их как управляющие символы, посылая 0x7D, а затем исходный символ с дополненным шестым битом.
Максимальная получаемая единица данных (MRU) равна 1500 байтам.
РРТР Протокол РРТР является способом взять существующий кадр РРР и инкапсулировать его через межсетевой обмен IP. РРТР позволяет создать в Интернете защищенные виртуальные частные сети (VPN). РРТР может использоваться независимо от того, поддерживает VPN провайдер услуг Интернета (ISP) или нет. Требуется только сервер, поддерживающий РРТР, и клиент, который может создать соединение РРТР. ,
Инкапсуляция кадров РРР реализуется с помощью протокола инкапсуляции базовой маршрутизации (GRE), который использует ID протокола IP, равный 47 (0x2F). Для использования его с РРТР протокол GRE был усовершенствован, чтобы предоставить поле подтверждения.
Как показано на рис. 1.15, кадр РРТР имеет заголовок среды и заголовок IP, прежде чем добраться до заголовка GRE. После заголовка GRE следует заголовок РРР, а затем полезная нагрузка РРР.
Заголовок GRE начинается с двух байтов для флагов. Эти флаги указывают, присутствует ли полезная нагрузка GRE и номера последовательности и подтверждения. Поле типа протокола содержит значение Ethernet, которое соответствует РРР (0х88-0В). Длина полезной нагрузки равна размеру полезной нагрузки GRE в байтах. Идентификатор (ID) вызова является информацией идентификации сеанса для этого пакета РРТР, за которым следуют номера последовательности и номер подтверждения — самый большой номер последовательности, полученный посылающим узлом этого сеанса. Номер последовательности используется для управления потоком, а не для повторной передачи потерянных кадров РРТР.

Протокол TCP

Протокол управления передачей (протокол TCP) может выполнять базовую пересылку данных, используя непрерывный поток данных размером в байт. Данные упаковываются в сегменты для передачи протоколом Интернета. В общем TCP сам выполняет управление потоком и сам решает, когда передавать и когда задержать данные, если потребуется. Определена функция push, которая позволяет пользователю узнать, когда TCP успешно передал все данные, предоставленные ему приложением. Посылающий TCP может собирать данные от посылающих пользователей и посылать эти данные в сегментах по своему собственному усмотрению, пока не будет вызвана функция push, после чего он должен послать все не отосланные данные. Когда принимающий TCP видит флаг PUSH, он не должен ждать дополнительные данные от посылающего TCP, прежде чем передать данные в получающий процесс. Push заставляет TCP переслать и доставить полученные до этого момента данные прямо получателю. Мы увидим флаг push в некоторых примерах.
Чтобы восстановить поврежденные, потерянные, пришедшие в неправильном порядке или как-нибудь иначе поврежденные данные, TCP присваивает порядковый номер каждому передаваемому октету. Это позволяет уровню TCP на получающей машине знать, в каком порядке должны прийти пакеты, чтобы правильно их собрать. В дополнение к порядковым номерам, каждый правильно полученный пакет должен также подтверждаться (путем передачи служебного сообщения АСК) получающим TCP. Если АСК не получен в течение периода ожидания, данные будут посланы повторно. Для определения, что пакет был поврежден, используется контрольная сумма. Она добавляется к каждому сегменту, передаваемому посылающей машиной, и проверяется получателем.
Управление потоком обеспечивается с помощью "окна", которое посылается назад с каждым АСК. Это окно является диапазоном порядковых номеров, которые могут быть переданы в следующем раунде коммуникации. Они находятся за последним успешно полученным сегментом. Окно указывает число октетов, которое может послать отправитель, прежде чем получить следующее разрешение. Чтобы хост разрешал общаться через TCP в одно время нескольким процессам, используются порты. Добавление номера порта в конце адреса IP (например: 123.123.123.123:29) формирует со-кет. Пара сокетов используется для идентификации соединения, поэтому сокет можно использовать для переноса данных в обоих направлениях в одно время, т.е. это "дуплексная передача".
Хотя каждый хост отвечает за номера портов, которые он использует для этих соединений, некоторые функции были присвоены "хорошо известным портам". Эти службы доступны по известным адресам. Список этих хорошо известных портов находится в Приложении А. Комбинация сокетов, номеров последовательности и размеров окон называется соединением. Два процесса общаются, устанавливая сначала соединение. Когда коммуникация заканчивается, соединение закрывается, чтобы освободить ресурсы.
Есть два интерфейса, поддерживаемые протоколом управления передачей. Это интерфейс пользователя и интерфейс Интернета. Интерфейс пользователя позволяет вызвать пять основных функций протокола. Этими функциями являются: Открыть соединение, Закрыть соединение, Передать данные, Получить данные и Статус. Функция "Статус" выдает информацию о соединении. Эти пять вызовов действуют так же, как их аналоги в любой другой программе. Например, можно открыть или закрыть файл таким же образом, как TCP выполняет функции аналогичного типа. Пассивный запрос OPEN (открыть) означает, что процесс хочет принять входящие запросы соединения, а не пытается инициировать соединение.
Часто процесс, запрашивающий пассивный OPEN, будет принимать запрос соединения от любого вызывающего абонента. В этом случае для обозначения неуказанного сокета будет использоваться внешний сокет только из нулей. Неопределенные внешние сокеты допускаются только на пассивных OPEN. Процесс службы, которая желает предоставлять услуги для других неизвестных процессов, будет создавать пассивный запрос OPEN с неопределенным внешним сокетом. Затем можно будет создать соединение с любым процессом, который запрашивает соединение с этим локальным сокетом. Это полезно, если известно, что этот локальный сокет связан с данной службой.
Хорошо известные сокеты являются удобным механизмом связывания адреса сокета со стандартной службой. Например, процесс "TelnetServer" постоянно присвоен определенному сокету, а другие сокеты зарезервированы для передачи файлов. Интерфейс Интернета, поддерживаемый TCP, предоставляет только два вызова. Он может посылать или получать дейтаграммы, адресованные модулям TCP на других хостах. Эти вызовы имеют ряд параметров, которые можно задавать. Они задаются как флаги в кадре, как мы увидим в примерах трассировок. Эти параметры включают тип службы, приоритеты, безопасность и другую управляющую информацию.

Заголовок TCP

Поля источника и места назначения Рассмотрим структуру заголовка TCP. Для этого обратимся к рис. и разберем сегмент TCP, перехваченный сетевым монитором. Первое поле, которое встречается в заголовке TCP,— это порт источника, 16-разрядное поле, используемое для идентификации процесса на исходном компьютере, посылающем сегмент TCP целевому компьютеру. На рис. это 0x04-05 (десятичное 1029). Следующее поле (очевидно) является портом места назначения. Как и порт источника, это также 16-разрядное поле, которое используется для идентификации процесса на принимающей машине. На рисунке это порт telnet 0x17 (23).
Поле порядкового номера Теперь мы переходим к порядковому номеру. 32-разрядное поле используется для идентификации порядкового номера, который соответствует первому байту в этом сегменте. Упорядочивание TCP использует смещение байта в потоке данных для указания, где в потоке находятся данные. Когда флаг SYN (синхронизации) задается во время установления соединения, номер последовательности становится начальным порядковым номером (ISN). Когда данные посылаются, ISN увеличивается на 1. Это сообщает посылающей и принимающей машинам, где в потоке данных они работают.
Поле подтверждения Следующие 32 бита являются полем подтверждения, которое указывает посылающей машине, что предыдущий сегмент был получен без изменений. Это поле имеет значение, только если задан флаг АСК (подтверждение). Это поле очень важно для установленного соединения.