5
HTTP (RFC 2616) и FTP (RFC 768). На UDP основан, например, протокол DNS,
который будет рассмотрен в 6.
На рисунке показано взаимодействие двух узлов различных сетей по протоколу HTTP. Рассмотрим процесс передачи пакета от веб-браузера первого хоста веб-серверу второго.
Клиент |
|
|
|
|
Сервер |
Веб- |
|
|
Протокол HTTP |
Веб-сервер |
|
браузер |
|
|
|
|
|
|
|
|
|
|
|
TCP |
|
|
Протокол TCP |
TCP |
|
|
|
|
|
||
|
|
|
Маршрутизатор |
|
|
IP |
Протокол IP |
IP |
Протокол IP |
IP |
|
|
|
|
|||
Драйвер |
|
Драйвер |
Драйвер |
Драйвер |
|
Ethernet |
|
Ethernet |
Ethernet |
Ethernet |
|
|
Ethernet |
|
|
Ethernet |
|
Приложение клиента генерирует HTTP-пакет с запросом к серверу. Пакет переходит на более низкий уровень, где TCP разбивает его на датаграммы подходящего размера, устанавливает тайм-ауты и, при необходимости, осуществляет повторные передачи. Ни уровень веб-браузера, ни уровень TCP не подозревают о наличии между узлами маршрутизатора: для них всё выглядит как непосредственное соединение узлов.
Пакеты TCP передаются на уровень ниже и инкапсулируются в пакеты IP. Уровень IP-клиента определяет по IP-адресу сервера, что тот находится в другой сети, и принимает решение о направлении пакета маршрутизатору, объединяющему сети на сетевом уровне. Более подробно маршрутизация будет рассмотрена в 3.
Далее канальный уровень клиента инкапсулирует IP-пакеты в Ethernet-пакеты и направляет их маршрутизатору. Тот пересылает пакеты с одного интерфейса на другой, направляя их серверу. На сервере происходит обратное преобразование пакетов: из Ethernet-пакетов извлекаются IP-пакеты, затем несколько IP-пакетов собираются в TCP-пакет, который передается приложению – веб-серверу.
6
2. IP-АДРЕСАЦИЯ
Для обеспечения взаимодействия между узлами IP-сети им назначаются IPадреса. Если узел имеет несколько сетевых интерфейсов (и, соответственно, подключён к нескольким сетям), адрес должен быть назначен каждому из них. Естественно, что IP-адреса должны быть уникальными в пределах сети.
По стандарту протокола IP версии 4 IP-адрес имеет размер 4 байт. Этим обеспечивается возможность адресации около 4,3 млрд узлов, чего более чем достаточно в пределах любой локальной сети, однако не достаточно для нужд Интернета. В IP версии 6 для спецификации адреса узла выделено 16 байт, позволяющих составить около 3,4 • 1038 комбинаций.
IP-адреса IPv4 обычно записывают в виде четырёх десятичных чисел, разделённых точками, например 198.51.100.0. Общепринятый способ записи адресов IPv6 – 8 двухбайтных шестнадцатеричных чисел, разделённых двоеточиями, например 2001:db8:0:0:0:0:0:1. Одна или несколько нулевых групп могут быть заменены на двойное двоеточие: 2001:db8::1.
Каждая IP-датаграмма содержит в своём заголовке IP-адреса источника и отправителя. В заголовке пакета IPv4 для этого отводятся байты с 13-го по 20- й (RFC 791), в заголовке IPv6 – с 8-го по 40-й (RFC 2460).
2.1. Адресация сетей
В IP-адресе можно выделить две составляющие: идентификатор сети и идентификатор узла.
Изначально в адресах идентификатору узла отводился первый октет. Таким образом, однако, удавалось адресовать не более 256 подсетей (для IPv4), чего очень скоро стало не достаточно для нужд Интернета. Это привело к созданию классовой адресации (RFC 791). При использовании классовой адресации число бит, отводимых на идентификатор сети, определяется её классом. Всего таких классов 5. Формат соответствующих этим классам адресов показан на рисунке.
Адреса класса D – это групповые адреса, о которых будет рассказано позже. Адреса класса E были зарезервированы и в настоящее время не используются. Таким образом, всё доступное адресное пространство было
7
распределено между пятью классами сетей. Соответствующие различным классам диапазоны адресов показаны в таблице.
Классовая адресация имела очевидные преимущества (например, по адресу
|
|
|
|
|
7 бит |
|
24 бит |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
A |
0 |
|
Идент-р сети |
Идентификатор хоста |
|
||||||
|
|
|
|
|
|
|
14 бит |
|
16 бит |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
1 |
0 |
|
|
|
Идентификатор сети |
|
Идентификатор хоста |
|||
|
|
|
|
|
|
|
21 бит |
|
|
|
8 бит |
|
|
|
|
|
|
|
|
|
|||
C |
1 |
1 |
|
0 |
|
|
Идентификатор сети |
|
Идент-р хоста |
||
|
|
|
|
|
|
|
|
|
28 бит |
|
|
|
|
|
|
|
|
|
|
||||
D |
1 |
1 |
|
1 |
0 |
|
Идентификатор группы |
|
|||
|
|
|
|
|
|
|
|
|
27 бит |
|
|
|
|
|
|
|
|
|
|
|
|||
E |
1 |
1 |
|
1 |
1 |
0 |
|
Зарезервировано |
|
||
всегда можно понять, к какой сети он принадлежит), но была недостаточно гибкой, а для сетей класса A было выделено гораздо больше адресов, чем требовалось [2]. В связи с этим была введена бесклассовая адресация, согласно которой провайдерам и конечным пользователям может быть выделен диапазон адресов с любым количеством фиксированных (RFC 4632).
Класс |
Начальный адрес |
Конечный адрес |
|
|
|
A |
0.0.0.0 |
127.255.255.255 |
|
|
|
B |
128.0.0.1 |
191.255.255.255 |
|
|
|
C |
192.0.0.1 |
223.255.255.255 |
|
|
|
D |
224.0.0.1 |
239.255.255.255 |
|
|
|
E |
240.0.0.1 |
255.255.255.255 |
|
|
|
Для записи диапазонов адресов при бесклассовой адресации используется нотация «IP/размер префикса», где размер префикса определяет число одинаковых ведущих бит во всех адресах диапазона. Например, 192.168.0.0/16 соответствует диапазону 192.168.0.0–192.168.255.255. В IPv6 для идентификатора узла зарезервированы последние 8 байт адреса, поэтому наименьший размер подсети в нем – /64.
Для определения размера префикса адресов IPv4 также используют маску подсети, представляющую собой аналог IP-адреса, в котором биты префикса имеют значение 1, а остальные – 0. Например, подсети 192.168.0.0/16 соответствует маска 255.255.0.0.
8
2.2. Специальные адреса
Некоторые IP-адреса зарезервированы для специальных целей и не доступны для присваивания узлам сети. Во-первых, это адрес интерфейса
«обратной петли», localhost: 127.0.0.0/8 для IPv4 (RFC 5357) и ::1/128 для IPv6 (RFC 4291). Во-вторых, в частных локальных сетях должны использоваться адреса из определённых диапазонов. Для IPv4 это 10.0.0.0/8, 172.16.0.0/12 и
192.168.0.0/16 (RFC 1918). Для IPv6 – fc00::/7 (RFC 4193). Ни один из адресов указанных диапазонов не маршрутизируется в Интернете.
Кроме того, в IPv4 зарезервированы (RFC 5753):
0.0.0.0/8 – сеть, в которой физически находится хост (RFC 1700);
169.254.0.0/16 – используются при автоконфигурации адресов в сети без
DHCP-сервера (RFC 3957);
192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 – для использования в документации и примерах исходного кода (RFC 5737);
255.255.255.255 – широковещательный адрес для «своей» сети (RFC 919)
инекоторые др.
ВIPv6 (RFC 5156):
::ffff:0:0/96 – адреса, отображённые из IPv4;
2001:db8::/32 – используются в документации;
ff00::/8 – групповые адреса
идр.
2.3. Широковещательные адреса
Пакеты, отправляемые на широковещательный (broadcast) адрес сети IPv4, должны принимать все узлы1, входящие в неё. Такой адрес формируется установкой бит идентификатора узла в адресе из адресуемой сети в единичные. Например, для сети 198.51.100.0/24 идентификатором узла является последний октет адреса, поэтому широковещательный адрес в ней – это 198.51.100.255. Простой способ определить широковещательный адрес сети – вычислить логическое «ИЛИ» между адресом сети и инвертированным значением маски подсети: 198.51.100.0 OR 0.0.0.255 = 198.51.100.255.
1 Правильнее сказать «все сетевые интерфейсы, относящиеся к данной сети». Однако для простоты здесь и далее считается, что каждый интерфейс сети соответствует единственному её узлу.
9
Отдельно рассматривается адрес 255.255.255.255 (все биты – единичные). Согласно приведённому определению он является широковещательным для сети 0.0.0.0/8 (сеть класса A), т. е. «своей» сети узла. Пакеты, направленные на этот адрес, будут широковещательными для сети, к которой непосредственно подключён отправитель, однако будут отбрасываться любыми маршрутизирующими устройствами (RFC 919).
Сети IPv6 не поддерживают широковещательную рассылку и, соответственно, не существует специальных широковещательных IPv6адресов. Для имитации широковещательной рассылки «своей» сети в IPv6 может использоваться групповая рассылка на групповой адрес ff02::1.
2.4. Групповые адреса
Групповой IP-адрес – это адрес, принадлежащий группе узлов. Пакет, отправленный на такой адрес, должны получить все узлы, входящие в группу. Узел может принадлежать любому числу групп, присоединяться к любой группе и выходить из неё в любой момент. Не существует ограничений на число узлов в группе.
Всетях IPv4 групповые адреса относятся к классу D. Они имеют префикс «1110» и, таким образом, принадлежат диапазону 224.0.0.0–239.255.255.255. При этом адрес 224.0.0.0 не может быть назначен ни одной группе, а адрес 224.0.0.1 является групповым для непосредственно соединённых в сеть узлов, т. е. аналогом широковещательного адреса 255.255.255.255 (RFC 1112). Адрес 224.0.0.1 является так называемым перманентным групповым: такие адреса действуют всегда, вне зависимости от наличия узлов в них. В отличие от перманентных динамические группы существуют ровно до тех пор, пока в них есть хоть один узел.
Для присоединения к группе или выхода из неё, хост должен сообщить об этом маршрутизатору. Для этого используется протокол IGMP – Internet Group Management Protocol (RFC 1112). Он является неотъемлемой частью IP.
Спомощью сообщений IGMP маршрутизаторы опрашивают хосты своей сети, а те в ответ отправляют им список групп, к которым они принадлежат.
ВIPv6 полностью отсутствует возможность рассылки широковещательных сообщений, поэтому групповые сообщения стали использоваться гораздо чаще. Все групповые адреса IPv6 имеют префикс из восьми единиц, т. е. принадлежат диапазону ff00::/8 (RFC 4291). Как и в IPv4,