Понимание протокола TCP/IP (часть 1)
Присоединился к бедру
Я уверен, что многие системные администраторы знакомы с набором протоколов TCP/IP. Кроме того, многие из нас также привыкли смотреть на пакеты, состоящие как из протоколов TCP, так и из протоколов IP. Большой объем трафика, они оба в нем, так что они могут считаться соединенными на бедре из-за отсутствия лучшего термина. Таким образом, большая часть интернет-трафика, который мы видим сегодня, в значительной степени состоит из TCP и IP, пересылаемых по любому протоколу прикладного уровня, который они могут нести. При этом, как многие из нас помнят, компьютерный мир состоит не только из протоколов прикладного уровня и вышеупомянутых протоколов TCP и IP, которые их несут. Эта вступительная статья из трех частей расскажет вам, что именно происходит в заголовке TCP и IP.
Однако существует довольно много других протоколов, которые не находятся на прикладном, транспортном или сетевом уровне. Хотя вы можете спросить себя: «Какого черта он говорит об эталонной модели OSI, разве эта статья не о протоколах!?» Проще говоря, использование эталонной модели OSI в качестве нашего шаблона даст нам отличный способ сопоставления протоколов с конкретными уровнями. По сути, это позволяет нам привести в порядок то, что может быстро превратиться в неповоротливого зверя; понимание связи между компьютерами. Подумайте об этом так: используя скелетную схему модели OSI, мы можем добавлять к ней кусочки, что позволит нам конкретизировать ее. Если мы будем использовать эталонную модель OSI таким образом, наша жизнь как профессионалов в области сетевых технологий действительно упростится.
Давай кровавые подробности!
Любой из вас, системных администраторов, читающих эту статью, вероятно, знаком с инструментом ethereal. Что делает этот инструмент, так это разбивает для вас содержимое пакета и сопоставляет все найденные в нем шестнадцатеричные значения. Не только это, но и название этих значений. Какие ценности вы спрашиваете? Ну хороший вопрос! Такие значения, как размер выигрыша, значения ttl и mss, среди прочего. Эти термины могут показаться вам немного загадочными прямо сейчас, но будьте уверены, что вскоре вы их поймете. Я всегда любил детали и такие показатели, как. Потому что это именно те детали, которые мы должны понимать, чтобы получить глубокое понимание TCP/IP.
Объяснение таких сложных понятий, как тонкости TCP/IP, может оказаться непростой задачей. Не говоря уже о читателе, пытающемся понять весь сухой текст. Имея это в виду, я всегда стараюсь давать визуальные подсказки. Это помогает читателю понять контекст всех новых слов и терминов, с которыми он сталкивается. Ранее я упоминал об инструменте ethereal и о том, что он отлично справляется с разбивкой пакетов. Ну, если честно, вам лучше не использовать такой инструмент при первом изучении содержимого пакета. Гораздо лучше попытаться сделать это вручную. Один из лучших ресурсов, которые мне удалось найти на сегодняшний день, — это брошюра по TCP/IP и tcpdump, предоставленная институтом SANS. Просто посмотрите на нижнюю часть страницы, предоставленную гиперссылкой, и вы увидите флаер. Он находится в категории «Дополнительные ресурсы».
Вся информация, содержащаяся в проспекте TCP/IP и tcpdump, будет использована в этой серии из двух частей. Этот документ, проще говоря, лучший в своем роде на сегодняшний день. Все, что вам нужно сделать, это просто следовать разбивке пакета, как он излагает его для вас. Не только это, но и сами показатели также получают краткое объяснение внизу страницы. Вы также заметите в нижней части страницы, что есть также много опций, связанных с указанным протоколом. Перечисленные там параметры очень удобны, так как многие из них могут показаться вам очень загадочными. Наконец, обратите внимание, что размер опции в байтах также указан перед самой опцией.
Увидим ли мы когда-нибудь настоящий пакет!
«Терпение — это добродетель, на овладение которой уходит слишком много времени» — мой девиз! При этом пусть появится упомянутый пакет. То, что вы видите ниже, — это два пакета, которые были перехвачены по сети с помощью такой программы, как windump, для работы которой требовался winpcap.
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/ACK. Эти два пакета фактически представляют собой две трети рукопожатия TCP/IP. Вы можете заметить, что оставшаяся часть рукопожатия, т.е. пакет ACK отсутствует. Проще говоря, не все операционные системы фактически используют последнюю часть рукопожатия для установления связи. Поэтому, чтобы все было максимально реалистично, я перечислил только те части рукопожатия, которые вы обычно видите.
Еще подробнее
Поскольку это начало канала связи между двумя компьютерами, у нас есть различные метрики, отправленные каждой половиной сокета, который скоро будет завершен. Эти показатели сообщают каждому компьютеру, какую информацию он может получить, но, что более важно, также и то, сколько информации он может получить в любой момент времени. Также есть значения, которые видны только при первоначальной настройке связи. Такие значения, как mss, не будут отображаться в реальных пакетах PSH/ACK.
Если вы когда-нибудь задавались вопросом, как люди могут определить, какую именно операционную систему вы используете, это делается путем чтения тех же метрик пакетов. На случай, если вы не знали, что во всех операционных системах значения по умолчанию запрограммированы в их стеке TCP/IP. Эти значения никогда не меняются, если только они не изменены вручную. Поэтому, основываясь на этих жестко заданных значениях по умолчанию, можно довольно точно предположить, какая операционная система используется.
Что ж, со всей этой необходимой справочной информацией мы готовы фактически просмотреть содержимое пакета. Охвачено будет абсолютно все, что вы видите выше в двух пакетах. От временной метки пакета до последней части шестнадцатеричного кода в нем. На этой ноте я сердечно прощаюсь с вами и до встречи во второй части этой статьи, где вы найдете грязную информацию о TCP/IP. До тех пор!