Понимание протокола TCP/IP (часть 3)
00:00:03.700720 192.168.1.100.11955 > 192.168.1.200.80: S [tcp sum ok] 365712315:365712315(0) win 32768 <mss 536> (ttl 63, id 59169, len 44)
0x0000 4500 002c e721 0000 3f06 4253 c0a8 0164 E..,.!..?.BS….
0x0010 c0a8 01c8 2eb3 0050 15cc 53bb 0000 0000 …1…P..S…..
0x0020 6002 8000 30e0 0000 0204 0218 0000 `…0………00:00:03.715864 192.168.1.200.80 > 192.168.1.100.11955: S [tcp sum ok] 2093803204:2093803204(0) ack 365712316 win 5840 <mss 1460> (DF) (id 4, 52, DF)
0x0000 4500 002c 0000 4000 3406 f474 c0a8 01c8 E..,[email protected]…1
0x0010 c0a8 0164 0050 2eb3 7ccc e6c4 15cc 53bc …..P..|…..S.
0x0020 6012 16d0 32d2 0000 0204 05b4 0000 `…2………
Выше хорошо видны те же два пакета, с которыми мы работали. Во второй части мы остановились на показателе размера выигрыша. На этой ноте давайте поднимем его обратно и продолжим наш анализ.
<mss 536>
Вышеупомянутое на самом деле означает «максимальный размер сегмента» или mss, как его обычно называют. За ним следует значение 536, которое относится к значению mss. Все сказано и сделано, это означает, что исходный компьютер, т.е.: 192.168.1.100
не хочет получать более 536 байт данных в одном пакете. Это довольно низкое значение для mss, поскольку mtu (максимальная единица передачи) для Ethernet составляет 1540. Хотя обратите внимание, что часто Internet Explorer объявляет mss по умолчанию, равный 536, как показано выше. Также помните, что значение mss можно увидеть только в сегменте SYN. Если по какой-то причине источник не отправил значение mss, предполагается значение по умолчанию 536 байт.
(ttl 63, id 59169, длина 44)
Первое значение ttl 63 на самом деле обозначает «время жизни», которое есть у пакета. Это означает, что если бы этот пакет прошел через еще 63 перехода маршрутизатора, то он был бы отброшен. Это, в свою очередь, привело бы к генерированию сообщения об ошибке ICMP последним маршрутизатором для уменьшения этого значения. Это одна из метрик, которая не измеряется в байтах. Это просто числовое значение, которое уменьшается каждый раз, когда он проходит через маршрутизатор. Если бы не было значений ttl, то Интернет, вероятно, в какой-то момент остановился бы. Иногда случается, что пакеты теряются из-за отсутствия лучшего термина. Это значение гарантирует, что в какой-то момент пакет либо будет доставлен, либо отброшен.
идентификатор 59169
Следующая в нашем хит-параде метрика показана выше. Это означает, что номер IP ID равен 59169. И что именно это означает!? Ну, это означает, что если этот пакет по какой-то причине будет фрагментирован, то каждый фрагмент будет иметь один и тот же номер IP ID. В этом случае все фрагменты будут иметь IP-идентификатор 59169.
Это связано с тем, что когда компьютер назначения получает фрагментированный пакет, он знает, какие фрагменты принадлежат друг другу. Однако есть еще одно значение, которое будет включено, и это смещение фрагментации. Это смещение позволит компьютеру узнать, в каком порядке должны быть пакеты. В конце концов, нет смысла иметь все фрагменты, если вы не знаете, в каком порядке они идут.
только 44
Теперь окончательное значение, содержащееся в заголовке, равно len 44. Это относится к общей длине самого пакета. Этот счетчик, измеряемый в байтах, учитывает не только заголовок TCP и IP. Он также будет включать данные, которые были отправлены, если таковые имеются. Это важное различие, и его следует помнить.
Что ж, теперь это все метрики заголовков, которые можно просмотреть в ASCII. Сейчас мы находимся на этапе, когда мы начнем рассматривать довольно загадочные шестнадцатеричные значения. Обратите внимание, что здесь требуется листовка TCP/IP и tcpdump, о которой я упоминал в первой части. Наконец, чтобы найти этот документ, посмотрите в нижней части страницы в разделе ресурсов документ в формате pdf с таким же названием, как и гиперссылка. Что мы сейчас сделаем, так это пройдемся по гексу по одной строке за раз. Итак, в этой заметке я вставлю одну строку и прокомментирую ее под ней.
0x0000 4500 002c e721 0000 3f06 4253 c0a8 0164 E..,.!..?.BS….
Наше первое значение, как показано выше, — 0x0000, и это означает, что значение, следующее за 0x, будет в шестнадцатеричном формате нумерации. Самое смешное здесь то, что нам нужно считать, начиная с нуля, а обычно начиная с единицы. Еще одна вещь, которую очень важно помнить! Таким образом, наш нулевой байт будет фактически представлен символами 45, как показано выше. Теперь мы можем видеть, что если вы хотите посмотреть на один фрагмент, то это будет только один символ, будь то число или буква. Не забывайте, что шестнадцатеричная система счисления использует как буквы, так и цифры, т.е.: 0-9, AF.
Итак, во что на самом деле входит наш первый байт или нулевой байт? Что ж, если вы посмотрите на лист TCP/IP, то заметите, что версии IP присвоено четыре бита или полубайт. Этот фрагмент в данном случае представлен значением 4. Таким образом, это говорит нам о том, что этот пакет использует IPv4.
Далее следует IHL или длина интернет-заголовка. Это значение представляет количество 32-битных слов в заголовке IP. Если мы разделим 32 на 8, то поймем, что 32-битное слово на самом деле состоит из четырех байтов. Значение, которое у нас здесь, равно пяти, и если мы умножим его на четыре, то получим 20 байтов в заголовке IP. На самом деле это стандартный IP-заголовок, причем стандартный, поскольку в нем не заданы параметры IP. Если бы были параметры IP, такие как свободный маршрут исходной записи, значение пять было бы соответствующим образом изменено.
Ну, мы можем видеть, что это довольно просто вырваться, учитывая нашу шпаргалку TCP/IP. Имея это в виду, я перейду к заголовку TCP. Причина, по которой я это делаю, заключается в том, что в первом пакете содержатся опции TCP. Пожалуйста, помните, что первый пакет относится к упомянутому выше пакету SYN, а не к пакету SYN/ACK, показанному под ним.
0x0020 6002 8000 30e0 0000 0204 0218 0000 `…0………
В частности, из приведенной выше последней строки шестнадцатеричного кода в первом пакете находятся значения от 0204 до 0000, которые мы рассмотрим. Поскольку, как я упоминал выше, именно здесь подробно описаны параметры TCP. В это время, пожалуйста, взгляните на нижнюю часть шпаргалки по заголовку TCP и посмотрите сегмент опций.
При этом наши параметры TCP начинаются с двух байтов 0204, указанных выше во фрагменте пакета. Это означает, что первой опцией TCP в этом заголовке TCP является mss или максимальный размер сегмента. Это значение, равное двум, соответствует mss, как показано в нижней части скачанной вами шпаргалки по заголовку TCP в разделе параметров. Затем у нас есть размер в байтах этой опции TCP, который является длиной опции. В данном случае это четыре байта. После этого 0218, и это в шестнадцатеричном эквиваленте соответствует 536 в десятичном виде. Это значение параметра mss. Если параметр TCP имеет числовое значение, он будет следовать за ним, как в данном случае. Наконец, есть 0000. Забавно, что наша общая длина пакета предполагается равной 44, что обозначается как «len 44». В этом случае все, что произошло, это то, что сетевая карта, вероятно, добавила два дополнительных байта.
Что ж, как вы можете видеть из этих статей, понять как TCP, так и IP на самом деле не так уж и сложно. Все, что для этого требуется, — это немного практики, и вскоре вы будете разбирать их, как если бы вы были местными жителями. Я искренне надеюсь, что это было полезно для вас, и, как всегда, приветствую любые комментарии.