Как устроен интернет. Начало
История интенета
Зачем решили создать сеть?
Из-за угрозы войны нужна была децентрализованная безопасная система связи.
Компьютеры развивались и имели потенциал. Их решили связать между собой.
Идея и первая реализация
Пол Беран предложил идею разбивать данные на кусочки и передавать их через сетевые узлы (маршрутизаторы), но эту идею сначала не приняли, посчитав ее невозможной.
Чтобы найти способ "связать компьютеры" Министерство обороны США создало Advanced Research Projects Agency (ARPA) которое бы отбирало идеи.
Оказалось, что National Physical Laboratory of England уже реализовало идею Пола Берана и создало сеть (NPL).
Появление ARPANET
Похожую сеть решили сделать и в США и назвали ее ARPANET. Первое сообщение было отправленно через эту сеть в 1969 году. Первое отправленное сообщение между двумя институтами на расстяонии 640 км было login.
В последствии к ARPANET подключили все институты США, что позволило совместно вести исследовательские проекты.
ARPANET и NSFNET
Как выглядела первая сеть
Сеть состояла из ПК (хосты) и IMP (Interface Message Processor), которые выполняли функции маршрутизаторов первого поколения, обеспечивая передачу, буферизацию и маршрутизацию пакетов данных между узлами сети.
Скорость передачи была 56 кбит/с.
Появление NSFNET и закрытие ARPANET
Но ARPANET была военной разработкой и чтобы получить к ней доступ, нужно было заключать контракт с МО США и сеть была закрытой. Поэтому Национальный Научный Фонд США решает создать на основе ARPANET открытую сеть.
Новая некоммерческая сеть получила название NSFNET, и ARPANET закрылся в виду своей бесперспективности.
Коммерциализация интернета
В NSFNET видели перспективы и в нее начали вкладывать деньги, делая интернет комерческим.
В конце 80-х годов от сети NSFNET удалось полностью отказаться, начали появляться комерческие провайдеры и вся опорная сеть перешла в руки нескольких компаний, которые взяли на себя роль крупнейших узлов трафика по всему миру. Далее эти крупнейшие провайдеры станут магистральными провайдерами.
Появление провайдеров
Магистральные провайдеры - это Tier 1 сети — крупнейшие телекоммуникационные компании, которые не покупают интернет-трафик у других, а обмениваются им напрямую (peer-to-peer).
Они владеют межконтинентальными оптоволоконными линиями, подводными кабелями, и крупными дата-центрами.
Их задача — обеспечивать глобальную связность между регионами и странами.
Иерархия провайдеров
Tier 1 провайдеры - Магистральные предоставляют трафик:
- Tier 2 провайдерам
- Крупным дата-центрам и облачным платформам
- Иногда — государственным или национальным операторам
Tier 2 провайдеры — региональные
- Кто это: крупные национальные или региональные операторы (например, Ростелеком, Orange, Turk Telekom).
- Что делают:
- Кому предоставляют трафик:
- Кто это: локальные интернет-провайдеры, кабельные операторы, домашние сети.
- Что делают:
- Покупают трафик у Tier 2 (иногда напрямую у Tier 1)
- Обеспечивают доступ в интернет для конечных пользователей
- Кому предоставляют трафик:
Как выглядит адресация в интернете
На заре интернета была еще одна проблема: в разных странах появлялись свои сети, которые работали по своим правилам и чтобы их объединить нужен был единый свод правил как передавать сообщения между компьютерами.
Глобальный интернет состоит из канальных сред у которых есть "окно" в глобальный интернет. Например, это может быть многоэтажный дом с маршрутизатором провайдера, который является тем самым "окном", или локальная сеть (LAN) с сервером в качестве "окна".
Как передаются данные в канальной среде (обобщенно)
Весь поток битов, которые передаются в канальной среде, разбивается на части, которые называются "кадрами".
MAC-адрес (Media Access Control)
Передавать кадры можно только устройствам с сетевым интерфейсом (сетевая карта, Wi-Fi адаптер, Bluetooth), которые обладают своим уникальным адресом. Такой адрес называется MAC-адрес (Media Access Control).
MAC-адрес - 48 битный физический адрес.
- OUI (Organizationally Unique Identifier) — первые 24 бита, указывающие на производителя.
- NIC-specific часть — оставшиеся 24 бита, назначаемые производителем.
Чтобы МАК адреса не дублировались между производителями их нужно контроллировать. Этим занимается комитет IEEE RA (Institute of Electrical and Electronics Engineers - Registration Authority), который выдает производителям диапазон адресов, и когда они расходуются, то выдает новые.
МАК-адрес представляет собой 6 чисел в шестнадцатеричном виде (например, 00:1A:2B:3C:4D:5E)
Если в первом бите старшего байта стоит:
- 0 - то такой адрес, является индивидуальным
- 1 - то такой адрес, является групповым (предназначен для целой группы компьютеров)
Если во втором бите старшего байта стоит:
- 0 - то такой адрес, является глобальным (назначен производителем)
- 1 - то такой адрес, является локальным (переопределен администратором локальной сети в ручную)
Помимо индивидуального и групового существует широковещательный адрес состоящий из чисел FF (255) при котором отправка кадра происходит всем устройствам канальной среды.
Hub/switch
Чтобы решить проблемы с подключением компьютеров к сети создаются специальные сетевые устройства:
- Hub - когда на него приходит кадр, то он рассылает его всем остальным подключенным компьютерам, и те кому он не нужен отбрасывают его. Из минусов: ограниченная скорость самым медленным узлом в сети, и сниженная безопасность из-за отправки кадра всем.
- Switch/Комутатор - имеет таблицу комутаций (номер, мак-адрес, порт к которому подключено устройство). При получении кадра отправляет его всем подключенным устройствам, кроме отправителя. Но он запоминает адрес отправителя и заполняет свою таблицу. Когда таблица заполняется, то свитч знает на какой порт передать кадр. Если таблица комутаций будет переполнена, то свитч снова будет рассылать кадры на все свои порты.
В многоэтажном доме все устройства не подключаются к маршрутизатору провайдера, а подключаются к свитчу, который уже подключается к порту маршрутизатора.
IP адрес
В сети миллиарды устройств и чтобы найти "получателя" по мак адресу нужны гигантские таблицы комутаций. МАК адреса подходят для канальной среды, но не для глабального интернета.
Решение - введение виртуальных адресов - IP (Internet Protocol). Именно с IP и работают маршрутизаторы, а данные теперь называются не кадрами, а пакетами.
Маршрутизатор находит кратчайший путь из точки А в точку Б и передает по нему пакеты из одной канальной среды в другую (пакетная комутация).
Каждый участник сети, кроме МАК-адреса получает уникальный 4х байтовый IP адрес.
IP адрес 4ой версии представлен 4мя числами (октетами) от 0 до 255, раздеденными точками.
В отличии от МАК адреса, IP адрес выделяется не каждому устройству, а каждой подсети в которой устройства находятся.
IP адрес разбивается на 2 части: первые часть является адресом подсети, а вторая- это адрес хоста (устройства).
Чтобы понять какая часть айпи адреса является адресом подсети, то используется маска подсети.
Маска подсети может обозначаться десятичными числами (255.255.255.128) либо в виде префикса /25 (эти записи эквивалентны). Маска подсети - это то количество старших бит указанных в префиксе.
Чтобы IP адреса оставались уникальными, их выдачу контролирует специальные организации. Их иерархия:
- ICANN (корпорация по управлению доменными именами и IP-адресами)
- IANA - международная некомерческая организация (Администрация адресного пространства интернета). Выдает блоки адресов пяти RIR.
- RIR - региональные интернет регистраторы: AFRINIC, APNIC, ARIN, LACNIC, RIPE NCC. Выдают блоки адресов меньшего размера LIR.
- LIR - локальные интернет регистраторы. Обычно это крупные провайдеры, которые выдают айпи мелким провайдерам.
- Мелкие провайдеры - выдают айпи пользователям.
- Пользователи
Существуют зарезервированные блоки АйПи адресов которые можно использовать только в тех случаях где они предназначены.
Если все биты адреса установлены в 1 (255.255.255.255), то такое адрем является широковещательным в своей подсети. Пакет с таким адресом будет принят всеми компьютерами своей подсети, но не будет перенаправлен в другие подсети - такой широковещательный запрос называется ограниченным.
Направленный широковещательный запрос - указанная подсеть с единицами в битах адреса хоста.
Кол-во доступных адресов для хостов всегда на 2 меньше, так как когда в адресе все 1, то это широковещательный, а когда все 0, то это адрес подсети.
Выше речь шла о публичных АйПи адресах, которые используются в глобальной сети интернет. В локальных сетях используются частные адреса из специальных зарезервированных блоков.
- 10.0.0.0 / 8
- 172.16.0.0 / 12
- 192.168.0.0 / 16 - настраивая вайфай роутер мы подключаемся к 192.168.0.1, либо 192.168.1.1
- 169.254.0.0 / 16 - Если у нас отсутствует возможность получить откуда либо АйПи адрес, то ОС назначает link-local адрес, который не проходит через маршрутизаторы.
- 0.0.0.0 - когда мы собираемся получить АйПи у провайдера, но еще не сделали этого.
- 127.0.0.0 / 8 - ведет на наш компьютер (используется для тестирования ПО)
DNS
Чтобы людям было удобно пользоваться и запоминать АйПи, им решиил присвоить имена (домена), где кадому айпи соответствует свое доменное имя.
Система которая управляет доменными именами называется Domain Name System и была создана в 1983.
Это решило еще одну проблему: когда компания "переезжает" на новый айпи, ей нужно только отвязать свой домен от старого айпи и привязать к новому.
Эволюция ДНС
Когда юзер переходит по доменному имени, то сначала нужно получить айпи который привязан к этому доменому имени.
Раньше поиск айпи привязанного к домену осуществлялся на компьютере внутри файла hosts (C:\Windows\System32\drivers\etc\hosts), но кол-во сайтов росло и рос файл и поиск становисля долгим.
В итоге DNS превратился в целую сеть серверов со своей иерархией.
Иерархия доменов
Домены деляться на рахные уровни с права на лево (mysite.ru.):
- Коневой домен: в виде точки (.), который распологается в конце, но его никто не ставит, потомучто это не обязательно
- Домен 1-го уровня: домены организаций или стран (ru, com, org, uk)
- Домен 2-го уровня: (nameofmysite)
- Домен 3-го уровня: (new -> new.mysite.ru.)
Все домены распределены по разным серверам. На сервере домена также хранится информация о нижестоящих доменах на которые он ссылается. Серверы дублируются для большей надежности.
DNS-запись
Чтобы купленный домен заработа ли стал связан с определенными айпи, нужно внести DNS-запись.
DNS-запись состоит из 5-ти частей:
- Имя домена (mysite.com)
- Время жизни записи в кэше (300)
- Класс - значение IN, означает что это используется в сети интернет (IN)
- Значение (132.18.4.10)
- Тип - может принимать много значений, но частоиспользуемых не так много.
- A - IPv4
- AAAA - IPv6
- MX - Почтовая запись. Приоритет и адрес почтового сервера (5 mail.s.ru)
- TXT - Текстовая информация (например, SPF для почты) (v=spf1...)
- CNAME - псевдоним, чтобы одному айпи могло соответствовать несколько доменов (site.ru).
- PTR - Обратное разрешение IP → имя (в имени домена будет айпи, а в значении доменное имя)
- NS - Указывает, какие DNS-серверы обслуживают домен (ns.s.ru)
Все записи сохраняются в кэше ДНС сервера и достаются из него же. Поэтому изменение и перезапись ДНС-записей производится не моментально, а через время, когда запись удалиться из кэша.
Как нашему компьютеру получить запись из DNS?
Для этого используется специальный сервер DNS-resolver. Отправка запроса на него происходит автоматически, например, когда мы набираем в браузере нужный сайт.
DNS-resolver ищет айпи рекурсивно, доходит до нужного сервера где распологается искомый айпи и нам возращается ответ в виде одного или нескольких айпи адресов.
Ответ полученный напрямую от dns-сервера называется авторитетным, но ответ так же может быть взят из кеша самого DNS-resolver и является не авторитетным.
В одном запросе может быть сразу несколько ДНС-запросов или ДНС-ответов, например если к одному домену привязано несколько айпи.
Поля ДНС-запроса
- 2 байта - ID (0x07A8), должно быть одинаковым в запросе и ответе.
- 2 байта - Флаги, разделенные на 8 частей
- QR (1 бит): 0 - запрос; 1 - ответ;
- OPCODE (4 бита): нули по умолчанию - стандарный запрос
- AA (1 бит): является ли ответ авторитетным
- TC (1 бит): 1 - означает, что серверу не удалось уместить всю информацию в пакет
- RD (1 бит): 1 - означает, что не нужно возвращать промежуточные ответы, а сразу вернуть АйПИ
- RA (1 бит): поддерживает ли сервер рекурсию. Если да, то мы сразу получим искомую запись. Но если отправлять запрос не DNS-resolver, а серверу ответственному за доменную зону, то в ответе, мы бы получили 0 (так как в таких серверах поиск итеративный), а в АйПи получили бы адрес сервера, который знает куда дальше нужно идти.
- Z (3 бита) - зарезервированы и равны нулям.
- RCODE (4 бита): 0 - успешно, 1-5 - ошибка.
- 2 байта - Кол-во запросов
- 2 байта - Кол-во ответов
- 2 байта - Кол-во авторитетных ответов
- 2 байта - Кол-во дополнительных записей
- Запросы
- Доменное имя (0x076578...) представлено в специальном формате в виде набора меток. Cтандартная метка:
- Первые 2 бита 1-ого байта: 00
- 6 бит: кол-во байт идущих следом, которые являются содержимым метки (7)
- ASCII слово в 16-ичном виде (example)
- Следующая метка, где снова первые 2 бита 1-ого байта: 00
- 6 бит: кол-во байт идущих следом, которые являются меткой (2)
- ASCII слово в 16-ичном виде (ru)
- Объединив метки (00 | 7 | example | 00 | 2 | ru) с точкой мы получим: example.ru
- 2 байта - тип ДНС-записи (0x0001)
- 2 байта - стандартный класс IN (0x0001)
- Ответы
- Доменное имя
- 2 байта - Тип ДНС-записи
- 2 байта - Класс ИН
- 4 байта - время хранение записи в кэше DNS-resolver
- 2 байта - длина данных
- 4 байта - сами данные (например АйПи)
- Авторитетные ответы
- Доп. записи
DHCP
Чтобы узнать какой АйПи адрес нам выдаст провайдер и как его получить, в этом нам поможет DHCP-сервер, который как правило находится на стороне провайдера. Именно к нему обращаются устройства во время подключения к сети.
DHCP-сервер не только выдает АйПи, но и следит за их уникальностью. Такой запрос выполняется по протоколу DHCP (Dynamic Host Configuration Protocol)
Изначально адрес DHCP-сервера нам не известен, поэтому сначала мы посылаем широковещательный запрос по МАК и АйПи (FF-FF-FF-FF-FF-FF, 255.255.255.255) всем устройствам нашей канальной среды с целью найти DHCP-сервер.
Если в нашей канальной среде DHCP-сервер не найдется, то маршрутизатор должен быть сконфигурирован в режиме DHCP-relay - такой режим позволяет передавать широковещательный трафик в другие подсети, но только для протокола DHCP.
DHCP - DISCOVER запрос
- 1 байт: тип сообщения (1 - запрос; 2 - ответ)
- 1 байт: тип аппаратного адреса (1 - mac)
- 1 байт: длина МАК-адреса (в байтах)
- 1 байт: кол-во промежуточных маршрутизаторов, через которое прошло сообщение
- 4 байта: ID, чтобы мы и сервер могли идентифицировать запросы и ответы в рамках одной транзакции.
- 2 байта: время (сек) с момента начала получения адреса
- 2 байта: Флаги
- 4 байта: текущий АйПи, если мы хотим не получить новый, а продлить старый. Если айпи не было, то указываем все нули
- 4 байта: АйПи предложенный сервером, который мы должны утвердить
- 4 байта: собственный АйПи сервера
- 4 байта: АйПи промежуточного маршрутизатора, который доставлял запрос
- 16 байт: наш МАК-адрес
- 64 байта: имя сервера (необязательно, можно заполнить нулями)
- 128 байт: имя файла на сервере (необязательно, можно заполнить нулями)
- 4 байта: начало опций для получения доп информации от сервера. Опций много, но используется несколько:
- Каждая опция записывается в виде: код, длина, значение
Алгоритм получения АйПи
- Мы отправляем серверу DISCOVER-запрос
- Сервер выделяет свободный АйПи и отправляет нам по МАК-адресу такой же запрос с названием OFFER
- Мы получив OFFER отправляем REQUEST, где подтверждаем, что согласны этот АйПи взять
- DHCP-сервер отправляет нам запрос ACK с подтверждением, что АйПи выделен
- Если после получения запроса ACK клиент обнаруживает, что данный АйПи уже кем-то используется, то отправляется широковещательный запрос с типом DECLINE
В сети может быть несколько DHCP-серверов. Мы всем отправляем DISCOVER-запрос, нам приходят OFFERы, мы отправляем REQUEST обоим серверам с выбранным АйПи и нам отвечает запросом ACK, только тот сервер, чей АйПи мы выбрали.
Выделенный АйПи адрес может быть:
- Статический - сис. админ сам задает конкретный АйПи для конкретного МАК-адреса на DHCP-сервере.
- Автоматический - DHCP-сервер закрепляет АйПи за конкретным МАК-адресом бессрочно.
- Динамический - АйПи адресы выделяются в аренду на какой-то определенный срок, после чего АйПи нужно продлить или получить новый.
Дополнительно
Если у нас уже есть АйПи и нам нужно получить только доп информацию, то мы можем отправить сообщение с типом INFORM.
Если мы хотим продлить АйПи то мы сразу отправляем запрос REQUEST и если ответ не приходит, а прошло уже 87.5% от времени аренды, то мы снова отправляем широковещательный запрос с целью получить новый АйПи, но уже от другого ДЧСП-сервера.
При отключении от сети, например при выключении компьютера, Операционная Система автоматически отправляет ДЧСП-серверу оповещение RELEASE, информируя, что этот АйПи нам больше не нужен и теперь он свободен.
ARP
Суть Address Resolution Protocol (ARP) в том, чтобы по АйПи адресам получать МАК-адреса.
Когда мы получили от ДЧСП-сервера АйПи шлюза (маршрутизатора), нам нужно так же получить его МАК-адрес.
Чтобы узнать МАК-адрес маршрутизатора, мы посылаем широковещательный ARP-запрос, который состоит из 9 полей:
Первые 4 показывают в какой сети и с каким протоколом мы имеем дело.
- 2 байта: тип сети 1 означает, что данные передаются через канальный протокол Ethernet
- 2 байта: код протокола - IPv4
- 1 байт: длина MAC-адреса (6 байт)
- 1 байт: длина глобального АйПи адреса (4 байта)
- 2 байт: код операции (1 - запрос; 2 - ответ)
- 6 байт: МАК-адрес отправителя (получаем мак при ответе)
- 4 байта: АйПи отправителя
- 6 байт: МАК-адрес получателя (при запросе состоит из нулей)
- 4 байта: АйПи получателя
Чтобы не выполнять подобные запросы снова, они кэшируются на нашем компьютере в специальную ARP-таблицу: IP-MAC-ТИП (тип например статический, динамический)
Динамические записи удаляются из табилцы через некоторое время, чтобы получать актуальную информацию.
Существует добровольный ARP запрос, при котором мы пытаемся получать МАК адрес по своему же АйПи. Это делается при смене АйПи адреса, чтобы остальные устройства обновили информацию в своих АРП таблицах, и чтобы првоерить свободен ли этот адрес, т.е. если на этот запрос придет ответ, то этот АйПи адрес уже кому-то принадлежит.
IPv6
АйПи версии 4 состоит из 4-х байт и вмещает в себя 4 млрд адресов. Интернет начали использовать не только телефоны и компьютеры, но и бытовая техника.
3 февраля 2011 года агентство IANA выдала последние 5 блоков АйПи адресов региональным АйПи регистраторам.
Искать решение стали еще в 1992 году. Решили создать АйПи нового поколения, которые получил версию 6, так как 5 версия была занята под другой проект. IPv6 был разработан в 1995 году и официально принят в 1998 году (RFC 2460). 8 июня 2011 года было масштабное тестирование этого протокола и он стал внедрятся в инетрнет. Он предлагает 340 ундециллионов адресов — практически бесконечное пространство. Также включает улучшения в маршрутизации, безопасности и автоконфигурации.
АйПи версии 4 и 6 несовместимы между собой, поэтому они используются оба.
Так же для IPv6 используется DHCPv6 и NDP (Neighbor Discovery Protocol) вместо ARP.
IPv6 состоит уже из 16 байт и записывается в виде 8-ми 4х значных 16-ичных чисел, разделенных двоеточиями. Для удобства восприятия ведущие нули можно опустить, а целые группы нулей можно заменить 2-мя двоеточиями.
Чтобы в адресной строке можно было переходить по АйПи6, его нужно поместить в квадратные скобки.
У АйПи6 нет широковещательного формата, вместо этого используются групповые адреса, которые соответствуют сразу нескольким компьютерам.
Групповые адреса начинаются с чисел FF:
- FF02::1 - доставит пакет всем узлам (компьютерам) в своей сети (как широковещательный запрос)
- FF02::2 - доставит пакет всем маршрутизаторам в своей сети
Локальные адреса начинаются с чисел FD
Link-local адреса начинаются с чисел FE80
Внутренняя структура видов АйПи6 отличается друг от друга. Все они делятся на 2 части по 64 бита.
В глобальном адресе первая часть это адрес сети, а вторая адрес сетевого интерфейса (адрес хоста). Адрес сети делиться еще на 2 части: 48 битный глобальный префикс и 16 битный адрес подсети, благодаря которому 1 сеть, можно разбивать на подсети.
В локальном адресе тоже самое, но глобальный префик занимает не 48, а 40 бит, так как первый байт отведет под метку FD.
В линк-локал адресе сразу после 2х байтовой метки идет адрес подсети состоящий из нулей. У линк локал есть зарезервированные адреса: