Кодирование и декодирование IP, TCP, UDP, ICMP заоговоков в Asio

В этом примере icmp/ping.cpp при отправке ICMP эхо-запроса кодируется и отправляется только ICMP заголовок, а при получении декодируется сначала IPv4 заголовок, а затем ICMP заголовок. На сколько понял, ICMP очень тесно связан с IP, и по сути является его расширением (поправьте, если не прав). Понятно, что, видимо, Asio берёт на себя формирование IP заголовков. Но сразу возникает пара вопросов:

  1. Возможно ли формировать IP заголовки самому для ip::icmp, ip::tcp, ip::udp классов?
  2. Возможно ли читать IP и, соответственно, TCP и UDP заголовки, используя ip::tcp и ip::udp классы?

Предположим, я хочу реализовать TCP-пингер, т.к. ICMP не может пинговать порты конкретного устройства, а только само устройство. По идее, мне точно также нужно будет сначала декодировать IP заголовок. Но, имея небольшой опыт в работе с ip::tcp классом, я знаю, что можно отправлять HTTP(S) запросы просто как текстовое сообщение, разделяя заголовки \r\n и заканчивая их \r\n\r\n. Т.е. Asio, в этом случае, берет на себя не только формирование IP заголовка, но и TCP заголовка. Хотя, судя по всему, ICMP заголовок Asio самостоятельно не формирует...

Буду признателен за разъяснение данной неопределенности тем, кто лучше меня разбирается в сетевых технологиях и Boost.Asio. Спасибо.


Ответы (0 шт):