Адресация на канальном уровне

Адрес канального уровня уникальным образом идентифицирует каждое физическое соединение сетевого устройства с сетью. Адреса канального уровня иногда называются физическими или аппаратными адресами. Обычно они образуют неиерархическое адресное пространство, задаются для каждого устройства заранее и, как правило, жестко. Оконечные системы имеют обычно только одно физическое сетевое соединение и, стало быть, только один адрес канального уровня. Маршрутизаторы и другие устройства, поддерживающие межсетевой обмен, обычно имеют несколько физических сетевых соединений и несколько адресов канального уровня.
Адреса подуровня управления доступом к среде передачи (MAC) являют-I ся подмножеством адресов канального уровня. Адреса MAC идентифицируют сетевые устройства в LAN, реализующие подуровень IEEE MAC канального уровня. Как большинство адресов канального уровня, адреса MAC являются уникальными для каждого интерфейса LAN. Адреса MAC имеют 48 битов в длину и выражаются с помощью 12 шестнадцатеричных цифр: первые шесть шестнадцатеричных цифр являются идентификацией производителя (или кодом поставщика), называемым уникальным идентификатором организации (OUI). Эти шесть цифр устанавливаются IEEE. Последние шесть шестнадцатеричных цифр являются серийным номером интерфейса или другим значением, администрируемым определенным поставщиком. Адреса MAC иногда называются аппаратными или "зашитыми" адресами (Burned-in Address, BIA), так как они выжжены в постоянной памяти (ROM) и копируются в оперативную память (RAM), когда инициализируется плата интерфейса.
Адресация на сетевом уровне
Адрес сетевого уровня идентифицирует устройство сетевого уровня эталонной модели OSI. Сетевые адреса существуют обычно в иерархическом адресном пространстве. Иногда их называют виртуальными или логическими адресами. Отношение сетевого адреса с устройством является логическим и нефиксированным. Обычно адрес основывается либо на характеристиках физической сети (устройство находится в определенном сетевом сегменте), или на логическом объединении, которое не имеет физической основы (устройство является частью зоны AppleTalk). Оконечным системам требуется один адрес сетевого уровня для каждого протокола сетевого уровня, который они поддерживают. (Это предполагает, что устройство имеет только одно физическое сетевое соединение.) Маршрутизаторы и другие устройства, поддерживающие межсетевой обмен, требуют один адрес сетевого уровня на каждое физическое соединение для каждого поддерживаемого протокола сетевого уровня. Например, маршрутизатор с тремя интерфейсами, каждый из которых поддерживает одновременно AppleTalk, TCP/IP и OSI, должен иметь три адреса сетевого уровня для каждого интерфейса. Поэтому маршрутизатор имеет девять адресов сетевого уровня.

Семейство протоколов 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 бита являются полем подтверждения, которое указывает посылающей машине, что предыдущий сегмент был получен без изменений. Это поле имеет значение, только если задан флаг АСК (подтверждение). Это поле очень важно для установленного соединения.

Поле смещения данных

Это четырехразрядное поле используется для указания, где начинается полезная нагрузка TCP. Оно называется также полем длины заголовка, так как после вычисления, где начинаются данные TCP, мы знаем длину заголовка. Длина заголовка TCP (включая параметры) всегда кратна 32 битам и не превосходит 60 байтов. Шесть битов, следующих за полем сдвига данных, зарезервированы и должны быть заданы как 0.
Шесть флагов TCP В заголовке TCP можно установить шесть флагов (см. ниже). Они устанавливаются с помощью одноразрядного поля для каждого из доступных флагов. Поэтому поле флагов занимает в заголовке всего шесть битов. Если флаг не установлен (т.е. сброшен), то в соответствующем поле стоит значение 0.
1. Поле срочности (URG) существенно. При заданном флаге в поле указателя срочности содержатся важные данные. Срочные данные не являются частью обычного потока данных и будут обрабатываться до любых других данных. Срочные данные могут использоваться для прерывания программ и уведомления приложения о событиях десин-хронизации. Они используются также для передачи по сети приложению сообщения, которое не является частью текущего потока данных (данные вне полосы).
2. Поле подтверждения (АСК) существенно, когда задан этот флаг. Когда создано нормальное соединение, флаг АСК будет постоянно в работе.
3. Флаг выталкивания (PSH) указывает, что данные в сегменте и другие полученные данные, которые находятся в буфере получения, немедленно должны быть переданы в приложение. TCP часто будет держать входящие данные в буфере получения, когда буфер заполняется, он передает данные приложению. Это может вызывать проблемы в некоторых приложениях, таких как Telnet, которому необходимо иметь возможность передать клавишный ввод на другую машину. Выталкиваемые данные не должны подтверждаться немедленно, это может произойти при следующей нормальной передаче данных.
4. Флаг сброса (RST) используется для прекращения соединения. Когда на активном соединении получен флаг сброса, это означает, что произошла ошибка, и соединение должно быть принудительно закрыто. Получение сброса при попытке установления соединения означает отказ.
5. Флаг синхронизированного порядкового номера (SYN) используется в начале настройки соединения для создания порядковых номеров и подтверждения. До создания соединения ни одна из машин не знает о порядковых номерах другой машины. В начале общения используется трехходовое квитирование для передачи информации о порядковых номерах. Флаг SYN используется для согласования порядковых номеров.
6. Флаг завершения отправки данных (FIN) "культурно" завершает соединение TCP. Когда одна машина хочет прекратить соединение, она посылает сегмент с установленным флагом FIN. Если обе машины послали сегменты с установленным FIN и подтвердили флаг, соединение завершается.
Поле окна Поле окна содержит 16 битов и используется для указания числа байтов, которое готов принять отправитель сегмента TCP. Эти данные должны начинаться с октета, указанного в поле подтверждения, иначе они будут отвергнуты. Это окно является явным указанием размера буфера TCP на посылающем хосте. Оно также используется для определения максимального порядкового номера, который может быть подтвержден из этого сегмента добавлением номера текущего подтверждения к номеру поля окна.
Контрольная сумма Контрольная сумма является 16-битным числом, представляющим собой двоичное дополнение суммы дополнений до единицы всех 16-битных слов в заголовке TCP и тексте. Если сегмент имеет нечетное число октетов текста и заголовка, то последний октет дополняется справа нулями, пока не будет сформировано 16-битное слово для использования при вычислении контрольной суммы. Важно отметить, что дополнение нулями не передается. Пока контрольная сумма вычисляется, поле контрольной суммы заполняется нулями.
Указатель срочности Поле указателя срочности является 16-битным полем, которое задается равным порядковому номеру последнего октета срочных данных. Оно используется, только когда передаются сегменты с битом URG (срочный). Иначе это поле задается равным нулю (0x0).
Заполнение кадра и параметры Поле параметров является набором из 32 битов, которые используются для хранения параметров TCP. Если параметры не используют все 32-битное поле, оно заполняется нулями.