Протоколы
Книга по сетям
Остановился здесь
Уровень | Тип данных | Функции | Примеры |
---|---|---|---|
7.Прикладной (application) |
Данные | Доступ к сетевым службам | HTTP, FTP, POP3, WebSocket |
6.Представления (presentation) |
Данные | Представление и шифрование данных | ASCII, EBCDIC |
5.Сеансовый (session) |
Данные | Управление сеансом связи | RPC, PAP, L2TP |
4.Транспортный (transport) |
Сегменты/Дейтаграммы (segment)/(datagram) |
Прямая связь между конечными пунктами и надёжность | TCP, UDP, SCTP, PORTS |
3.Сетевой (network) |
Пакеты (packet) |
Определение маршрута и логическая адресация | IPv4, IPv6, IPsec, ICMP |
2.Канальный (data link) |
Биты/Кадры (bit)/(frame) |
Физическая адресация | PPP, Ethernet, ARP |
PPP
Point-to-Point Protocol — Двухточечный протокол канального уровня (Data Link) сетевой модели OSI. Обычно используется для установления прямой связи между двумя узлами сети. В нем нет коммутации (как в ethernet) подразумевается что два устройства соединены одним кабелем. Поэтому фрейм протокола меленький (а в ethernet большой, потому что в ethernet указываются mac-адресы)
PPP фактически представляет собой набор набор протоколов. Некоторые из них:
- LCP - протокол управления каналом. Применяется для согласования опций инкапсуляции, обнаружения ошибок в конфигурации, аутентификации другого участника соединения и разрыва соединения
- PAP - протокол аутентификации по паролю. Предусматривает аутентификацию открытым текстом
- CHAP - протокол аутентификации с предварительным согласованием вызова. Проводится с шифрованием
- NCP - протокол управления сетью
HDLC
Может быть использован в соединениях с множественным доступом, но в настоящее время в основном используется в соединениях точка-точка
http://ciscotips.ru/ppp
http://ciscotips.ru/hdlc
Таблица с какого-то сайта, выделил в ней то что осознал (вроде)
Основа для сравнения | HDLC (Cisco edition) | PPP |
---|---|---|
Расширяется до | Протокол канального уровня высокого уровня | Двухточечный протокол |
Тип протоколов | Бит-ориентированный протокол | Байт-ориентированный протокол |
Используется в | Только синхронный носитель | Синхронный, а также асинхронный носитель |
Аутентификация | Нет предоставления аутентификации | Обеспечивает аутентификацию |
Динамическая адресация | Не предлагает динамическую адресацию | Динамическая адресация используется |
Реализовано в | Двухточечные и многоточечные конфигурации | Только двухточечные конфигурации |
Совместимость с другими протоколами | Не может работать с устройствами сторонних производителей (так как есть доп. поле (в cisco-версии hdlc)) | Совместим с устройствами не от Cisco также |
Потестил оба протокола, на вид одинаковые.
Ethernet II
Формат кадра
Настроил dhcp по этому видео
Ethernet работает по умолчанию, поэтому достаточно пингануть любой узел и icmp запрос будет упакован в ethernet.
ARP
Протокол позволяет определить mac-адрес по ip-адресу.
Так как arp ниже сетвого уровня, то его пакеты не проходят через маршрутизаторы (только через коммутаторы).
ARP-таблица хранит в себе соответствие mac-адреса и ip-адреса
Перед icmp запросом проходит arp запрос, чтобы узнать какому узлу (какому mac-адресу) пренадлежит запрашиваемый (в icmp) ip-адрес.
ARP-запрос (who has ip-adress) - это мультикаст пакет (в переделах l2 сегмента)
ARP-ответ (это я)
В arp-пакете поле target mac address заполняется нулями и отправляется в сеть
После установки net-tools в linux появится команда arp
. С помощью нее можно смотреть arp-таблицу arp -a
Также с ее помощью можно редактировать arp-таблицу
IPv4
Нужен для объединения сетей (маршрутизации пакетов между ними).
Используется передача без установки соединения, без гарантии доставки и без сохранения порядка сообщений (этим занимаются протоколы более высокого уровня)
Выполняет адресацию сетевого уровня и фрагментацию (если нижестоящий протокол не может принять пакет такого размера). При фрагментации вводятся поля с указанием дополнительных фрагментов, смещение фрагмента ("его порядковый номер", так как сетевой уровень не обеспечивает порядок доставки) и идентификации фрагмента
У пакета имеется поле TTL, оно нужно чтобы отбрасывать старые пакеты. Каждый хоп на пути пакета уменьшает его значение на единицу, таким образом пакет не сможет циркулировать по сети бесконечно
IPv6
IPSec
ICMP
Используется для диагностики и отслеживания ошибок в работе сети. Например когда при отправке ip пакета произошла ошибка, отправителю будет отослан icmp пакет с информацией об ошибке. В теле icmp пакета как правило содержится ip пакет с которым возникла проблема (такой ответ отправляет роутер который сгенерировал ошибку [то есть не смог выполнить задачу])
Пример. При telnet'e на несуществующий адрес был получен icmp ответ
traceroute как раз работает за счет icmp. Хост отправляет ip пакет с ttl 1 и первый на пути пакета роутер уменьшая ttl получает в нем 0 и генерирует ошибку которая в пакете icmp уходит обратно, и так далее увеличивает ttl в каждом последующем пакете пока не дойдет до конечного получателя
Также icmp используется для подавления источника данных. Когда буфер устройства переполнен и пакеты начинают уничтожаться, то оно шлет источнику сообщение уведомлением о том что оно не справляется с таким потоком данных
Redirect - когда маршрутизатор получает пакет и исходя из своей таблицы маршрутизации понимает что отправителю выгоднее слать через другой маршрутизатор (например когда отправитель и получатель в одной сети), то сначала этот маршрутизатор направит полученный пакет в соответствии со своей таблицей маршрутизации, а потом отправит отправителю icmp сообщение о том чтобы он изменил свою талицу маршрутизации и выбрал более выгодный маршрут
UDP
user datagram protocol - не имеет средств управления потоком, упорядочивания пакетов, исправления ошибок и не устанавливает логическое соединение (но он имеет механизм обнаружения ошибок (чексумма)). Всвязи с этим этот протокол чрезвычайно эффективный по скорости передачи. Также из-за простоты заголовков на его обработку не приходится тратить много вычислительных ресурсов по сравнению с tcp
TCP
Этот протокол имеет функции не предусмотренные в udp. Такие как установление логического соединения и передача с применением окон (передача с применением окон позволяет контролировать поток данных и исправлять ошибки)
Полученные от вышестоящего протокола данные делятся на сегменты и отправляются ниже
Для гарантии порядка доставки маркируются передаваемые байты (указывается порядковый номер). Маркируются не сегменты, а именно байты
Для работы tcp используются соеднинения. То есть перед началом передачи данных устанавливается соединение, а после передачи оно разрывается (закрывается)
Окно перегрузки - это механизм который позволяет управлять скоростью передачи учитывая не только допустимую скорость приема (как в скользящем окне), но и нагрузку на сеть. В случае если нагрузка на сеть слишком высокая и маршрутизаторы не способны передавать такое большое количество данных, то они начинают их уничтожать (тогда придется пересылать сегменты заново, а это долго). Чтобы этого избежать количество передаваемых в одном скользящем окне сегментов постепенно увеличивают, а в случае потери сегмента уменьшают
Для определения размера окна перегрузки используется механизм AIMD (additive increase/multiplicative decrease). Работает так: если перегрузки нет, то к размеру окна прибавляется значение (размер сегмента), если случилась перегрузка, то размер окна умножается на некоторое значение (как правило это 0.5, то есть размер окна делится пополам)
Отправитель может узнать о том что произошла перегрузка многими способами. Это может быть например недоставка (потеря сегмента и неполучение на него подтверждения) или сообщение от маршрутизатора о том что нагрузка на сеть высокая итд.
Этот механизм имеет линейный рост размера окна, для ускорения используют алгоритм медленного старта. В нем рост экспоненциальный и вместе с aimd график размера окна выглядит так
Скользящее окно - это окно управления потоком, его размер задается получателем в зависимости от размера буфера получателя. Отправляется отправителю в сегментах подтверждения
В отличие от метода "остановка и ожидание", метод скользящего окна не подразумевает подтверждения на каждый сегмент, вместо этого подтверждается сразу порция сегментов (одним пакетом)
При куммулятивном подтверждении подтвеждается получение следующего сегмента и значит что все сегменты до него успешно получены. То есть если отправлен 1Гб и в середине потерялся сегмент, то получатель подтвеждает 500М и отправитель переотправляет вторые 500М несмотря на то что они уже есть у получателя (но они не считаются потому что потерялся 1 сегмент)
Чтобы этого избежать существует выборочное подтверждение, оно подтверждает диапазоны принятых сегментов. При выборочном подтверждении в описаном ранее кейсе нужно будет переотправить 1 сегмент вместо 500М
Пример на картинках:
Зеленым выделено то что отправлено, но еще не подтверждено
После того как часть отправленных сегментов подтверждена
Становится понятно почему возникают потери на длинных расстояниях (из-за перегрузок на промежуточных узлах)
Если получатель "захлебывается", то он может отправить отправителю [TCP Window Full]
Размер окна равен нулю (приостановить передачу данных)
DHCP
Протокол динамической конфигурации хостов
Позволяет динамически назначать ip-адреса хостам в сети
Работает по схеме клиент сервер
Клиент шлет в сеть широковещательный запрос DISCOVER (на ff:ff:ff...)
DHCP сервер отвечает ему ответом OFFER с предложением ip-адреса (адресация по mac-адресу)
Клиент шлет dhcp серверу запрос REQUEST с ip-адресом (либо с предложенным либо с другим)
DHCP сервер отвечает ему пакетом ACK (если все окей)
Также кроме ip-адреса протокол dhcp позволяет передать клиенту множество других параметров (передаются как опции):
- маска подсети
- gateway
- dns-сервера
- сервера времени
- маршруты
- и многое другое
Ip-адреса выдаются на ограниченный срок, а потом продлеваются (либо выдаются другие)
Процесс получения адреса:
- Когда клиент загружается (или хочет присоединиться к сети), он начинает четырехэтапный процесс для получения аренды. Он запускает процесс с широковещательным (broadcast) сообщением DHCPDISCOVER со своим собственным MAC-адресом для обнаружения доступных серверов DHCPv4. Поскольку у клиента нет способа узнать подсеть, к которой он принадлежит, у сообщения DHCPDISCOVER адрес назначения IPv4 адреса -255.255.255.255. А поскольку у клиента еще нет настроенного адреса IPv4, то исходный IPv4-адрес - 0.0.0.0
- Сообщение DHCPDISCOVER находит серверы DHCPv4 в сети. Поскольку клиент не имеет IPv4 информации при загрузке, он использует широковещательные адреса 2 и 3 уровня для связи с сервером
- Когда DHCPv4-сервер получает сообщение DHCPDISCOVER, он резервирует доступный IPv4-адрес для аренды клиенту. Сервер также создает запись ARP, состоящую из MAC-адреса клиента и арендованного IPv4-адреса DHCP сервер отправляет связанное сообщение DHCPOFFER запрашивающему клиенту, как одноадресная передача (unicast), используя MAC-адрес сервера в качестве исходного адреса и MAC-адрес клиента в качестве адреса доставки
- Когда клиент получает DHCPOFFER с сервера, он отправляет обратно сообщение DHCPREQUEST. Это сообщение используется как для получения, так и для продления аренды. Когда используется для получения аренды, DHCPREQUEST служит в качестве уведомления о принятии выбранных сервером параметров, которые он предложил, и отклонении предложения от других серверов. Многие корпоративные сети используют несколько DHCP серверов, и сообщение DHCPREQUEST отправляется в виде широковещательной передачи, чтобы информировать все серверы о принятом предложении
- При получении сообщения DHCPREQUEST сервер проверяет информацию об аренде с помощью ICMP-запроса на этот адрес, чтобы убедиться, что он уже не используется и создает новую ARP запись для аренды клиента, а затем отвечает одноадресным DHCPACK-сообщением. Это сообщение является дубликатом DHCPOFFER, за исключением изменения поля типа сообщения. Когда клиент получает сообщение DHCPACK, он регистрирует информацию и выполняет поиск ARP для назначенного адреса. Если ответа на ARP нет, клиент знает, что адрес IPv4 действителен и начинает использовать его как свой собственный
Если dhcp сервер не один, то клиент примет предложение от того, который предложил первым
Чтобы dhcp пакеты могли проходить сквозь маршрутизатор (в другие сети) нужен dhcp релей
DNS
https://habr.com/ru/post/137587/
https://disnetern.ru/wp-content/uploads/2016/11/DNS_BIND.pdf
Домен - пространство имен (что-то большое и общее)
Зона - это делегированная часть домена
Первичная зона - информация о зоне доступная к редактирования
Вторичная зона - копия информации о зоне доступная только для чтения
/etc/resolv.conf - файл с настройками резолвера
Имеет поля domain и search, которые отвечают соответственно за локальный домен и за список доменов для поиска машин. По умолчанию домен берется из hostname сервера (все что правее первой точки). Они являются взаимоисключающими
Оба эти поля нужны для преобразования коротких имен
[vandud@desktop ~]$ cat /etc/resolv.conf
domain in.vandud.ru
nameserver 172.27.192.1
[vandud@desktop ~]$ host idud
idud.in.vandud.ru has address 51.255.215.177
Здесь как раз и становится понятна логика конечной точки в доменных именах (корня)
Если при вышеприведенной конфигурации сделать так:
[vandud@desktop ~]$ host idud.
Host idud not found: 2(SERVFAIL)
То мы получаем ошибку. То есть точка означает fqdn, а доменное имя без точки означает хостнэйм. Резолвер сначала попробует добавить к этому хостнэйму домен, и только потом попробует разрезолвить его как fqdn (но это сработает только если у нашего короткого имени нет точек, то есть оно состоит из одного слова)
nameserver - указывает на сервер имен (максимум трижды, каждый раз с новой строки)
DNS запросы бывают рекурсивные и итеративные
Как правило локальные клиенты шлют dns серверам в своей локальной сети рекурсивные запросы, а сам резолвер уже делает итеративные запросы
No Comments