Понимание протокола TCP/IP (часть 2)

Опубликовано: 25 Марта, 2023

Ну, мы остановились в первой части с двумя пакетами для просмотра. Эти два пакета, как показано ниже, являются частями SYN и SYN/ACK трехэтапного рукопожатия. ACK не включен, так как некоторые операционные системы пропускают его и переходят непосредственно к обмену данными. На этой ноте начнем разрывать наши пакеты!

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………


Для наших целей мы будем называть пакет SYN первым пакетом. Если вам интересно, SYN на самом деле означает «синхронизировать», а SYN/ACK означает «подтверждение синхронизации». Начиная с первого пакета, мы будем двигаться слева направо до конца.

00:00:03.700720

Вышеупомянутое является временной меткой пакета. У нас есть обычные чч мм сс, как видно, но у нас также есть шесть цифр после этого. Это означает, что это время с точностью до микросекунды. Довольно точно, не так ли! Здесь важно помнить, что это не время отправки пакета. Скорее это время, когда пакет был получен компьютером назначения. С другой стороны, конечный компьютер может быть настроен на другой часовой пояс, чем ваш. Другими словами, не предполагайте автоматически, что время совпадает с вашим местным временем.

192.168.1.100.11955

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

>

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

192.168.1.200.80

Итак, мы видим, что вышеприведенный IP-адрес. Вопрос: это IP-адрес исходного компьютера, т.е. отправитель, или адрес назначения? Вы можете принять как истину, что этот IP-адрес является адресом конечного компьютера. Это потому, что, как упоминалось выше, он находится на остром конце моего символа направления. После IP-адреса целевого компьютера указывается порт назначения, используемый этим же компьютером. В данном случае у нас есть порт 80, и мы, вероятно, можем смело предположить, что это какой-то веб-сервер на этом компьютере. В это время обратите внимание, что порт 80 попадает в «зарезервированный» диапазон портов. Этот диапазон начинается с порта 0 и заканчивается портом 1024. Не со всеми портами в этом зарезервированном диапазоне связаны известные службы, но тем не менее он называется зарезервированным диапазоном.

С

Символ ASCII S, как показано выше, означает SYN, или, как мы теперь знаем, «синхронизировать». Это означает, что этот пакет является самым первым шагом в нашем рукопожатии TCP/IP.

[сумма TCP в порядке]

Вышеприведенное означает «Контрольная сумма TCP в порядке». На самом деле это означает, что когда исходный компьютер отправлял этот пакет, он выполнял математическую проверку заголовка TCP и выдавал значение. Затем это значение сохранялось в самом заголовке TCP. Как только компьютер назначения получил этот пакет, он, в свою очередь, также выполнил ту же математическую проверку. Затем он проверил, что его значение совпадает со значением, которое он видит в заголовке TCP. В данном случае это было так, следовательно, [tcp sum ok]. Если бы это значение было другим, вместо этого вы бы увидели сообщение об ошибке контрольной суммы.

365712315:365712315

Это довольно большое число, разделенное полным двоеточием, называется порядковым номером TCP. Вы заметите, что в нашем случае это одно и то же значение, разделенное полным двоеточием. Это связано с тем, что в данный момент нет обмена данными. Если бы были данные, а этот пакет был бы PSH/ACK вместо пакета SYN, тогда значения были бы разными по обе стороны от двоеточия. Если быть точным, это будет отличаться от точного количества данных, отправленных в этом пакете. Чуть позже мы увидим пример того, что я имею в виду.

(0)

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

выиграть 32768

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

Если он получит больше, чем это, без ACK от него, означающего, что он обработал определенный объем данных, то эти дополнительные байты, которые были отправлены, просто попали бы в битовое ведро. По сути, они не будут храниться в приемном буфере приложения. Самое время указать, что это значение обычно контролируется используемым приложением. Например, это значение может быть Win Size Internet Explorer.

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