Как работает интернет
Далее мы обсудим основные протоколы, которые определяют коммуникацию между устройствами, подключенными к интернету.
Интернет похож на луковицу
У интернета есть уровни. Разные протоколы, отвечающие за коммуникацию, можно сгруппировать в 4 уровня.
- Канальный уровень
- Интернет-/сетевой уровень
- Транспортный уровень
- Прикладной уровень
Протоколы канального уровня отвечают за прямую коммуникацию между двумя сущностями по одному и тому же каналу. Например, протокол, отвечающий з а связь между ноутбуком и WiFi-маршрутизатором, задает частоту и то, как биты передаются на этой частоте. На другом конце находятся протоколы прикладного уровня, которые задают общий язык между двумя приложениями, обменивающимися информацией. Например, протокол HTTP описывает, как веб-браузер должен запрашивать информацию у веб-сервера.
Обратите внимание, что верхним уровням не важно, как реализованы нижние уровни, если нижние уровни предоставляют определенные сервисы: HTTP не важно, идет ли соединение через беспроводную связь, кабель RJ-45, смартфон или сочетание нескольких вариантов. Аналогично нижним уровням, по крайней мере в теории, не важна полезная нагрузка прикладного уровня.
Сейчас нас в первую очередь интересуют интернет-уровень и транспортный уровень.
Интернет-уровень и протокол IP
Ключевой протокол сетевого уровня — Internet Protocol (IP). IP-пакет состоит из полезной нагрузки и заголовка. Аналогия из реальной жизни — письмо: заголовок — это конверт, а полезная нагрузка — содержимое письма.
Протокол задает несколько фундаментальных вещей.
Во-первых, и это самое важное, каждому устройству в сети назначается IP-адрес. В IPv4 адрес состоит из 4 байтов, то есть чисел в диапазоне 0—255. Частично из-за плохого управления IP-адреса, использующие только 4 байта, почти закончились, поэтому был введен новый протокол IPv6, использующий 32 байта для адреса. Оба протокола используются, но IPv4 все еще остается доминирующим протоколом по состоянию на 2020 год.
Протокол IP позволяет фрагментировать пакеты данных, если нижележащий уровень имеет ограниченный размер пакета, меньший, чем полезная нагрузка. То есть если полезная нагрузка больше того, что канальный уровень может передать в одном пакете, протокол IP разрежет пакет на более мелкие фрагменты и передаст их по отдельности. Максимальный размер одного IP-пакета — 65535 байт, из которых 20 байт занимает IP-заголовок. Наивные реализации IP-фрагментации допускали эксплойты, такие как атаки отказа в обслуживании.
IP также предоставляет контрольную сумму, чтобы убедиться, что полезная нагрузка не была повреждена. Обратите вни мание, что цель этой контрольной суммы — защитить от непреднамеренных ошибок, например из-за шумного нижлежащего канала связи. Если пакет изменен атакующим, вычислить новую действительную контрольную сумму для этого конкретного пакета тривиально.
Когда устройство, будь то конечный хост или маршрутизатор, замечает поврежденный IP-пакет, оно отбрасывает его и отправляет сообщение об ошибке обратно.
Обратите внимание, что протокол IP напрямую не говорит, как доставить пакет. Решение принимает алгоритм IP-маршрутизации на маршрутизаторе. Основная идея такого алгоритма состоит в том, что маршрутизатор изучает IP-адрес и сравнивает его с таблицей маршрутизации. Таблицу маршрутизации можно рассматривать как набор устройств, маршрутизаторов или хостов, подключенных к маршрутизатору, где с каждым устройством связан диапазон IP-адресов. Если целевой IP попадает в диапазон, пакет передается следующему маршрутизатору или хосту, связанному с этим диапазоном. Таблицы маршрутизации могут быть статическими, то есть записанными вручную, или динамическими, использующими различные протоколы для поддержания актуальности.
Маршрутизация в интернете спроектирована так, что если самый распространенный и оптимальный канал связи нарушен, маршрутизатор попытается установить новый, менее удачный маршрут. Однако если нарушены все линии связи, восстановить соединение уже невозможно.
В IP-заголовке есть поле protocol, указывающее тип доставляемой полезной нагрузки. Например, протокол может указать, что полезная нагрузка является пакетом TCP, этот протокол мы обсудим позже, или пакетами, связанными с алгоритмами обнаружения маршрутов.
Заметный пример среди таких протоколов — Internet Control Message Protocol (ICMP). Этот протокол используется для отправки ошибок и информации о коммуникационной сети. Самое известное и одновременно печально известное применение ICMP — Ping, сетевая утилита для проверки того, достижим ли конкретный хост и сколько времени занимает обращение к нему. Классическая атака отказа в обслуживании (DoS), Ping Flood, заключается в заполнении жертвы большим числом ping-запросов в надежде перегрузить компьютер жертвы. Другая атака — Ping of Death, которая на самом деле является атакой IP-фрагментации с ICMP в качестве полезной нагрузки.
Протокол IP не заботится о специфике нижних уровней, кроме случаев, когда нужно определить необходимость фрагментации. Фактически IP можно было бы использовать поверх почтовых голубей.
Транспортный уровень: TCP и UDP
У IP отсутствует несколько ключевых возможностей, из-за чего его нельзя напрямую использовать.
Во-первых, IP не различает разные приложения на одном хосте. Например, если у пользователя открыто SSH-подключение к оболочке и он загружает веб-страницу через браузер, у IP нет средств направить входящие данные в веб-браузер вместо оболочки.
Во-вторых, IP не хранит состояние, то есть каждый пакет обрабатывается отдельно. Это означает, что хотя IP предоставляет некоторую защиту от поврежденных пакетов, он не гарантирует, что пакеты придут по порядку. Более того, пакеты могут дублироваться. Наконец, если пакет по какой-либо причине потерян, IP не предоставляет надежного механизма п овторной отправки пакета.
Протокол управления передачей (Transmission Control Protocol, TCP) решает эти проблемы.
TCP-соединение устанавливается между двумя агентами: сервер ожидает соединения, а клиент инициирует соединение. Здесь сервером может быть веб-сервер, а клиентом — веб-браузер.
TCP имеет состояние: при подключении клиент и сервер выполняют протокол рукопожатия, в ходе которого несколько пакетов отправляются туда и обратно, чтобы убедиться, что обе стороны согласованы. Целостность потока данных поддерживается счетчиками с обеих сторон и отправкой пакета подтверждения каждый раз, когда приходит пакет данных. Если отправитель не получает подтверждение для пакета данных в течение определенного времени, он отправляет пакет повторно.
TCP также вводит понятие порта: у каждого соединения есть два порта, по одному на каждой стороне. Порт — это целое число от 0 до 65535. Сервер обычно ожидает нового соединения на хорошо известном порту. Порты по умолчанию для широко используемых протоколов хорошо установлены и обычно являются небольшими числами, например HTTP использует порт 80. Клиенту также нужен собственный порт. Такие порты обычно являются большими числами, автоматически выбранными операционной системой на основе доступных портов.
TCP предоставляет надежное соединение потока данных между двумя устройствами. Недостаток протокола — существенные накладные расходы, особенно из-за пакетов подтверждения. Такая задержка неприемлема в некоторых приложениях реального времени, например в онлайн-играх. Альтернатива TCP — протокол пользовательских датаграмм (User Datagram Protocol, UDP), простой протокол, предоставляющий порты и необязательную контрольную сумму как дополнительные сервисы, и ничего больше.
Интернет и безопасность
Ни TCP, ни IP не имеют встроенной безопасности. Это означает, что если не принять другие меры, данные трафика могут быть перехвачены или, что хуже, изменены. Это известно как атака "человек посередине", а изменение трафика может быть крайне сложным, например внедрение кода JavaScript в веб-браузер, когда пользователь посещает сторонние сайты.
Шифрование данных может выполняться на канальном уровне, например WiFi может использовать WPA2 для шифрования своего трафика. Аналогично шифруются данные по сотовому соединению. Однако Ethernet, распространенный протокол для кабельных локальных сетей, не имеет никакой защиты. Кроме того, шифрование канального уровня не гарантирует, что данные останутся зашифрованными на всем пути до хоста, если во время передачи изменится нижележащая среда.
По этой причине шифрование обычно выполняется на прикладном уровне, где защищенные протоколы заменяют протоколы с открытым текстом. Примеры:
- SSH вместо telnet для удаленного подключения к оболочке
- HTTPS вместо HTTP для коммуникации с веб-сервером
- SFTP вместо FTP для передачи файлов
Протоколы устанавливают защищенный канал между двумя устройствами, чтобы конфиденциальные данные нельзя было наблюдать. Однако наблюдать можно адрес и порт, то есть человек посередине знает, что пользователь связался с сервером, и вероятно может догадаться о запрошенном сервисе по порту, но фактическую полезную нагрузку он наблюдать не может.
Протоколы
Кратко опишите назначение протоколов IP и TCP: какие возможности они предоставляют? Как эти два протокола связаны с протоколами канального и прикладного уровней?
Межсетевые экраны
[Для ответа прочитайте раздел 21.4 книги Security Engineering, 3-е издание, Росс Андерсон.]
Кратко объясните следующие понятия и их взаимосвязь: межсетевой экран, фильтрация пакетов на уровне IP, прокси прикладного уровня, фильтрация исходящего трафика.
Не забудьте проверить свои баллы в индикаторе в правом нижнем углу материала!