
запрос уникальным номером, который отправитель эхо-ответа мог бы
цитировать с тем, чтобы получатель ответов мог отличать ответы, посланные на
разные запросы. Пусть приложение, посылающее ICMP эхо-запросы, снабжает
каждый из них номером, но и этого не достаточно - возможна ситуация, когда на
одной станции запущено несколько посылающих такие пакеты приложений,
поэтому желательно, чтобы каждое приложение отмечало свои пакеты таким
образом, чтоб ответы получало только это приложение, т.е. приложение
пославшее запрос. Это с одной стороны избавит каждое приложение от анализа
ответов, поступившим всем остальным приложениям, использующим ICMP эхо-
запросы, а с другой стороны исключит неприятные последствия случайного
совпадения номеров, установленных в запросах разными приложениями.
Итак, в ICMP сообщениях типа 8 и 0 необходимо два дополнительных поля,
для адресации приложения, пославшего эхо-запрос и для нумерации запросов,
посланных одним приложением. Для этого используются зарезервированные
поля ICMP заголовка. Рассмотрим ICMP заголовок для сообщений типа 8 и 0:
Type = 8 или 0
Code = 0
Checksum
Identifier
Sequence Number
Произвольные данные произвольной длины
Поле Identifier предназначено для адресации приложения, пославшего эхо-
запросы и получающего эхо-ответы, поле Sequence Number позволяет
приложению, посылающему эхо-запросы, присваивать каждому посланному
сообщению уникальный номер. Таким образом, заголовок ICMP эхо-запроса и
ICMP эхо-ответа использует все восемь байт заголовка ICMP.
Кроме проверки возможности обмениваться пакетами в IP сети, так же
часто
бывает
полезным
проверить
возможность
передавать
пакеты
необходимого размера. Это очень легко сделать с помощью ICMP эхо-запросов и
ответов: в пакете ICMP есть поле данных, которое отправитель запроса может
заполнить произвольным количеством произвольных байт, создав пакет
желаемого размера.
Как должен поступить стек TCP/IP, получив ICMP сообщение типа 8 с кодом
0? Необходимо сформировать ICMP пакет с типом 0 и кодом 0, процитировать из
полученного запроса поля Identifier и Sequence Number, процитировать все
данные, которые получены в запросе, сформировать IP пакет, поменяв местами
адрес отправителя и получателя и вложить в него данное, сформированное ICMP
сообщение.
Для диагностики с помощью ICMP сообщений типов 8 и 0 в Windows, как в
любой операционной системе, поддерживающей TCP/IP, есть утилита обычно
называемая ping, которая умеет посылать эхо-запросы и анализировать эхо-
ответы. Рассмотрим пример посылки пакетов с помощью утилиты ping:
C:\>ping www.alkar.net
Обмен пакетами с www.alkar.net [195.248.190.51] по 32 байт:
Ответ от 195.248.190.51: число байт=32 время=345мс TTL=58
Ответ от 195.248.190.51: число байт=32 время=319мс TTL=58
Ответ от 195.248.190.51: число байт=32 время=113мс TTL=58
Ответ от 195.248.190.51: число байт=32 время=361мс TTL=58