Internet Fundamentals: A Tale of Two Standards

Всем привет!

Если вы читали мои предыдущие статьи про OSI модель, то у вас, надеюсь, сложилось более-менее общее представление о функционировании сети, но как это все относится к TCP/IP ? Мы попытаемся углубиться еще на один шаг, осознав концепцию двух адресов. Как IP-адрес и MAC-адрес работают вместе? Если вы хотите понять, как работает session hijacking и все подобного рода кульные штуки, то вам необходимо это знать. Погнали, друзья!

OSI, TCP and What’s Going on Here?

Хороший способ понять, что такое протокол, это рассмотреть его, как язык. Если бы люди были сетевыми интерфейсами, и все говорили на своем языке, то не было бы никакой возможности им общаться и правильно понимать друг друга. Протокол работает схожим образом. Согласившись на использование определенных методов и стандартов, многие группы могут строить и создавать вещи, которые все могут общаться друг с другом. Итак, когда вы видите TCP/IP protocol, понимайте под этим набор определенных правил, чтобы машины могли взаимодействовать друг с другом в сети.

OSI модель используется до сих пор для «идеального» описания сетевых коммуникаций и классификации стандартов по уровням, в то время как TCP модель используется, чтобы показать связь между различными протоколами, которые она содержит. Ниже приведена диаграмма, как TCP и OSI модели соотносятся друг с другом.

hacker-fundamentals-tale-two-standards.w654

Первое, что вы должны заметить, TCP/IP это не один протокол, а целый набор протоколов. Далее следует заметить, что уровни (layers) TCP/IP архитектуры и OSI модели выстраиваются более или менее похожим образом.

Первый и второй уровни OSI модели считаются физическими и группируются вместе как Network Interface Layer в TCP/IP. Network layer всего лишь переименовывается в Internet Layer и несет те же функции. Продолжая далее, вы можете видеть, что с пятого по седьмой уровни модели OSI были сведены в Application layer.

The TCP/IP Suite

Когда мы говорим о TCP/IP Suite, мы подразумеваем FTP, DNS и другие протоколы, о которых вы, возможно, слышали и читали раньше. Опять же, глядя на картинку выше, мы можем видеть примеры протоколов, использующихся на каждом уровне.

Целая книга может быть написана про TCP/IP suite, и они уже есть. Поэтому, чтобы остаться в фокусе, мы обсудим только несколько протоколов.

Хорошим примером является транспортный уровень обеих моделей OSI и TCP. Когда данные приходят на этот уровень, существует два варианта для их дальнейшей транспортировки, TCP и UDP. TCP обеспечивает надежность транзита, в то время как UDP является ненадежным. Я уже писал раньше статью про транспортный уровень.

TCP vs. UDP

В очень кратких словах, когда вы отправляете запрос по TCP, вы всегда получите подтверждение о его получении. Представьте себе такую аналогию: я кидаю вам мяч, вы кричите: «я поймал его!», затем бросаете его обратно мне, и я кричу в ответ: «я поймал его». Но что было бы, если я уронил его? Я бы просто прокричал: «Кинь мне его еще раз!», и ждал, пока вы не бросите мне его.

UDP работает прямо противоположным образом: вы бросаете мяч за мячом и только надеетесь, что я поймал их. Если я уронил один или шестнадцать — это не имеет значения — потому что у вас нет возможности это узнать.

UDP звучит сейчас довольно плохо, однако такие сервисы как VOIP и онлайн игры слишком быстры для TCP. Представьте, что вы играете в Halo, и у вас дропнулся один пакет или два. Можете ли вы остановиться и ждать его? Конечно нет. Вы бы увидели маленький скачок в частоте кадров и продолжили дальше. Если бы вам пришлось ждать его, вас бы уже давно фрагнули. То же самое относится, если бы вы разговаривали со своим приятелем по Skype, и дропнулось несколько пакетов. Не имеет никакого смысла приостанавливать разговор, чтобы получить их.

hacker-fundamentals-tale-two-standards.w655

TCP крут, когда вам нужно убедиться, что все пакеты дошли и в нужном порядке. Просмотр веб-страниц был бы ужасно сложным, не имея надежную транспортировку пакетов.

IP and MAC Addresses

Каждый пакет, посылаемый вокруг, имеет два адреса внутри — Internet Protocol и Media Access Control адрес. IP-адрес фактически только идентифицирует вашу сеть, так как все внутренние(серые) IP-адреса обрабатываются NAT‘ом (Network Address Translation) на роутере. Вы скорее всего имеете IP-адрес от провайдера, к примеру, 201.95.87.98, который идентифицирует вашу сеть, а ваш компьютер имеет имеет частный, внутри-сетевой адрес, к примеру, 192.168.1.67.

Это делается для того, чтобы многие устройства, как ваш Play Station и компьютер, могли получить доступ в интернет в одно и то же время, при этом нуждаясь только в одном (внешнем) IP-адресе. Если бы каждый прибор сегодня имел свой собственный адрес, мы бы уже давно вышли за доступный интервал IP-адресов!

hacker-fundamentals-tale-two-standards.w656

Итак, где же MAC-адреса начинают играть роль? Дело в том, что «как есть» ваши IP-адреса не используются в локальной сети, так как ваши машины не используют их, чтобы напрямую общаться друг с другом.

В то время как IP-адресация функционирует на сетевом уровне, MAC-адресация работает на канальном уровне. Можно считать, что IP-адресация — это программная (software) реализация адресов в сети, а MAC-адресация — аппаратная (hardware) реализация. MAC-адрес как правило остается неизменным и соответствует сетевому устройству, но IP-адрес меняется, когда устройство перемещается из одной сети в другую или даже может меняться, находясь в одной и той же сети.

Так, как в мире это действительно работает? Ваша сеть хранит соответствия между IP-адресом устройства и его MAC-адресом. Эти соответствия хранятся в таблице, которая называется ARP таблицей.

Putting It All Together: Address Resolution Protocol

ARP обозначает Address Resolution Protocol и используется, чтобы связать Network layer адрес (IP-адрес) с Data Link (канальный) layer адресом (MAC-адрес)

Скажем, у вас есть данные для отправки. Когда данные попадают в сетевой уровень, им будет приписан destination IP-адрес (адрес назначения). Вся эта информация (Network layer datagram иначе пакет) передается ниже на канальный уровень, где она помещается в фрейм канального уровня.

На основании IP-адреса и маски подсети, ваш компьютер должен быть в состоянии выяснить, является ли destination IP-адрес локальным для вашей сети или нет. Если IP локальный, то ваш компьютер будет искать его в своей ARP таблице, где ответы на предыдущие ARP запросы кэшируются, чтобы найти соответствующий MAC-адрес.

Если его там нет, то ваш компьютер будет broadcast’ить ARP request, чтобы выяснить MAC-адрес для destination IP. Так как это широковещательный запрос, все машины в сети будут получать его и изучать содержимое. Если IP-адрес в запросе является их собственным, они ответят назад. По получении этой информации ваш компьютер обновит свою ARP таблицу, включив в нее новую запись, и затем пошлет фрейм, адресованный MAC-адресом, который соответствует destination IP.

Более подробно про ARP можно прочитать в моей прошлой статье.

Хотите узнать больше технических компонентов UDP, ARP и TCP? Ознакомьтесь с этими официальными RFC документами, описывающими протоколы.

На этом пока все! Уже скоро мы приступим к веселой практике, осталось еще совсем немного 🙂

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s