Протокол IСМР примыкает к IP. Он служит для обмена сообщениями об ошибках и иной важной информацией с IP-модулем другого хоста или маршрутизатора. Хотя ICMP используется в основном протоколом IP, прикладная задача также может иметь к нему доступ. Мы увидим, что два наиболее популярных средства диагностики, Ping и Traceroute, обращаются к ICMP непосредственно, минуя IP.
IGMP используется при групповой пересылке данных, то есть когда UDP-дейтаграммы предназначены одновременно нескольким хостам. Мы расскажем об основных свойствах широковещательной (broadcasting) передачи UDP-дейтаграмм, адресованных всем хостам указанной сети, и о групповой пересылке данных (multicasting).
ARP и RARP — специализированные протоколы, используемые определенными типами сетевых интерфейсов (например, Ethernet или Token Ring) для отображения адресов уровня IP в соответствующие им адреса канального уровня.
5. Межсетевой протокол IP
В семействе TCP/IP протоколу IP отведена роль "рабочей лошадки": в IP-дейтаграммах передаются все данные TCP, UDP, ICMP и IGMP. Однако доставка IP-дейтаграмм — это по определению ненадежный и не поддерживающий соединение сервис.
Ненадежный сервис не гарантирует того, что IP-дейтаграмма успешно доберется к месту назначения. О такой доставке пакетов принято говорить, что делается все возможное, но успех попытки зависит от обстоятельств (best effort deliveiy). Если на промежуточном узле происходит сбой (например, временно переполнен буфер маршрутизатора), то его IP-модуль действует просто: он уничтожает дейтаграмму. Предполагается, что требуемая степень надежности должна обеспечиваться протоколами верхних уровней (например, TCP).
Термин не поддерживающий соединение (connectionless) означает, что IP не ведет никакого учета очередности доставки дейтаграмм и каждая обрабатывается независимо от остальных. Как следствие, очередность доставки может нарушаться. Когда хост одну за другой последовательно отправляет две дейтаграммы (сначала А, потом В) одному и тому же адресату, маршрутизация обеих происходит независимо. Маршруты их продвижения могут оказаться разными, причем такими, что В прибудет раньше А.
Модуль IP является базовым элементом технологии internet, а центральной частью IP является его таблица маршрутов. Протокол IP использует эту таблицу при принятии всех решений о маршрутизации IP-пакетов. Содержание таблицы маршрутов определяется администратором сети. Ошибки при установке маршрутов могут заблокировать передачи.
5.1. Маршрутизация
Важнейшая из основных функций уровня IP — это маршрутизация. Источником дейтаграмм, подлежащих маршрутизации на хосте, может быть как сам этот хост, так и любой другой компьютер в сети. В последнем случае хост должен быть специально конфигурирован для выполнения функций маршрутизатора, иначе поступающие на его сетевые интерфейсы, но не ему адресованные дейтаграммы будут им просто игнорироваться.
5.1.1. Прямая маршрутизация
Рис.2. Простая IP-сеть
На рисунке 2 показана небольшая IP-сеть, состоящая из 3 машин: A, B и C. Каждая машина имеет такой же стек протоколов TCP/IP как на рис.1. Каждый сетевой адаптер этих машин имеет свой Ethernet-адрес. Менеджер сети должен присвоить машинам уникальные IP-адреса.
Когда A посылает IP-пакет B, то заголовок IP-пакета содержит в поле отправителя IP-адрес узла A, а заголовок Ethernet-кадра содержит в поле отправителя Ethernet-адрес A. Кроме этого, IP-заголовок содержит в поле получателя IP-адрес узла B, а Ethernet-заголовок содержит в поле получателя Ethernet-адрес B.
В этом простом примере протокол IP является излишеством, которое мало что добавляет к услугам, предоставляемым сетью Ethernet. Однако протокол IP требует дополнительных расходов на создание, передачу и обработку IP-заголовка. Когда в машине B модуль IP получает IP-пакет от машины A, он сопоставляет IP-адрес места назначения со своим и, если адреса совпадают, то передает датаграмму протоколу верхнего уровня.
В данном случае при взаимодействии A с B используется прямая маршрутизация.
5.1.2. Косвенная маршрутизация
Рис.3. Сеть internet, состоящая из трех IP-сетей
На рисунке 3 представлена более реалистичная картина сети internet. В данном случае сеть internet состоит из трех сетей Ethernet, на базе которых работают три IP-сети, объединенные шлюзом D. Каждая IP-сеть включает четыре машины; каждая машина имеет свои собственные IP- и Ethernet адреса.
За исключением D все машины имеют стек протоколов, аналогичный показанному на рисунке. Шлюз D соединяет все три сети и, следовательно, имеет три IP-адреса и три Ethernet-адреса. Машина D имеет стек протоколов TCP/IP, он содержит три модуля ARP и три драйвера Ethernet.
Менеджер сети присваивает каждой сети Ethernet уникальный номер, называемый IP-номером сети. На рис.3 IP-номера не показаны, вместо них используются имена сетей.
Когда машина A посылает IP-пакет машине B, то процесс передачи идет в пределах одной сети. При всех взаимодействиях между машинами, подключенными к одной IP-сети, используется прямая маршрутизация.
Когда машина D взаимодействует с машиной A, то это прямое взаимодействие. Когда машина D взаимодействует с машиной E, то это прямое взаимодействие. Когда машина D взаимодействует с машиной H, то это прямое взаимодействие. Это так, поскольку каждая пара этих машин принадлежит одной IP-сети.
Однако, когда машина A взаимодействует с машинами, включенными в другую IP-сеть, то взаимодействие уже не будет прямым. Машина A должна использовать шлюз D для ретрансляции IP-пакетов в другую IP-сеть. Такое взаимодействие называется "косвенным".
Маршрутизация IP-пакетов выполняется модулями IP и является прозрачной для модулей TCP, UDP и прикладных процессов.
Если машина A посылает машине E IP-пакет, то IP-адрес и Ethernet-адрес отправителя соответствуют адресам A. IP-адрес места назначения является адресом E, но поскольку модуль IP в A посылает IP-пакет через D, Ethernet-адрес места назначения является адресом D.
Модуль IP в машине D получает IP-пакет и проверяет IP-адрес места назначения. Определив, что это не его IP-адрес, шлюз D посылает этот IP-пакет прямо к E.
Итак, при прямой маршрутизации IP- и Ethernet-адреса отправителя соответствуют адресам того узла, который послал IP-пакет, а IP- и Ethernet-адреса места назначения соответствуют адресам получателя. При косвенной маршрутизации IP- и Ethernet-адреса не образуют таких пар.
6. Протокол TCP
Протокол TCP предоставляет транспортные услуги, отличающиеся от услуг UDP. Вместо ненадежной доставки датаграмм без установления соединений, он обеспечивает гарантированную доставку с установлением соединений в виде байтовых потоков.
Протокол TCP используется в тех случаях, когда требуется надежная доставка сообщений. Он освобождает прикладные процессы от необходимости использовать таймауты и повторные передачи для обеспечения надежности. Наиболее типичными прикладными процессами, использующими TCP, являются FTP (File Transfer Protocol - протокол передачи файлов) и TELNET. Кроме того, TCP используют система X-Window, rcp (remote copy - удаленное копирование) и другие "r-команды". Большие возможности TCP даются не бесплатно. Реализация TCP требует большой производительности процессора и большой пропускной способности сети. Внутренняя структура модуля TCP гораздо сложнее структуры модуля UDP.
Прикладные процессы взаимодействуют с модулем TCP через порты. Для отдельных приложений выделяются общеизвестные номера портов. Например, сервер TELNET использует порт номер 23. Клиент TELNET может получать услуги от сервера, если установит соединение с TCP-портом 23 на его машине.
Когда прикладной процесс начинает использовать TCP, то модуль TCP на машине клиента и модуль TCP на машине сервера начинают общаться. Эти два оконечных модуля TCP поддерживают информацию о состоянии соединения, называемого виртуальным каналом. Этот виртуальный канал потребляет ресурсы обоих оконечных модулей TCP. Канал является дуплексным; данные могут одновременно передаваться в обоих направлениях. Один прикладной процесс пишет данные в TCP-порт, они проходят по сети, и другой приклад ной процесс читает их из своего TCP-порта.
Протокол TCP разбивает поток байт на пакеты; он не сохраняет границ между записями. Например, если один прикладной процесс делает 5 записей в TCP-порт, то прикладной процесс на другом конце виртуального канала может выполнить 10 чтений для того, чтобы получить все данные. Но этот же процесс может получить все данные сразу, сделав только одну операцию чтения. Не существует зависимости между числом и размером записываемых сообщений с одной стороны и числом и размером считываемых сообщений с другой стороны.
Протокол TCP требует, чтобы все отправленные данные были подтверждены принявшей их стороной. Он использует таймауты и повторные передачи для обеспечения надежной доставки. Отправителю разрешается передавать некоторое количество данных, не дожидаясь подтверждения приема ранее отправленных данных. Таким образом, между отправленными и подтвержденными данными существует окно уже отправленных, но еще неподтвержденных данных. Количество байт, которые можно передавать без подтверждения, называется размером окна. Как правило, размер окна устанавливается в стартовых файлах сетевого программного обеспечения. Так как TCP-канал является дуплексным, то подтверждения для данных, идущих в одном направлении, могут передаваться вместе с данными, идущими в противоположном направлении. Приемники на обеих сторонах виртуального канала выполняют управление потоком передаваемых данных для того, чтобы не допускать переполнения буферов.