Лекция 10 - Подробнее протоколы IP и TCP. Подробнее адресация. Статическая маршрутизация.
- IP-протокол Семенов Ю.А. (ГНЦ ИТЭФ)
- Протокол TCP Семенов Ю.А. (ГНЦ ИТЭФ)
- Спецификация протокола TCP, 1981 (RUS)
10.1 Адресация в сети Internet.
10.1.1 Типы адресов.
В самом начале развития сети было принято решение раздавать IP-адреса блоками, было создано три вида блока, и зарезервировано под эти блоки адреса:
Типы адресов
-
unicast - уникальный адрес, адрес конкретного хоста.
-
broadcast - широковещательный адрес, адрес для все хостов.
-
multicast - групповой адрес, адрес для группы хостов.
Классы адресов
Класс | Длина сетевой части адреса в байтах | Первое число | Количество IP - адресов в блоке | Пример блока |
A | 1 | 0-127 | 16 777 216 | 122.0.0.0/255.0.0.0 или 122.0.0.0/8 |
B | 2 | 128-191 | 65 536 | 152.126.0.0/255.255.0.0 или 122.126.0.0/16 |
C | 3 | 192-223 | 256 | 83.149.236.0/255.255.255.0 или 122.149.236.0/24 |
Специальные адреса | ||||
D | - | 224-239 | групповые адреса | |
E | - | 240-255 | для экспериментальных целей |
Пояснение, откуда появились именно такие адреса
Как показала практика, такое распределение оказалось не эффективным. Самая большая потребность именно в сетях класса C, а не в B и A. Но классы B и A "съели" большую часть адресов, и их стало не хватать.
Поэтому была принята бесклассовая раздача адресов, которая позволяет, например, дать блок в несколько адресов, либо блок из 256 и еще 64 адресов.
Это пока спасает ситуацию до перехода на IPv6.
Для того, что бы выделить четыре адреса в блок, используют маску подсети, например:
выделим адреса с 83.149.236.0 по 83.149.236.31 в отдельный блок, чтоб задать 32 адреса нужно 5 бит (2^5=32)
256-32=224
83.149.236.0/255.255.255.224 или 83.149.236.0/27 (32-5=27)
Почему называется маска?
01010011 10010101 11101100 00000000 - сеть 83.149.236.0
Наложим маску на адрес (логическое И, 1и1=1, 1и0=0, 0и0=0)
01010011 10010101 11101100 00010000 - проверяемый адрес 83.149.236.16
11111111 11111111 11111111 11100000 - маска 255.255.255.224
01010011 10010101 11101100 00000000 - получаем сеть 83.149.236.0 (в двоичном, см. выше)
Это был адрес принадлежащий сети.
Возьмем адрес не принадлежащий сети - 83.149.236.64
01010011 10010101 11101100 01000000 - проверяемый адрес 83.149.236.64
11111111 11111111 11111111 11100000 - маска 255.255.255.224
01010011 10010101 11101100 01000000 - не получаем сеть 83.149.236.0, значит адрес не принадлежит сети.
Адреса зарезервированные для закрытых локальных сетей (в Интернете их не видно):
10.0.0.0/8
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
Специальные адреса (зарезервированные).
127.0.0.1 - это адрес обратной связи (loopback) - пакеты по нему реально в сеть не отправляются. Этому адресу по умолчанию назначают имя localhost.
255.255.255.255 - широковещательный адрес, для всех сетей. Используется для DHCP.
Широковещательный (broadcast) адрес сети.
Пакеты посланные на широковещательный адрес, должны принимать все компьютеры этой сети.
Принято назначать широковещательным - последний адрес сети.
Например:
для сети 83.149.236.0/24
83.149.236.255 - broadcast адрес сети 83.149.236.0/24.
83.149.236.0 - адрес сети, unicast-адреса с таким номером быть не должно. Т.е. минимальный размер подсети может быть в 4 адреса.
Кроме случая, когда используется маска 32, для указания одного unicast-адреса, например - 83.149.236.36/32
Групповой адрес (multicast).
Предназначен для группы хостов.
Например, адрес 224.0.0.5 - адрес OSPF - маршрутизаторов, т.е. все OSPF - маршрутизаторы обязаны принимать пакеты с адресом назначения 224.0.0.5.
10.2 Протокол IP
10.2.1 Межсетевой уровень и протокол IP.
Первый стандарт IPv4 определен в RFC-760 (DoD standard Internet Protocol J. Postel Jan-01-1980)
Последняя версия IPv4 - RFC-791 (Internet Protocol J. Postel Sep-01-1981).
Первый стандарт IPv6 определен в RFC-1883 (Internet Protocol, Version 6 (IPv6) Specification S. Deering, R. Hinden December 1995)
Последняя версия IPv6 - RFC-2460 (Internet Protocol, Version 6 (IPv6) Specification S. Deering, R. Hinden December 1998).
Структура дейтограммы IP. Слова по 32 бита.
Версия - версия протокола IP (например, 4 или 6)
Длина заг. - длина заголовка IP-пакета.
Тип сервиса (TOS - type of service) - это поле делится на шесть подполей.
Подробно поле "Тип сервиса"
Приоритет - присваивает код приоритета каждой дейтограмме.
Значения приоритетов:
111 - Network Control - Сетевое управление
110 - Internetwork Control - Межсетевое управление
101 - CRITIC/ECP - critic/ecp
100 - Flash Override - Экстренный
011 - Flash - Срочный
010 - Immediate - Немедленный
001 - Priority - Приоритетный
000 - Routine - Обычный уровень
Формат поля TOS определен в документе RFC-1349.
Коды типа сервиса (TOS)
TOS-код | Значения (RFC-1349) | Значения (перевод) |
0000 | normal service | Обычный сервис |
0001 | minimize monetary cost | Минимальная денежная стоимости |
0010 | maximize reliability | Максимальная надежность |
0100 | maximize throughput | Максимальная пропускная способность |
1000 | minimize delay | Минимальная задержка |
TOS играет важную роль в маршрутизации пакетов. Интернет не гарантирует запрашиваемый TOS, но многие маршрутизаторы учитывают эти запросы при выборе маршрута (протоколы OSPF и IGRP).
Идентификатор дейтаграммы, флаги (3 бита) и указатель фрагмента - используются для распознавания пакетов, образовавшихся путем фрагментации исходного пакета.
Поле флаги состоит из 3-х бит:
Bit 0: reserved, must be zero - зарезервирован, равен нулю.
Bit 1: 0 = May Fragment, 1 = Don't Fragment. - разрешена/запрещена фрагментация.
Bit 2: 0 = Last Fragment, 1 = More Fragments - является ли данный фрагмент последним, последний/будут еще.
Время жизни (TTL - time to live) - каждый маршрутизатор уменьшает его на 1, что бы пакеты не блуждали вечно.
Протокол - Идентификатор протокола верхнего уровня указывает, какому протоколу верхнего уровня принадлежит пакет (например: TCP, UDP).
10.3 Статическая маршрутизация.
Для маршрутизации нужна маршрутная информация, куда (на какой интерфейс) пакет отправлять, зная адрес назначения.
Статическая маршрутизация - это когда таблица маршрутизации формируется "вручную".
10.3.1 Таблицы маршрутизации.
Для получения таблицы маршрутизации используется команда route.
Рассмотрим таблицы маршрутизации самой простой сети.
Схема сети
Столбцы таблицы маршрутизации:
-
Destination - адрес сети назначения
-
Gateway - адрес шлюза
-
Genmask - маска сети назначения
-
Flags - флаги
U - показывает, что маршрут активен.
G - показывает, что маршрут проходит через промежуточный маршрутизатор (Gateway).
H - специфический маршрут, маршрут к этому хосту отличается от маршрута ко всей этой сети. -
Metric - метрика, если для отправки можно использовать несколько маршрутов, позволяет делать выбор.
Метрика =0 обозначает, что эта сеть непосредственно подключена к данному интерфейсу. -
Ref - сколько раз ссылались на данный маршрут при обработке пакетов
-
Use - количество пакетов, переданное по данному маршруту.
-
Iface - интерфейс для отправки пакетов.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.0.6
В таблице прописаны два правила:
-
Пакеты для сети 192.168.0.0/255.255.255.0 посылать напрямую, т.е. не через маршрутизатор.
-
Пакеты для всех остальных сетей посылать на default-маршрутизатор с адресом 192.168.0.1.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth1 83.149.236.64 * 255.255.255.224 U 0 0 0 eth0 default 83.149.236.92 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.0.1
В таблице прописаны три правила:
-
Пакеты для сети 192.168.0.0/255.255.255.0 посылать напрямую, через интерфейс eth1.
-
Пакеты для сети 83.149.236.64/255.255.255.224 посылать напрямую, через интерфейс eth0.
-
Пакеты для всех остальных сетей посылать на default-маршрутизатор с адресом 83.149.236.92, через интерфейс eth0.
В разных системах таблицы немного отличаются, но в целом очень похожи.
>route PRINT =========================================================================== Активные маршруты: Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика 0.0.0.0 0.0.0.0 10.85.241.18 10.85.241.63 1 10.85.240.0 255.255.254.0 10.85.241.63 10.85.241.63 20 10.85.241.63 255.255.255.255 127.0.0.1 127.0.0.1 20 10.255.255.255 255.255.255.255 10.85.241.63 10.85.241.63 20 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 224.0.0.0 240.0.0.0 10.85.241.63 10.85.241.63 20 255.255.255.255 255.255.255.255 10.85.241.63 10.85.241.63 1 Основной шлюз: 10.85.241.18 ===========================================================================
Пример таблицы маршрутизации в Windows
Источники информации для таблицы маршрутизации:
-
Ручная настройка сетевых интерфейсов.
-
Ручная настройка default маршрутизатора.
-
Ручная настройка настройка маршрутов.
-
Динамические протоколы - RIP, OSPF и т.д.
Рассмотрим intranet сеть (без выхода в Интернет) из четырех сегментов.
Схема сети.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 192.168.3.0 * 255.255.255.0 U 0 0 0 eth0 #
Таблица (linux) маршрутизации на маршрутизаторе.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.0.6.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.1.128.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.2.32.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.3.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации на 192.168.3.64.
10.3.1 Маршрутизация без маски (на классах).
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 192.168.3.0 * 255.255.255.0 U 0 0 0 eth0 192.168.4.0 * 255.255.255.0 U 0 0 0 eth0 192.168.5.0 * 255.255.255.0 U 0 0 0 eth0 192.168.6.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 #
Таблица (linux) маршрутизации без использования маски
10.3.1 Маршрутизация с маской (CIDR).
Это позволяет создавать непрерывное адресное пространство, и маршрут к нему, что уменьшает записей в таблице.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.248.0 U 0 0 0 eth0 default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 #
Таже таблица (linux) маршрутизации, но с использованием маски.
10.4 Протокол надежной доставки сообщений TCP
TCP (Transfer Control Protocol) – протокол контроля передачи, протокол TCP применяется в тех случаях, когда требуется гарантированная доставка сообщений.
Первая и последняя версия TCP - RFC-793 (Transmission Control Protocol J. Postel Sep-01-1981).
Основные особенности:
-
Устанавливается соединение.
-
Данные передаются сегментами. Модуль TCP нарезает большие сообщения (файлы) на пакеты, каждый из которых передается отдельно, на приемнике наоборот файлы собираются. Для этого нужен порядковый номер (Sequence Number - SN) пакета.
-
Посылает запрос на следующий пакет, указывая его номер в поле "Номер подтверждения" (AS). Тем самым, подтверждая получение предыдущего пакета.
-
Делает проверку целостности данных, если пакет битый посылает повторный запрос.
Структура дейтограммы TCP. Слова по 32 бита.
Длина заголовка - задается словами по 32бита.
Размер окна - количество байт, которые готов принять получатель без подтверждения.
Контрольная сумма - включает псевдо заголовок, заголовок и данные.
Указатель срочности - указывает последний байт срочных данных, на которые надо немедленно реагировать.
URG - флаг срочности, включает поле "Указатель срочности", если =0 то поле игнорируется.
ACK - флаг подтверждение, включает поле "Номер подтверждения, если =0 то поле игнорируется.
PSH - флаг требует выполнения операции push, модуль TCP должен срочно передать пакет программе.
RST - флаг прерывания соединения, используется для отказа в соединении
SYN - флаг синхронизация порядковых номеров, используется при установлении соединения.
FIN - флаг окончание передачи со стороны отправителя
В дополнительных параметрах, может быть:
MSS (maximum segment size) - максимальный размер сегмента. Если MSS не задан, то устанавливается, по умолчанию, 536 байт. С помощью этого параметра можно увеличить скорость передачи, подбирая оптимальные MSS и MTU (размер пакета канального уровня).
10.4.1 Понятие сокета:
Чтобы идентифицировать отдельные потоки данных введено понятие сокет(socket) - это уникальное число для каждого процесса, для получения числа используется IP-адрес хоста и порт приложения (вы видели сокет в примере для FTP соединения - 194,87,5,52,9,75).
Схема мультиплексирования информационных потоков
10.4.2 Соединения TCP:
Соединение TCP является полнодуплексным, т.е. существуют два потока, прямой и обратный.
Поэтому каждое соединение определяется двумя сокетами. Локальный сокет может принимать участие во многих соединениях с различными чужими сокетами.
Полнодуплексное соединение, используется 2 сокета.
Все необходимые переменные для соединения хранятся в блоке управления передачей TCB (Transmission Control Block).
В TCB могут содержаться:
-
сокеты
-
номера очередей
-
флаги безопасности и приоритета
-
и т.д.
Состояния TCP соединения:
LISTEN - ожидает запроса на соединение от удаленного TCP-модуля, чужой сокет равен нулям.
SYN-SENT - ожидание ответа на соединение, после посылки запроса на соединение.
SYN-RECEIVED - ожидание подтверждения на соединение, после посылки обоих предыдущих запросов.
ESTABLISHED - состояние установленного соединения, стадия передачи данных.
FIN-WAIT-1 - ожидание запроса завершения соединения от удаленного TCP-модуля, или подтверждения запроса завершения соединения, предварительно посланного.
FIN-WAIT-2 - ожидание запроса завершения соединения от удаленного TCP-модуля.
CLOSE-WAIT - ожидание запроса завершения соединения от локального пользователя..
CLOSING - ожидание подтверждения запроса завершения соединения от удаленного TCP-модуля.
LAST-ACK - ожидание подтверждения запроса завершения соединения, предварительно посланного удаленному TCP-модулю (который включает подтверждение его запроса завершения соединения).
TIME-WAIT - время ожидания, что удаленный TCP-модуль получил подтверждение его запроса завершения соединения.
CLOSED - TCP-модуль закрыт для любого подключения.
Алгоритм установки TCP-соединения
Алгоритм установки соединения:
-
Клиент посылает SYN-сегмент (SYN=1), и порядковый номер ISN=J (initial sequence number - первоначальный порядковый номер). Раньше ISN просто приравнивали 0, но сейчас, как правило, это случайное число, это сделано, что бы усложнить атаки с помощью подмены IP-адреса и исключить попадания пакетов с одинаковыми номерами.
-
Сервер откликается, посылая свой SYN-сегмент (SYN=1), содержащий свой ISN=K. И AS=ISN +1=J+1.
-
Клиент отправляет подтверждение получения SYN-сегмента от сервера с AS=ISN +1=K+1 и SN=J+1.
-
Начинается передача данных. При передачи данных в серийном номере .
Это один из вариантов соединения остальные можно посмотреть в RFC-793.
10.4.3 Диаграмма состояний TCP:
Для более простого восприятия сделана диаграмма состояний TCP, но ею нельзя пользоваться как спецификацией.
Диаграмма состояний TCP (упрощенная, полная в RFC-793)