Какой из указанных протоколов обеспечивает функцию фрагментации пакетов

Обновлено: 02.07.2024

Internet Protocol — Межсетевой протокол адресации и маршрутизации, объединяет отдельные компьютерные сети в единую сеть Интернет, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов (маршрутизаторов).

Свойства:

  • Протокол не гарантирует доставки пакета до адресата (пакеты могут прийти в порядке отличном от отправки, прийти несколько раз, прийти повреждёнными или не прийти вовсе). Гарантию безошибочной доставки пакетов дают протоколы более высокого (транспортного) уровня использующие IP адресацию и маршрутизацию в качестве транспорта, например - TCP.
  • Протокол предусматривает дробление (фрагментацию) пакета данных в процессе доставки по причинам разнородных по возможностям каналов связей, такие фрагменты пакетов собираются воедино на стороне получателя. В версии 6 маршрутизаторы более не обязаны делать фрагментацию, в связи с этим в сетях IPv6 отправитель должен отправлять пакеты размером не превышающим минимального MTU назначенного пути или использовать минимальное значение MTU для сетей IPv6 равное 1280 байт.
  • В протоколе предусмотрена возможность запрета фрагментации (в версии 6 включена по умолчанию) конкретного пакета. Если такой пакет нельзя передать через сегмент связи целиком, то он уничтожается а отправителю направляется уведомление о проблеме по протоколу ICMP.

На текущий момент сеть Интернет объединена двумя версиями данного протокола адресации (IPv4, IPv6) вследствие нехватки количества адресов предоставляемого 4 версией протокола для растущего количества узлов которым необходимо единое адресное пространство.

Изменения 6 версии:

  • размер адреса увеличен с 4 байт до 16 байт;
  • размер заголовка пакета увеличился с 20 до 40 байт;
  • максимальный размер пакета увеличен с 65 Кб до 4 Гб;
  • исчезла излишняя контрольная сумма и необходимость её пересчёта на каждом узле маршрутизации;
  • появились метки потоков и классы траффика;
  • добавлена многоадресная маршрутизация;
  • включена поддержка шифрования по протоколу IPsec;

Пакет версии 4 включает:

  • 4 бита — версия протокола, содержит значение “4”
  • 4 бита — IHL, длина заголовка пакета в 32-битных словах
  • 1 байт— ToS, тип обслуживания, на практике в большинстве реализаций протокола поле почти всегда равно “0"
  • 2 байта— длина пакета от 20 до 65535 байт
  • 2 байта— идентификатор пакета, все фрагменты одного пакета имеют один идентификатор
  • 1 бит — значение “0”
  • 1 бит — флаг разрешения фрагментации
  • 1 бит — флаг указывающий последний фрагмент пакета (если значение равно “0”)
  • 13 бит — смещение текущего фрагмента в 64-битных словах
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0" пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 1 байт— идентификатор протокола транспортируемого вложенного пакета (ICMP=1, TCP=6, UDP=17, …)
  • 2 байта — контрольная сумма заголовка
  • 4 байта— адрес отправителя
  • 4 байта— адрес получателя
  • 0–40 байт — дополнительные параметры
  • 0–65515 байт — область данных

Пакет версии 6 включает:

  • 4 бита — версия протокола, содержит значение “6"
  • 1 байт — класс трафика определяющий его приоритет
  • 20 бит — метка потока идентифицирующая канал однотипных пакетов между адресатами
  • 2 байта — длина области данных в байтах
  • 1 байт — тип первого расширенного заголовка IPv6
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0” пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 16 байт — адрес отправителя
  • 16 байт — адрес получателя
  • расширенные заголовки
  • 0–64 Кбайт — область данных (с помощью опции jumbo payload в расширенном заголовке Hop-By-Hop Options возможно увеличение области данных до 4 Гбайт минус 1 байт)

Расширенные заголовки содержат дополнительную информацию и размещены между фиксированным заголовком и заголовком протокола более высокого уровня в области данных. Каждый расширенный заголовок имеет поле в котором хранится тип следующего расширенного заголовка, последний расширенный заголовок содержит в этом поле тип протокола более высокого уровня, находящегося в области данных. Каждый расширенный заголовок должен иметь размер в байтах, кратный 8. Некоторые заголовки необходимо расширить до нужного размера. Все расширенные заголовки являются необязательными.

Расширенные заголовки должны быть обработаны только конечным узлом, за исключением заголовка Hop-By-Hop Options, который должен быть обработан каждым промежуточным узлом на пути пакета, включая отправителя и получателя. Расширенные заголовки не должны повторяться в пакете более одного раза, за исключением заголовка Destination Options, который может появиться дважды.

Если расширенных заголовков в пакете несколько, то необходимо отсортировать их в порядке списка указанного ниже:

  • “0” Hop-by-Hop Options — параметры, которые должны быть обработаны каждым транзитным узлом
  • “60” Destination Options — параметры которые должны быть обработаны только получателем
  • “43” Routing — позволяет отправителю определять список узлов, которые пакет должен пройти
  • “44” Fragment — содержит информацию по фрагментации пакета
  • “51” Authentication Header — используется для аутентификации большей части пакета (IPsec)
  • “50” Encapsulating Security Payload— используется для шифрования данных (IPsec)

В большинстве сетевых ОС используется очень небольшой набор собственных протоколов. Эти весьма компактные и высокофункциональные протоколы позволяют сетевой операционной системе рационализировать свою работу, что существенно повышает эффективность совместного использования файлов и принтеров.

Следует отметить, однако, что сами по себе эти протоколы каких-то значительных дополнительных возможностей не предоставляют. В отличие от них, комплект TCP/IP обеспечивает выполнение широчайшей гаммы сервисных функций. Пользователи могут совместно использовать файлы и принтеры. С помощью сервисов эмуляции терминалов они могут выполнять приложения на удаленных компьютерах, позволяя использовать возможности больших систем для выполнения конкретных программ. TCP/IP обладает высокой степенью масштабируемости, и пользователи могут по своему усмотрению выбрать любое подмножество протоколов в качестве клиентских или серверных сервисов.

Другая примечательная черта TCP/IP - его "открытость": это полностью общедоступная спецификация. Любой человек может предлагать дополнения к этой спецификации, и процесс протекает абсолютно открыто. Так, многие фирмы предлагают свои платформы с уже встроенными протоколами и сервисами TCP/IP . Это облегчает конечному пользователю задачу совместного использования различных ресурсов без привязки к какому-то одному поставщику.

Третье важное преимущество TCP/IP состоит в том, что это набор очень надежных протоколов, в состав которого входят транспортные протоколы, эффективно работающие в глобальных сетях. Протокол NBF ( и в меньшей степени IPX ) предназначался для использования в локальных сетях. NBF не предусматривает маршрутизацию, т.е. пользователи, подключенные к одному сетевому кабелю, видят серверы, подключенные к другому кабелю, только в том случае, если два этих сегмента соединены мостом и образуют одну логическую сеть. В глобальных сетевых средах эта схема работает плохо. Протокол IPX - полностью маршрутизируемый, но вот более высокоуровневый NCP предусматривает явное квитирование всех передаваемых сетевых пакетов, что сильно замедляет его работу с глобальными сетевыми каналами. Ни один из этих наборов протоколов не подходит для использования в Internet .

Комплект протоколов TCP/IP с самого начала разрабатывался для соединения хост-компьютеров между собой через глобальные сети, поэтому он и маршрутизируемый, и эффективный. Эти достоинства сохраняются и в локальных сетях, что делает TCP/IP отличным вариантом и для мелко-, и для крупномасштабных сетей. Три вышеупомянутых качества (масштабируемость, открытость и надежность) делают TCP/IP привлекательным вариантом для пользователей разнородных сред. Именно поэтому TCP/IP является стержнем Internet .

Функционирование сети TCP/IP

Чтобы лучше понять, как работают некоторые протоколы из набора TCP/IP , рассмотрим работу небольшой сети, состоящей из двух компьютеров, на которых запущено несколько сетевых приложений.

Однако эти приложения не заработают, пока не будут произведены некоторые подготовительные действия. Например, в Ethernet- кадрах, которые идут от Саши к Коле, должна быть информация, которой Саша пока не располагает, - IP -адрес получателя и его MAC -адрес.

Саша знает имя своего компьютера, IP- и MAC -адрес, т.к. все эти параметры прописаны в конфигурации его компьютера. Остается узнать только IP- и MAC -адрес компьютера Коли. Для этого Саша должен воспользоваться системой доменных имен ( DNS ) и протоколом разрешения адресов ( ARP ). Саша знает IP -адрес DNS , т.к. он прописан в конфигурации Сашиной машины. Далее Саша отправляет DNS -запрос системе DNS , спрашивая у нее IP- адрес Колиной машины. DNS отвечает адресом 10.1.1.2. Но Саше все еще нужен адрес Ethernet MAC , использующий адрес 10.1.1.2, поэтому он выполняет широковещательный ARP -зарос. Такой запрос отправляется по широковещательному Ethernet -адресу, чтобы все компьютеры, находящиеся в сети, его получили. Поскольку компьютер Коли подключен к сети, он получает этот запрос. А так как адрес его компьютера 10.1.1.2, а ARP -запрос ищет MAC -адрес, связанный с адресом 10.1.1.2, Коля сообщает свой MAC -адрес. На рис.1 схематически показан весь этот процесс.

Рис. 1. Работа служб DNS и протокола ARP

Теперь Саша знает адреса IP и Ethernet MAC , которые необходимы для отправки данных Коле. Весь этот процесс проходит автоматически, невидимо для пользователя, но важно знать, как это все происходит, чтобы уметь решать возникающие проблемы.

Коле, соответственно, необходимо знать, какому приложению какие данные предназначаются, но все три пакета приходят от одного IP - и MAC -адреса. Можно было бы, конечно, распределять пришедшие пакеты по использованному при передаче протоколу UDP или TCP , но в нашем случае два из трех приложений используют протокол TCP . К счастью, разработчики протоколов UDP и TCP позаботились о распределении пакетов по приложениям и вставили в передаваемые пакеты специальное поле, которое называется номером порта. Процесс разбиения данных по номерам портов называется мультиплексированием, т.е. определение приложения, которое получает данные из пакета. Каждое приложение Саши использует разные номера портов, поэтому Коля знает, какому приложению предназначаются данные.

Итак, мы рассмотрели, как работает элементарная сеть с несколькими приложениями. Давайте теперь познакомимся с использованными в данном примере протоколами немного поближе.

Протоколы канального уровня SLIP и PPP

На канальном уровне используются протоколы SLIP ( Serial Link Internet Protocol - межсетевой протокол для последовательного канала ) и PPP ( Point-to-Point Protocol - протокол "точка-точка" ) .

Протоколы канального уровня SLIP и PPP применяются как на коммутируемых линиях, так и на выделенных телефонных каналах. С их помощью к глобальной сети подключается большинство индивидуальных пользователей, а также небольшие локальные сети. Подобные линии связи могут обеспечивать скорость передачи данных до 115200 бит/с.

Serial Line Internet Protocol (SLIP )

Согласно RFC -1055 впервые SLIP был включен в качестве средства доступа к IP -сети в пакет фирмы 3COM-UNET . В 1984 г. Рик Адамс реализовал SLIP для BSD 4.2 , и таким образом SLIP стал достоянием Internet в целом. Обычно этот протокол применяют как на выделенных, так и на коммутируемых линиях связи со скоростью передачи от 1200 до 19200 бит/с.

Такие операционные системы, как FreeBSD, Linux, NetBSD , которые можно свободно скопировать и установить на своем персональном компьютере, или HP-UX , которая поставляется вместе с рабочими станциями Hewlett-Packard , имеют в своем арсенале программные средства типа sliplogin (FreeBSD) или slp (HP-UX ), обеспечивающие работу компьютера в качестве SLIP -сервера для удаленных пользователей, подключающихся к IP -сети по телефону. Хотя в стандарте SLIP нет определения понятия " SLIP -сервер", обычно используют термины " SLIP -клиент" для компьютера, инициирующего физическое соединение, и " SLIP -сервер" для машины, постоянно включенной в IP -сеть.

В рамках протокола SLIP осуществляется фрагментация IP -пакетов, при этом SLIP -пакет должен начинаться символом ESC (восьмеричное 333 или десятичное 219) и заканчиваться символом END (восьмеричное 300 или десятичное 192). Стандарт не определяет размер SLIP -пакета, поэтому любой интерфейс имеет специальное поле, в котором пользователь должен указать эту длину. SLIP -модуль не анализирует поток данных и не выделяет какую-либо информацию в этом потоке, а также не позволяет выполнять какие-либо действия, связанные с адресами, т.к. в структуре пакета не предусмотрены поле адреса и его специальная обработка. Компьютеры, взаимодействующие по SLIP , обязаны знать свои IP -адреса заранее. SLIP не предусматривает корректировку ошибок линии связи, и коррекция ошибок возлагается на протоколы транспортного уровня - TCP, UDP . В стандартное SLIP не предусмотрена компрессия данных, но существуют варианты протокола с такими возможностями.

Point to Point Protocol (PPP )

Согласно RFC -1661 данный протокол обеспечивает стандартный метод взаимодействия двух узлов сети. Предполагается, что обеспечивается двунаправленная одновременная передача данных. Как и в SLIP , данные разбиваются на пакеты, которые передаются от узла к узлу упорядоченно. В отличие от SLIP , PPP позволяет одновременно передавать по линии связи пакеты различных протоколов. Кроме того, PPP предполагает процесс автоконфигурации обеих взаимодействующих сторон. Собственно говоря, PPP состоит из трех частей: механизма инкапсуляции ( encapsulation), протокола управления соединением ( link control protocol) и семейства протоколов управления сетью ( network control protocols ).

Под датаграммой в PPP понимается информационная единица сетевого уровня (применительно к IP - IP- пакет). Под фреймом понимают информационную единицу канального уровня (согласно модели OSI ). Для обеспечения быстрой обработки информации длина фрейма PPP должна быть кратна 32 битам. Фрейм состоит из заголовка и хвоста, между которыми содержаться данные. Датаграмма может быть инкапсулирована в один или несколько фреймов (Рис.2). Пакетом называют информационную единицу обмена между модулями сетевого и канального уровней. Обычно каждому пакету ставится в соответствие один фрейм, за исключением тех случаев когда канальный уровень требует большей фрагментации данных или, наоборот, объединяет пакеты для более эффективной передачи.

В поле "Протокол" указывается тип инкапсулированной датаграммы. Существуют специальные правила кодирования протоколов в этом поле (см. ISO 3309 и RFC -1661). В поле "Информация" записывается собственно пакет данных, а в поле "Хвост" добавляется заполнитель для выравнивания на 32-битовую границу. По умолчанию длина фрейма PPP устанавливается в 1500 байт, но в это число не входит длина поля "Протокол".

Рис. 2. PPP -фрейм

Протокол управления соединением предназначен для установки соглашения между узлами сети о параметрах инкапсуляции (размер фрейма и т.п.), кроме того, он позволяет проводить идентификацию узлов. Первой фазой установки соединения является проверка готовности физического уровня передачи данных. При этом такая проверка может осуществляться периодически, позволяя реализовать механизм автоматического восстановления физического соединения, как это бывает при работе через модем по коммутируемой линии. Если физическое соединение установлено, то узлы начинают обмен пакетами протокола управления соединением, настраивая параметры сессии. Любой пакет, отличный от пакета протокола управления соединением, не обрабатывается во время этого обмена. После установки параметров соединения возможен переход к идентификации. После всех этих действий происходит настройка параметров работы с протоколами межсетевого обмена ( IP, IPX и т.п.). Для каждого из них используется свой протокол управления. Для завершения работы по протоколу PPP по сети передается пакет завершения работы протокола управления соединением.

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

Point-to-Point Tunneling Protocol (PPTP )

Протокол PPTP - туннельный протокол "точка-точка" - продвинул концепцию PPP на шаг вперед: этот протокол "заворачивает" в PPTP -обертку PPP -пакеты. С эксплуатационной точки зрения, разница между PPP и PPTP заключается только в следующем: чтобы создать PPP -канал, вы набираете номер телефона, а чтобы создать PPTP -канал, вы "набираете" IP -адрес.

Как и в случае с PPP , пакеты PPTP "заворачиваются", транспортируются на другой конец канала (в данном случае в систему, обозначенную IP -адресом, упомянутым в предыдущем абзаце), и "разворачиваются". в результате между дв4умя системами создается "частная виртуальная сеть", по которой передаются пакеты PPTP . Чтобы этот канал был действительно частным, PPTP поддерживает ряд возможностей защиты, вплоть до шифрования всех данных пакета.

Таким образом, с помощью протоколов PPP и SLIP можно установить глобально-сетевое соединение по коммутируемым линиям, ISDN , сетям X.25 и другим каналам. И PPP , и SLIP характеризуются относительной нечувствительностью к помехам в линии и задержкам приема пакетов.

Протокол PPP более гибок, чем SLIP . Принцип его работы заключается в "заворачивании" пакетов транспортных протоколов TCP , IPX или NBF в пакет особого формата и транспортировке завернутого таким образом пакета по каналу ГВС (глобальной вычислительной сети). На другом конце соединения пакет "разворачивается", и исходные пакеты передаются по локальной сети. После установления соединения все эти операции становятся полностью прозрачными для приложений - приложения видят абсолютно нормальные пакеты TCP, IPX и NBF (хотя эти пакеты могут прибывать несколько медленнее, чем по локальной сети).

SLIP менее гибок. Он представляет собой, по сути дела, расширение IP , предназначенное для работы по низкоскоростным каналам, поэтому и поддерживает только IP -сети. Кроме того, он менее устойчив к помехам в линии. Сервис RAS ( Remote Access Services - служба удаленного доступа) операционной системы Windows NT поддерживает SLIP , главным образом, для совместимости с серверами ГВС, работающими на базе ОС UNIX .

PPTP обладает наибольшими функциональными возможностями по сравнению с SLIP и PPP , позволяя устанавливать частные виртуальные защищенные каналы связи.

Межсетевые протоколы

Internet Protocol (IP)

Протокол IP используется для управления рассылкой TCP/IP -пакетов по сети Internet . Среди различных функций, возложенных на IP , обычно выделяют следующие:

  • определение пакета, который является базовым понятием и единицей передачи данных в сети Internet ;
  • определение адресной схемы, которая используется в сети Internet ;
  • передача данных между канальным уровнем (уровнем доступа к среде передачи) и транспортным уровнем (другими словами, преобразование транспортных дейтаграмм во фреймы канального уровня);
  • маршрутизация пакетов по сети, т.е. передача пакетов от одного шлюза к другому с целью передачи пакета машине-получателю;
  • фрагментация и дефрагментация пакетов транспортного уровня.

Главной особенностью протокола IP является отсутствие ориентации на физическое или виртуальное соединение. Это значит, что, прежде чем послать пакет в сеть, модуль операционной системы, реализующий IP , не проверяет возможность установк4и соединения, т.е. никакой управляющей информации кроме той, что содержится в самом IP -пакете, по сети не передается. Кроме того, IP не заботится о проверке целостности информации в поле данных пакета, что заставляет отнести его к протоколам ненадежной доставки. Целостность данных проверяется протоколами транспортного уровня (TCP) или протоколами приложений.

Таким образом, вся информация о пути, по которому должен пройти пакет, определяется по состоянию сети в момент прохождения пакета. Эта процедура называется маршрутизацией, в отличие от коммутации, используемой для предварительного установления маршрута следования отправляемых данных.

Существует несколько версий протокола IP . В настоящее время используется версия Ipv4 (RFC 791) , структура пакета которой представлена на рис. 3.

Рис. 3. формат пакета Ipv4

Фактически в заголовке пакета определены все основные данные, необходимые для перечисленных выше функций протокола IP : адрес отправителя, адрес получателя, общая длина пакета и тип пересылаемой дейтаграммы.

Используя данные заголовка, машина может определить, на какой сетевой интерфейс отправлять пакет. Если IP -адрес получателя принадлежит одной из ее сетей, то на интерфейс этой сети пакет и будет отправлен, в противном случае пакет отправят на другой шлюз.

На основе протокола транспортного уровня IP -модуль производит экскапсуляцию информации из IP -пакета и ее передачу на модуль обслуживания соответствующего транспорта.

При обсуждении формата заголовка пакета IP вернемся еще раз к инкапсулированию. Как уже отмечалось, при обычной процедуре инкапсулирован я пакет просто помещается в поле данных фрейма, а в случае, когда это не может быть осуществлено, разбивается на более мелкие фрагменты. Размер максимально возможного фре2йма, который передается по сети, определяется величиной MTU (Maximum Transmission Unit ), определенной для протокола канального уровня. Для последующего восстановления пакет IP должен держать информацию о своем разбиении, и для этой цели используются поля Flags и Fragmentation offset . В этих полях определяется, какая часть пакета получена в данном фрейме, если этот пакет был фрагментирован на более мелкие части.

Internet Control Message Protocol (ICMP)

Routing Information Protocol (RIP)

Address Resolution Protocol (ARP)

К моменту, когда протокол IP должен отправлять дейтаграмму, он уже информирован протоколами верхних уровней об IP -адресе получателя. В свою очередь, он должен сообщить протоколу канального уровня аппаратный адрес удаленного компьютера. Если этот адрес не известен, для поиска нужной информации применяется протокол определения адресов ARP ( Address Resolution Protocol - протокол разрешения адресов), который ведет широковещательный опрос сети - запрашивает у каждого имеющего определенный IP -адрес компьютера адрес его аппаратного обеспечения (или, другими словами, MAC -адрес). Протокол ARP может перевести IP -адрес в адрес аппаратного обеспечения, например, в MAC -адрес сетевой платы удаленного компьютера.

Протоколы транспортного уровня

User Datagram Protocol (UDP)

Таблица 1. Стандартные сетевые сервисы и соответствующие им порты

Наиболее известными сервисами, основанными на UDP , являются служба доменных имен BIND и распределенная файловая система NFS .

Transfer Control Protocol (TCP)

В том случае, когда контроль качества передачи данных по сети имеет особое значение для приложения, используется протокол TCP . Этот протокол также называют надежным, ориентированным на соединение, потокоориентированным протоколом. Рассмотрим формат передаваемой по сети дейтаграммы (рис. 5).

Рис. 5. Структура пакета TCP

Потоковый характер протокола определяется тем, что SYN определяет стартовый номер для отсчета переданных байтов, а не пакетов. Это значит, что если SYN был установлен в 0 и было передано 200 байтов, то номер, установленный в следующем пакете, будет равен 201, а не 2.

Потоковый характер протокола и требование подтверждения получения данных порождают проблему скорости передачи данных. Для ее решения используется поле Window ( окно). Идея применения "окна" достаточно проста: передавать данные, не дожидаясь подтверждения об их получении. Это значит, что источник передает некоторое количество данных, равное Window , без ожидания подтверждения об их приеме, и только после этого останавливает передачу и ждет подтверждения. Если он получит подтверждение только на часть переданных данных, то начнет передачу новой порции с номера, следующего за подтвержденным.

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

Стек TCP/IP не подразумевает использования каких-либо определенных протоколов уровня доступа к среде передачи и физических сред передачи данных. От уровня доступа к среде передачи требуется наличие интерфейса с модулем IP, обеспечивающего передачу IP-пакетов. Также требуется обеспечить преобразование IP-адреса узла сети, на который передается IP-пакет, в MAC-адрес.

Основу межсетевого уровня (уровня межсетевого взаимодействия) составляет IP-протокол:

• Первый стандарт IPv4 определен в RFC-760 (1980 г.).

• Последняя версия IPv4 – RFC-791 (1981 г.).

• Первый стандарт IPv6 определен в RFC-1883 (1995 г.).

• Последняя версия IPv6 – RFC-2460 (Internet Protocol, Version 6 Specification, S. Deering, R. Hinden, December 1998).

Пакет, передаваемый по сети Internet, называют IP-дейтаграммой или IP-пакетом. Межсетевой протокол IP является дейтаграммным протоколом без установления соединения, не обеспечивающим надежную доставку пакетов.

Основными функциями протокола IP являются:

• перенос между сетями различных типов адресной информации в унифицированной форме;

• сборка и разборка пакетов при передаче их между сетями с различным макс. значением длины пакета.

Основными характеристиками протокола IP являются:

• формат IP пакета;

• способ обработки конфликтных ситуаций;

"Ненадежность доставки":

• не гарантируется доставка пакетов получателю;

• по пути следования пакет может быть утерян, продублирован, задержан;

• пакеты могут быть доставлены с нарушением порядка следования.

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

В протоколе IP применяют четыре основных механизма для обеспечения межсетевых услуг: вид обслуживания, время жизни, контрольная сумма заголовка, дополнительные возможности (опции).

Вид обслуживания используется для указания требуемого качества обслуживания межсетевой дейтаграммы (МД) при её передаче через межсетевую систему.

Время жизни является указателем верхней границы времени существования некоторой межсетевой дейтаграммы в сети. Этот указатель задаётся отправителем и уменьшается по мере движения МД по точкам маршрута (по шлюзам), если время МД становится нулевым до того, как она достигнет получателя, то эта дейтаграмма уничтожается.

Контрольная сумма заголовка обеспечивает защиту данных в нём, если модуль обнаруживает ошибку в заголовке, то эта МД уничтожается модулем, который её обнаружит.

Дополнительные возможности обеспечивают выполнение некоторых дополнительных услуг, например, по защите данных, специальной маршрутизации.

1. номер версии (размер 4 бита) указывает версию IP протокола

2. длина заголовка (4 бита) указывает значение длины заголовка, измеренное в 32-битовых словах, обычно имеет длину 20 байт

3. тип сервера (занимает 1 байт) и задает приоритетность пакета и вид критерия выбора маршрута; первые три бита образуют подполе приоритета пакета: от самого низкого 0 – нормальный пакет до пакета управляющей информации 7; приоритетность учитывается при обработке пакетов; вторые три бита определяют критерии выбора маршрута: малая задержка, высокая достоверность, высокая пропускная способность

4. общая длина (2 байта) означает общую длину пакета с учетом заголовка и поля данных; МАХ длина пакета ограничена разрядностью поля, определяющего эту величину, и составляет 65535 байт

5. идентификатор пакета (2 байта) используется для распознавания пакетов, образовавшихся путем фрагментации исходного пакета; все фрагменты должны иметь одинаковые значения этого поля

6. флаги (3 бита) содержат признаки, связанные с фрагментацией; установленный бит DF запрещает маршрутизатору фрагментировать данный пакет, а бит MF говорит о том, что данный пакет является промежуточным, но не последним; последний бит зарезервирован

7. смещение фрагмента (13 бит) задаёт смещение в байтах поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации; смещение должно быть кратно 8 байтам

8. время жизни (1 байт) означает определённый срок, в течение которого пакет может перемещаться по сети; измеряется в секундах; задаётся источник передач; на маршр-ах и в др. узлах сети по истечении каждой сек из текущего времени вычитается 1; если параметр время жизни станет 0-м до того, как пакет достигнет получателя, он будет уничтожен

9. протокол (1 байт) указывает, какому протоколу верхнего уровня принадлежит информация, размещенная в поле данных пакета

10. контрольная сумма (2 байта) рассчитывается только по заголовку;

11. адрес источника и

12. адрес отправителя имеют одинаковую длину 32 бита и структуру

13. опции (доп. параметры) явл. не обязательными; исп-ся обычно при отладки сети; может указываться точный маршрут прохождения, временные отметки, данные системы безопасности; т.к. число подполей м.б. произвольным, то в конце поля должно быть добавлено несколько байт для выравнивания заголовка пакета по 32-битной границе

14. выравнивание исп-ся для того, чтобы убедиться, что IP-заголовок заканчивается на 32-битной границе; выравнивание осуществляется 0-ми.

Фрагментация

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

Части, на которые разделяется дейтаграмма (IP-пакет), называются фрагментами, а сам процесс разделения - фрагментацией.

В большинстве типов локальных и глобальных сетей определяется такое понятие как максимальный размер поля данных кадра или пакета, в которые должен инкапсулировать свой пакет протокол IP. Эту величину обычно называют максимальной единицей транспортировки - MTU (Maximum Transfer Unit). Сети Ethernet имеют значение MTU, равное 1500 байт, сети FDDI - 4096 байт, а сети Х.25 чаще всего работают с MTU в 128 байт.

Рассмотрим работу протокола IP по фрагментации пакетов в хостах и маршрутизаторах

Методы маршрутизации

1. Простая марш-япри выборе дальнейшего пути для сооб-я (пакета) учитывает лишь статич. априорное состояние сети, ее текущее сост-е – загрузка и измен-е топологии из-за отказов – не учит-ся. Одно из направ-й простой маршр-и – лавинное отправление сооб-я сразу по всем свободным каналам.

2. Фиксир-я маршр-яучитывает только изменение топологии сети. Для каждого узла назначения канал передачи выбирается по электр. таблице маршрутов, определяющей кратчайшие пути и время доставки инф-и до пункта назн-я. Эта маршр-я исп-ся в сетях с установившейся топологией.

3. Адаптивная марш-яучитывает и изменение загрузки, и изменение топологии сети. При выборе маршрута инф-я из таблицы маршрутов дополняется данными о работосп-ти и занятости каналов связи, оперативной инф-ей о сущ. очереди пакетов на каждом канале. В локальном варианте этой маршрутизации учитываются данные только о каналах, исходящих из текущего узла, а при распределенной адаптивной маршрутизации и данные, получаемые от соседних узлов коммутации.

Концентраторытакже используются для коммутации каналов в компьютерных сетях. В сетях основные функции концентратора заключаются в повторении сигналов (повторитель) и концентрировании в себе, (концентратор) как в центральном устройстве, функций объединения компьюте­ров в единую сеть. Их часто называют хабами или многопортовыми повторителями. Концентратор образует из подключенных к его портам отдельных физических сегментов сети общую среду передачи данных – некий логический сегмент, обладающий всеми функциями физического. Концентраторы-хабы могут быть трех типов:

· пассивными, просто соединяющими сегменты сети одного типа, ничего нового не добавляя;

· активными, которые кроме соединения сегментов выполняют и усиление (регенерирование) сигналов (они, как и повторители, позволяют увеличить рас­тояние между соединяемыми устройствами);

· интеллектуальными, дополнительно к функциям активных хабов выполняющие маршрутизацию сигналов по сегментам (посылают данные только в те сегменты, для которых они предназначена) и обеспечивающие некоторые сервисные технологии, например защиту информации от несанкционированного доступа, самодиагностику и автоматическое отключение плохо работающих портов и т. д.

Аналоговые модемы

Модем(Модулятор-ДЕМодулятор) – устройство прямого (модулятор) и обратного (демодулятор) преобразования сигналов к виду, принятому для использования в определенном канале связи.

Модемы бывают аналоговые и цифровые. Аналоговые модемы самые распространенные. Первоначально аналоговый модем был предназначен для выполнения следующих функций:

1) при передаче для преобразования широкополосных импульсов (цифрового кода) в узкополосные аналоговые сигналы);

2) при приеме для фильтрации принятого сигнала от помех и детектирования, то есть обратного преобразования узкополосного аналогового сигнала в цифровой код.

Преобразование, выполняемое при передаче данных, обычно связано с их модуля­цией.

Модуляция это изменение какого-либо параметра сигнала в канале связи (модулируемого сигнала) в соответствии с текущими значениями передаваемых данных (модулирующего сигнала).

Демодуляция это обратное преобразование модулированного сигнала (возможно, искаженного помехами при прохождении в канале связи) в модулирующий сигнал. В современных модемах используются чаще всего три вида модуляции:

1) частотная – FSK (Frequence Shift Keying);

2) фазовая – PSK (Phase Shift Keying);

3) квадратурная амплитудная – QAM (Quadrature Amplitude Modulation).

При частотной модуляции в соответствии с текущими значениями модулирующего сигнала (передаваемых данных) изменяется частота физического сигнала (обычно синусоидального) при неизменной его амплитуде. В простейшем случае значениям 1 и 0 бит данных соответствуют два значения частот, например 980 и 1180 Гц, как было принято в одном из первых протоколов V.21 передачи данных. Частотная модуляция весьма помехоустойчива, ибо при передаче искажается обычно лишь амплитуда сигнала.

При фазовой модуляции модулируемым параметром является фаза сигнала при неизменных частоте и амплитуде; помехоустойчивость фазомодулированного сигнала также высокая.

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

Протоколы передачи данных

Передача данных и их преобразования в модемах выполняются в соответствии с принятыми протоколами.

Протокол передачи данных– это совокупность правил, регламентирующих формат данных и процедуры их передачи в канале связи. В протоколе, в частности, может подробно указываться, как представить данные, какой способ модуляции данных избрать с целью ускорения и защищенности их передачи, как выполнить соединение с каналом, преодолеть действующие в канале шумы и обеспечить достоверность передачи данных. (V.21, V.22, V.21 bis и т.д.)

Хотя при фильтрации сигнала, выполняемой при демодуляции, помехозащищенность повышается, этого оказалось недостаточно для эффективного подавления ошибок передачи данных, возникающих из за помех и шумов в каналах связи. Поэтому в середине 80-х годов были предложены более действенные протоколы защиты от ошибок семейства MNP (Microcom Network Protocol), используемые в большинстве современных модемов. Эти протоколы основаны на использовании корректирующих кодов с обнаружением и исправлением ошибок, поэтому модемы существенно усложнились. Этими же протоколами предусмотрено дальнейшее совершенствование модемов, связанное с внедрением в них функции сжатия данных, позволившей существен­но поднять скорость передачи данных.

Протоколы семейства NMP-1-NMP-10 в последние годы стали вытесняться протоколами LAPM (Link Access Procedure for Modem), V.42, V.42bis, позволяющими более эффективно выполнять коррекцию ошибок и сжатие данных. Стандарт V.90 предусматривает выполнение тестирования канала связи, позволяющего определить оптимальный для него режим работы модемов (несущая частота, полоса пропускания, скорость передачи, уровень передаваемого сигнала). Сейчас заканчивается разработка нового протокола V.92, который, не увеличивая скорость приема данных (56 кбит/с – теоретический предел), поднимает максимальную скорость передачи данных до 48 кбит/с. Для передачи файлов установлены свои протоколы, регламентирующие дополнительно процедуры разбиения информации на блоки, использования кодов с автоматическим обнаружением и исправлением ошибок, повторной пересылки неверно принятых блоков, восстановления передачи после обрыва и т.д.

1. Лекция - Введение. Адресация. Протоколы (IP, TCP, UDP). Порты.

Официальная документация по Internet

Все разработчики должны придерживаться этой документации, но на практике, не всегда так происходит.

Адресация в сети Internet.

Типы адресов.

Физический (MAC-адрес)

Сетевой (IP-адрес)

Символьный (DNS-имя)

Компьютер в сети TCP/IP может иметь адреса трех уровней (но не менее двух):

Локальный адрес компьютера. Для узлов, входящих в локальные сети - это МАС-адрес сетевого адаптера. Эти адреса назначаются производителями оборудования и являются уникальными адресами.

IP-адрес, состоящий из 4 байт, например, 109.26.17.100. Этот адрес используется на сетевом уровне. Он назначается администратором во время конфигурирования компьютеров и маршрутизаторов.

IPv4 - адрес является уникальным 32-битным идентификатором IP-интерфейса в Интернет.

IP-адреса принято записывать разбивкой всего адреса по октетам (8), каждый октет записывается в виде десятичного числа, числа разделяются точками. Например, адрес


10100000010100010000010110000011
записывается как

Перевод адреса из двоичной системы в десятичную

IP-адрес хоста состоит из номера IP-сети, который занимает старшую область адреса, и номера хоста в этой сети, который занимает младшую часть.

160.81.5. - номер сети

131 - номер хоста

Базовые протоколы (IP, TCP, UDP)

Стек протоколов TCP/IP

TCP/IP - собирательное название для набора (стека) сетевых протоколов разных уровней, используемых в Интернет. Особенности TCP/IP:

Открытые стандарты протоколов, разрабатываемые независимо от программного и аппаратного обеспечения;

Независимость от физической среды передачи;

Система уникальной адресации;

Стандартизованные протоколы высокого уровня для распространенных пользовательских сервисов.

Стек протоколов TCP/IP

Стек протоколов TCP/IP делится на 4 уровня:

Физический и канальный.

Позже была принята 7-ми уровневая модель ISO.

Данные передаются в пакетах. Пакеты имеют заголовок и окончание, которые содержат служебную информацию. Данные, более верхних уровней вставляются, в пакеты нижних уровней.

Пример инкапсуляции пакетов в стеке TCP/IP

Физический и канальный уровень.

Стек TCP/IP не подразумевает использования каких-либо определенных протоколов уровня доступа к среде передачи и физических сред передачи данных. От уровня доступа к среде передачи требуется наличие интерфейса с модулем IP, обеспечивающего передачу IP-пакетов. Также требуется обеспечить преобразование IP-адреса узла сети, на который передается IP-пакет, в MAC-адрес. Часто в качестве уровня доступа к среде передачи могут выступать целые протокольные стеки, тогда говорят об IP поверх ATM, IP поверх IPX, IP поверх X.25 и т.п.

Межсетевой уровень и протокол IP.

Основу этого уровня составляет IP-протокол.

IP (Internet Protocol) – интернет протокол.

Первый стандарт IPv4 определен в RFC-760 (DoD standard Internet Protocol J. Postel Jan-01-1980)

Последняя версия IPv4 - RFC-791 (Internet Protocol J. Postel Sep-01-1981).

Первый стандарт IPv6 определен в RFC-1883 (Internet Protocol, Version 6 (IPv6) Specification S. Deering, R. Hinden December 1995)

Последняя версия IPv6 - RFC-2460 (Internet Protocol, Version 6 (IPv6) Specification S. Deering, R. Hinden December 1998).

Протокол IP доставляет блоки данных от одного IP-адреса к другому.

Программа, реализующая функции того или иного протокола, часто называется модулем, например, “IP-модуль”, “модуль TCP”.

Когда модуль IP получает IP-пакет с нижнего уровня, он проверяет IP-адрес назначения.

Если IP-пакет адресован данному компьютеру, то данные из него передаются на обработку модулю вышестоящего уровня (какому конкретно - указано в заголовке IP-пакета).

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

Структура дейтограммы IP. Слова по 32 бита.

Версия - версия протокола IP (например, 4 или 6)

Длина заг. - длина заголовка IP-пакета.

Тип сервиса (TOS - type of service) - Тип сервиса (подробнее рассмотрен в лекции 8).

TOS играет важную роль в маршрутизации пакетов. Интернет не гарантирует запрашиваемый TOS, но многие маршрутизаторы учитывают эти запросы при выборе маршрута (протоколы OSPF и IGRP).

Идентификатор дейтаграммы, флаги (3 бита) и указатель фрагмента - используются для распознавания пакетов, образовавшихся путем фрагментации исходного пакета.

Время жизни (TTL - time to live) - каждый маршрутизатор уменьшает его на 1, что бы пакеты не блуждали вечно.

Протокол - Идентификатор протокола верхнего уровня указывает, какому протоколу верхнего уровня принадлежит пакет (например: TCP, UDP).

Коды некоторые протоколов RFC-1700 (1994)

Протокол IP является маршрутизируемый, для его маршрутизации нужна маршрутная информация.

Маршрутная информация, может быть:

Статической (маршрутные таблицы прописываются вручную)

Динамической (маршрутную информацию распространяют специальные протоколы)

Протоколы динамической маршрутизации:

RIP (Routing Information Protocol) - протокол передачи маршрутной информации, маршрутизаторы динамически создают маршрутные таблицы.

OSPF (Open Shortest Path First) - протокол "Открой кротчайший путь первым", является внутренним протоколом маршрутизации.

IGP (Interior Gateway Protocols) - внутренние протоколы маршрутизации, распространяет маршрутную информацию внутри одной автономной системе.

EGP (Exterior Gateway Protocols) - внешние протоколы маршрутизации, распространяет маршрутную информацию между автономными системами.

BGP (Border Gateway Protocol) - протокол граничных маршрутизаторов.

Другие служебные IP-протоколы

IGMP (Internet Group Management Protocol) - позволяет организовать многоадресную рассылку средствами IP.

RSVP (Resource Reservation Protocol) - протокол резервирования ресурсов.

ARP (Address Resolution Protocol) - протокол преобразования IP-адреса и адреса канального уровня.

Транспортный уровень

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

Анализируя заголовок своего пакета, полученного от межсетевого уровня, транспортный модуль определяет по номеру порта получателя, какому из прикладных процессов направлены данные, и передает эти данные соответствующему прикладному процессу. Номера портов получателя и отправителя записываются в заголовок транспортным модулем, отправляющим данные; заголовок транспортного уровня содержит также и другую служебную информацию; формат заголовка зависит от используемого транспортного протокола.

На транспортном уровне работают два основных протокола: UDP и TCP.

Первая и последняя версия TCP - RFC-793 (Transmission Control Protocol J. Postel Sep-01-1981).

Посылает запрос на следующий пакет, указывая его номер в поле "Номер подтверждения" (AS). Тем самым, подтверждая получение предыдущего пакета.

Делает проверку целостности данных, если пакет битый посылает повторный запрос.

Структура дейтограммы TCP. Слова по 32 бита.

Длина заголовка - задается словами по 32бита.

Размер окна - количество байт, которые готов принять получатель без подтверждения.

Контрольная сумма - включает псевдо заголовок, заголовок и данные.

Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.

URG - флаг срочности, включает поле "Указатель срочности", если =0 то поле игнорируется.

ACK - флаг подтверждение, включает поле "Номер подтверждения, если =0 то поле игнорируется.

PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.

RST - флаг прерывания соединения, используется для отказа в соединении

SYN - флаг синхронизация порядковых номеров, используется при установлении соединения.

FIN - флаг окончание передачи со стороны отправителя

UDP (Universal Datagram Protocol) - универсальный протокол передачи данных, более облегченный транспортный протокол, чем TCP.

Основные отличия от TCP:

Отсутствует соединение между модулями UDP.

При потере пакета запрос для повторной передачи не посылается

UDP используется если не требуется гарантированная доставка пакетов , например, для потокового видео и аудио, DNS (т.к. данные небольших размеров). Если проверка контрольной суммы выявила ошибку или если процесса, подключенного к требуемому порту, не существует, пакет игнорируется (уничтожается). Если пакеты поступают быстрее, чем модуль UDP успевает их обрабатывать, то поступающие пакеты также игнорируются.

Структура дейтограммы UDP. Слова по 32 бита.


Не все поля UDP-пакета обязательно должны быть заполнены. Если посылаемая дейтаграмма не предполагает ответа, то на месте адреса отправителя могут помещаться нули.

Протокол реального времени RTP

RTP (Real Time Protocol) - транспортный протокол для приложений реального времени.

RTCP (Real Time Control Protocol) - транспортный протокол обратной связи для приложения RTP..

Назначение портов

По номеру порта транспортные протоколы определяют, какому приложению передать содержимое пакетов.

Порты могут принимать значение от 0-65535 (два байта 2^16).

Некоторые заданные порты RFC-1700 (1994)

Программа Ping

Программа для проверки соединения и работы с удаленным хостом.

Программа TraceRoute - позволяет проверить маршрут до удаленного хоста.


Пока воспоминания о предыдущем проекте не канули в лету, займемся завершением начатого. Собственно, мы осуществили обработку ARP запросов, поступающих при отправке команды ping нашему устройству. Логически верным шагом будет реализовать и ответ на вышеупомянутую команду, к чему и переходим. Работаем по классической схеме — первичные теоретические сведения, которые впоследствии буду сопровождены практическим примером для STM32 и ENC28J60.

Небольшой внос дополнительной систематизации:

Итак, продолжаем продвигаться по стеку протоколов к верхним уровням и сегодня работаем на сетевом уровне:

Сетевой уровень.

Протокол IP.

Протокол IP является ключевым, если говорить о функционировании сети Интернет в целом. Именно этот протокол позволяет пакетам циркулировать между сетями, то есть осуществляет объединение различных сетевых сегментов в одну единую Сеть. Каким бы не было количество промежуточных маршрутизаторов между двумя узлами сети, протокол обеспечит доставку информации по адресу.

Между тем, сам по себе протокол IP не гарантирует надежной доставки пакета, в отличие, например, от стандартного примера надежности — TCP.

Формат пакетов IP базируется на привычной структуре — байты заголовка, за которыми следует смысловая нагрузка в виде данных (рассматривается версия IPv4):


Формат пакетов протокола IP разобрали, дополним текущий проект функционалом для их обработки.

Придерживаемся нашей четко структурированной архитектуры и начинаем с добавления в проект двух новых файлов:

STM32, протокол IP.

Второй шаг — определение структуры для работы с IP фреймами. Данное действие происходит в файле ip.h:

Поля выстроены в соответствии с рассмотренным выше порядком их следования. Сразу же добавим функцию для расчета контрольной суммы:

В принципе, на этом вся подготовительная деятельность завершена, добавляем основную функцию для обработки IP пакетов и формирования ответных:

Общая концепция совпадает с использованной нами в модуле протокола ARP. В качестве аргумента получаем frameLen — длину IP фрейма. Возвращать будем обновленную длину, соответствующую отправляемому пакету. Эта величина будет храниться в newFrameLen.

Проверяем, что указанный IP в пакете соответствует нашему адресу:

В случае успеха рассчитываем контрольную сумму. Небольшой нюанс заключается в том, что перед расчетом нужно обнулить поле с принятым значением, предварительно сохранив его в локальную переменную для последующего сравнения:

Опять же в случае корректности, то есть совпадения значений, продолжаем работать с принятыми данными. В frameLen на данный момент полная длина IP пакета (включая заголовок). Рассчитаем размер поля данных (dataLen), который будем использовать в дальнейшем. Поскольку у нас в планах также протокол ICMP, проверим поле protocol заголовка IP:

В это специально и предусмотрительно отведенное место мы впоследствии поместим обработку ICMP фреймов, а пока закончим с IP… Предполагая, что newDataLen будет изменено впоследствии в части ICMP, рассчитываем обновленную длину полного IP пакета и заносим ее в ipFrame->len:

Фрагментацию пакетов не затрагиваем, так что:

Меняем местами IP-адреса отправителя и получателя, а точнее в IP отправителя заносим наш адрес — ipAddr. Завершаем формирование пакета подсчетом контрольной суммы:

На этом все. Идем на уровень ниже, в файл ethernet.c, в функцию ETH_Process() и по аналогичному с ARP принципу осуществляем обработку IP пакетов:

Разобрались с пакетами IP, теперь разберемся и с содержащимися в них данными. И как уже обсудили, в первую очередь, уделим внимание ICMP.

Протокол ICMP.

Суть формирования пакетов остается такой же, как мы обсудили в предыдущей части:

Протоколы Ethernet, IP, ICMP.

Обработав IP пакет, извлекаем из него данные, который уже являются ICMP пакетом, так же имеющим свой собственный заголовок. Формат ICMP пакета таков:

Формат пакета протокола ICMP.

Снова проходим по полям заголовка в обозначенном порядке:

  • Type — тип пакета. На данный момент наша область интереса: эхо-запрос — код 0x08, эхо-ответ — код 0x00.
  • Code — в кооперации с полем Type дает полную информацию о типе пакета. И для эхо-запроса, и для ответа код — 0x00. А, например, если ICMP пакет сигнализирует о недостижимости узла, то: Type = 0x03, Code = 0x01. Если смысл пакета в недостижимости порта, то уже так: Type = 0x03, Code = 0x03. В общем, суть такая.
  • Checksum — контрольная сумма. Рассчитывается также, как и для IP пакета.

ICMP эхо-запрос.

При формировании ответа на эхо-запрос мы будем менять только поле Type. Снова возвращаемся к проекту, добавляем файлы и определяем структуру для хранения специализированных данных:

STM32, протокол ICMP.

Придерживаемся устоявшейся архитектуры, добавляем функцию ICMP_Process():

Алгоритм схож с рассмотренным ранее для IP пакетов, так что не буду даже отдельно описывать 🙂 По итогу мы имеем обработанный пакет, готовый к последующей отправке. Остается в заранее подготовленном месте осуществить вызов ныне добавленной функции:

Систематизируя графически реализованное, получаем:

Работа с сетью на микроконтроллере STM32.

Собираем проект, прошиваем и анализируем полученный результат, отправляя команду ping на наш ip:

Запуск проекта.

Все пошло по плану, наблюдаем успешные ответы от узла. Аналогично, можно посмотреть в WireShark:

WireShark, прием ICMP пакетов

Вишенка на торте — посмотрим на принятые байты. Поставим брейк-поинт, к примеру, здесь:

STM32, отладка Ethernet.

И далее осуществляем анализ имеющихся байтов:

Протокол IP и ICMP.

Поля контрольных сумм нулевые, поскольку мы их собственноручно обнулили в коде. Собственно, вот и все, на этом на сегодня заканчиваем! 👋

Читайте также: