Как работает интернет
Далее мы обсудим основные протоколы, которые определяют коммуникацию между устройствами, подключенными к интернету.
Интернет похож на луковицу
У интернета есть уровни. Разные протоколы, отвечающие за коммуникацию, можно сгруппировать в 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 для передачи файлов
Протоколы устанавливают защищенный канал между двумя устройствами, чтобы конфиденциальные данные нельзя было наблюдать. Однако наблюдать можно адрес и порт, то есть человек посередине знает, что пользователь связался с сервером, и вероятно может догадаться о запрошенном сервисе по порту, но фактическую полезную нагрузку он наблюдать не может.
Можно использовать протокол шифрования, известный как TLS и применяемый HTTPS, для кодирования обычного IP-трафика. В этом случае пользователь подключается к специальному серверу и устанавливает защищенный канал. Через этот канал пользователь отправляет IP-пакеты данных. Затем сервер расшифровывает поток и пересылает пакеты на адрес, указанный в пакетах. Сервер также изменяет заголовки TCP/IP, подобно NAT, так что кажется, будто соединение исходит от сервера. Это также позволяет пользователю получать ответы, поскольку сервер будет пересылать любой входящий ответ обратн о пользователю по защищенному каналу.
По сути это вариант виртуальной частной сети (Virtual Private Network, VPN). Обратите внимание, что мы оборачиваем IP-пакет в поток TLS, который, в свою очередь, использует TCP, а тот снова использует IP. В частности, наличие протокола TCP может приводить к проблемам производительности, и поэтому для VPN чаще используется IP Security (IPSec). Протоколы передачи данных IPSec реализованы непосредственно поверх IP, подобно TCP или ICMP, и считаются находящимися на сетевом уровне. Поскольку протокол TCP не используется между исходными IP-пакетами и зашифрованной полезной нагрузкой, проблемы задержки значительно меньше.
Обратите внимание, что полезная нагрузка расшифровывается в конечной точке VPN, прежде чем пересылается к своей настоящей цели. Поскольку IP-адрес также изменяется, внешняя сторона не может вывести личность пользователя на основе IP-информации. Однако любая конфиденциальная информация, которая не зашифрована отдельно в полезной нагрузке, например пароли, отправленные через обычный HTTP, может быть прочитана после VPN.
Не забудьте проверить свои баллы в индикаторе в правом нижнем углу материала!