Что это такое и как она работает

Содержание
  1. Протоколы испытаний на продукцию
  2. Получение протоколов испытаний на продукцию
  3. Зачем нужны протоколы испытаний на продукцию?
  4. Примеры систем сертификации
  5. Протокол прикладного уровня
  6. Сетевая модель OSI
  7. Материалы о сетях на базе TCP/IP
  8. Экспериментирование с сетевыми протоколами
  9. Важные понятия
  10. Компьютерные сети
  11. Локальные и глобальные компьютерные сети
  12. ▍ Различные типы сетей
  13. ▍ Сетевые модели
  14. ▍ Модель TCP/IP
  15. ▍ Как работает сеть на основе TCP/IP
  16. Логический интерфейс и физический интерфейс
  17. MAC-адресация и индентификация сетей
  18. ▍ Сегмент сети, подсеть, широковещательный домен, виды адресов
  19. ▍ Маршрутизация в IP-сетях
  20. ▍ Расчёт контрольной суммы
  21. ▍ Порядок байтов и битов
  22. Cтек протоколов TCP/IP
  23. ▍ Протокол IP
  24. ▍ Структура пакетов
  25. ▍ IP-пакеты и IP-датаграммы
  26. ▍ Фрагментация IP-датаграмм
  27. ▍ Протокол ARP
  28. ▍ Протокол ICMP
  29. ▍ Структура сообщений
  30. ▍ Протокол UDP
  31. ▍ Протокол TCP
  32. ▍ Флаги TCP
  33. ▍ Опции TCP
  34. ▍ Открытие соединения, передача данных, закрытие соединения
  35. ▍ Настройка стека TCP/IP
  36. ▍ Протокол DHCP
  37. ▍ Протокол DNS
  38. ▍ Ресурсная запись
  39. Сетевое программирование и анализ сетевого трафика
  40. ▍ Анализ пакетов в сети
  41. Примеры программного кода
  42. ▍ Создание ARP-запроса
  43. ▍ Создание сообщений DHCP Discover и DHCP Request
  44. ▍ Организация TCP соединения
  45. Виды сетей
  46. О модели OSI
  47. Физический уровень
  48. Канальный уровень
  49. Сетевой уровень
  50. Транспортный уровень
  51. Сеансовый уровень
  52. Представительный уровень
  53. Прикладной уровень
  54. Самые популярные протоколы
  55. IP – Internet Protocol
  56. SSL/TLS
  57. TCP/UDP
  58. HTTP и HTTPS

Протоколы испытаний на продукцию

Протоколы испытаний на продукцию – это документальное подтверждение проведенных лабораторных экспертиз в рамках осуществления оценки качества и безопасности продукции в любой законно действующей системе сертификации.

Получение протоколов испытаний на продукцию

Протоколы испытаний можно получить только в аккредитованных лабораториях после проведения ряда исследований. Следует отметить, что лаборатория может быть как составной частью сертификационного центра, так и самостоятельным объектом деятельности, но в том и другом случае, она в обязательном порядке обязана быть аккредитована в конкретной области осуществления сертификационных испытаний.

Зачем нужны протоколы испытаний на продукцию?

В любой действующей системе сертификации закреплены определенные стандарты безопасности, надежности и качества, которым должен соответствовать тот или иной вид продукции. С целью определения всех характеристик и показателей продукции согласно установленным нормативно-правовым актам назначается определенный набор исследований, в который входят и лабораторные испытания.

Данные испытания проводятся только квалифицированными специалистами с применением самых современных технических средств, позволяющих с точностью удостоверить качество выпускаемого продукта. После осуществления всех предусмотренных исследований оформляются протоколы испытаний на продукцию, которые являются основанием для выдачи разрешительного документа, позволяющего на законном основании производить продукцию и реализовывать ее на потребительский рынок страны.

Примеры систем сертификации

На сегодняшний день протоколы испытаний можно оформить в различных системах сертификации, включая следующие:

  • Система сертификации продукции для защиты прав потребителей
  • Система сертификации для пожарной безопасности
  • Система сертификации для гигиенической безопасности

Получение протокола испытаний на продукцию — это реальная возможность доказать потребителям его качество, а также документально удостоверить соответствие свойств товара всем требованиям законодательства.

Протокол испытаний является документом, где указываются качественные показатели продукции, согласно ее свойствам и назначению. Это важно для различных отраслей, таких как пищевая промышленность или область пожарной и гигиенической безопасности.

По всем вопросам оформления протоколов испытаний на продукцию вы можете обратиться к специалистам центра сертификации Ростест Урал.

Протокол прикладного уровня

Протокол прикладного уровня — сетевой протокол верхнего уровня (7-го в сетевой модели OSI и 4-го в стеке протоколов TCP/IP), обеспечивает взаимодействие сети и пользователя. Уровень разрешает приложениям пользователя иметь доступ к сетевым службам, таким как обработчик запросов к базам данных, доступ к файлам, пересылке электронной почты. Также отвечает за передачу служебной информации, предоставляет приложениям информацию об ошибках и формирует запросы к уровню представления. Пример: HTTP, POP3, SMTP.

Сетевая модель OSI

Для улучшения этой статьи желательно:

  • После исправления проблемы исключите её из списка.
  • Удалите шаблон, если устранены все недостатки.

В другом языковом разделе есть более полная статья Application Layer (англ.).

Вы можете помочь проекту, расширив текущую статью с помощью перевода

Пример

Материалы о сетях на базе TCP/IP

В сети можно найти огромное количество материала о том, как функционируют сети на базе стека протоколов TCP/IP, а также как писать компьютерные программы с сетевыми возможностями. При рассмотрении компьютерных сетей часто углубляются в описание физических основ и структур данных, передаваемых по сети, а при рассмотрении сетевого программирования основное внимание уделяют интернет-сокетам.

Экспериментирование с сетевыми протоколами

Но при изучении и исследовании хочется большего, например, поэкспериментировать с пакетами сетевых протоколов. Многие сетевые протоколы реализованы в ядре операционной системы, и что-либо изменить может оказаться сложной задачей, так как это требует навыков в написании драйверов для операционной системы. Но использование специализированных библиотек позволяет работать с протоколами на низком уровне из пространства пользователя.

В ходе работы над статьёй я написал небольшое приложение, которое послужит отправной точкой для понимания компьютерных сетей и семейства протоколов TCP/IP. С приложением можно экспериментировать, получая дополнительные знания.

Приложение — простое и понятное и, надеюсь, упростит изучение материалов статьи. Ведь именно радость первой победы даёт мотивацию, достаточную для того, чтобы потратить гораздо больше времени на изучение темы.

Важные понятия

В статье изложены наиболее важные с моей точки зрения понятия, которые должен знать любой программист, хоть как-то сталкивающийся с компьютерными сетями. Так что без теоретических сведений не обошлось.

Компьютерные сети

Локальные и глобальные компьютерные сети

В зависимости от охвата территории компьютерные сети бывают:

▍ Различные типы сетей

  • PAN (Personal Area Network) – сеть, образуемая различными датчиками, подключенными к смартфону.

  • LAN (Local Area Network) – компьютерная сеть устройств, подключенных к домашнему роутеру.

  • MAN (Metropolitan Area Network) – сеть абонентов провайдера в городе.

  • WAN (Wide Area Network) – весь интернет, предоставляемый провайдером.

▍ Сетевые модели

Под сетевой моделью понимаются концептуальные основы сетевого взаимодействия, которые стандартизируют сетевые процессы. Они разделяют сетевые компоненты на уровни (слои), каждый из которых имеет свои функции и назначение.

Наиболее распространенные сетевые модели:

  1. OSI-модель (Open Systems Interconnection) – семиуровневая модель.
  2. TCP/IP-модель – четырехуровневая модель.

Схема моделей

Следует отметить, что номера слоев часто используются из модели OSI, даже когда речь идет о сетевой модели TCP/IP. Например, термин Layer 2 подразумевает 1-й уровень (канальный уровень) в модели TCP/IP.

▍ Модель TCP/IP

Стандарты интернета и протоколов TCP/IP регламентируются документами Request For Comments (RFC). Основные документы, описывающие модель TCP/IP:

  • RFC 1122 (Requirements for Internet Hosts – Communication Layers)
  • RFC 1123 (Requirements for Internet Hosts – Application and Support)

Для понимания основ работы TCP/IP модели достаточно изучить эти документы.

Основные понятия:

  • IP-сеть: множество хостов, соединенных между собой, образуя сеть.
  • UDP-датаграмма и TCP-сегмент: основные виды сообщений в IP-сети.
  • IP-датаграмма: сообщение, помещенное внутрь IP-сети и передаваемое между хостами.
  • MTU (Maximum Transmission Unit): максимальный размер сообщения, который может быть передан через физический интерфейс.

▍ Как работает сеть на основе TCP/IP

Сеть на базе TCP/IP состоит из хостов, соединенных между собой при помощи устройств передачи данных, таких как маршрутизаторы и коммутаторы. Сообщения в сети представлены в виде UDP-датаграмм или TCP-сегментов, содержащих заголовок и данные. Для передачи сообщения в IP-сети оно помещается в IP-датаграмму. Если размер IP-датаграммы превышает MTU, она фрагментируется на несколько IP-пакетов. IP-пакет передается на логический интерфейс хоста в соответствии с таблицей маршрутизации.

Логический интерфейс и физический интерфейс

Логический интерфейс сам непосредственно не может передать IP-пакет, он использует физический интерфейс. Физический интерфейс передаёт данные фреймами.

Фрейм имеет заголовок и полезные данные (payload). В заголовке фрейма указывается MAC-адрес получателя, MAC-адрес отправителя и какому протоколу принадлежат данные в payload (Ethertype). Адрес отправителя известен, это МАС-адрес интерфейса отправляющего хоста. Для протокола IPv4 Ethertype=0x0800.

Иначе IP-пакет или отвергается или пересылается далее в соответствии с таблицей маршрутизации хоста. При отсылке он опять передаётся на логический интерфейс. Там упаковывается во фрейм и отсылается.

Это упрощённое описание, так как я не углублялся в виртуальные сетевые интерфейсы, виртуальные частные сети, PPP-соединения, как работают сетевые транспортные протоколы TCP и UDP.

MAC-адресация и индентификация сетей

Что касается MAC-адресации, вам достаточно знать, что в большинстве случаев физический интерфейс имеет уникальный MAC-адрес, состоящий из 6 байт.

Интернет проектировался как множество соединённых компьютерных сетей, хосты которых взаимодействуют между собой.

Для идентификации сетей используется то же адресное пространство, что и для идентификации интерфейсов хостов. Как это реализуется?

Например, запись 192.168.0.0/24 означает: сеть имеет идентификатор 192.168.0.0, 24 первых бита используются для идентификации сети. Для кодирования хостов используется 8 последних бит. Максимальное количество хостов в сети — 254 (0 — сеть, 255 — широковещательный адрес). Но это ещё не всё. Не все сети могут быть видимыми в сети и некоторые из них используются для специальных целей.

▍ Сегмент сети, подсеть, широковещательный домен, виды адресов

С целью упрощения управления, сети на канальном уровне разделяются на сегменты, а на сетевом уровне на подсети. И сегмент сети и подсеть являются широковещательным доменом. Иногда подсети называют также сегментами, однако нужно понимать, что подразумевается сегмент сети на уровне L3.

Про сертификаты:  Инструкция, руководство по эксплуатации для мФУ лазерный Xerox B1025DNA, белый (1080874) - скачать в интернет-магазине Ситилинк - Ростов-на-Дону

Сетевое устройство или хост могут иметь следующие типы адресов:

  • Индивидуальный адрес — это уникальный адрес в сегменте сети, или локальной (глобальной) сети.

  • Широковещательный адрес — общий для всех сетевых устройств, имеющих MAC-адрес или для всех хостов подсети. Сообщения, посылаемые на широковещательный адрес, будут получены всеми узлами.

  • Можно сделать так, чтобы сообщения отсылались только тем узлам, которые в них заинтересованы. Для этого используются групповые адреса. Но это уже отдельная тема, требующая отдельного и более широкого объяснения.

▍ Маршрутизация в IP-сетях

Маршрутизация обычному пользователю сети выглядит следующим образом. Если необходимо отправить IP-пакет по определённому адресу, то каждый раз просматривается таблица маршрутизации хоста, и на основании её определяется, нужно его отправлять на хост внутри сети, которой принадлежит отправляющий хост, или нужно его перенаправить на особый хост (маршрутизатор, шлюз), который решит, что делать с ним дальше. В локальных домашних сетях часто таким шлюзом является WiFi-роутер.

WiFi-роутер обладает рядом функций и фактически состоит из нескольких устройств. Одной из важных функций WiFi-роутера является функция трансляции сетевых устройств (Network Address Translation — NAT), позволяющая устройствам из локальной сети получить доступ в интернет. Доступ этот немного ограниченный, но большинству пользователей этого достаточно.

▍ Расчёт контрольной суммы

При передаче данных по сети могут происходить различные ситуации, когда принятые данные могут отличаться от тех, которые были переданы. Чтобы определить такие случаи, с данными передаётся контрольная сумма, вычислив которую на принимающей стороне и сравнив с принятой, можно дать ответ, передались ли данные верно, или где-то произошла ошибка передачи данных. Как правило, сообщения с неверной контрольной суммой отвергаются, и сообщение считается потерявшимся. На различных уровнях стека используются различные варианты подсчёта контрольной суммы. Например, для Ethernet-фрейма используется CRC-32. Для вычисления контрольной суммы IP-заголовка, ICMP-сообщения, UDP-датаграммы и TCP-сегмента используется расчёт контрольной суммы с использованием обратного кода (one’s complement checksum). Чтобы не тратить процессорное время на вычисление контрольных сумм для передаваемых Ethernet-фреймов или IP-пакетов, используется механизм разгрузки (offloading), который заключается в том, что контрольные суммы вычисляются сетевым адаптером.

▍ Порядок байтов и битов

Данные в компьютере хранятся и обрабатываются в виде двоичного кода. Двоичный код подразумевает, что информация кодируется при помощи двух значений — 0 и 1. Один 0 или одна 1 содержат минимальное количество информации, которое называется бит. Процессор обычно оперирует не отдельными битами, а порциями по 8, 16, 32, 64 и т. д. Минимальная такая порция это 8 бит. 8 бит называются байтом. Можно сказать, что информация в памяти хранится в виде последовательности байт. Но байт может принимать только 256 значений, что явно недостаточно для большинства математических операций, поэтому байты группируются в слова (2 байта), двойное слово (4 байта) и т. д. Но хранить эти группы байт в памяти можно по-разному. Возьмём двойное слово 4 байта 0x12345678, оно состоит из 4 байт со значениями 0x12, 0x34, 0x56, 0x78. В памяти их можно разместить в следующем порядке 0x12, 0x34, 0x56, 0x78 или 0x78, 0x56, 0x34, 0x12. Как они будут размещены в памяти зависит от архитектуры процессора. Например в архитектуре x86 это будет порядок, при котором байт с менее значимыми битами будет храниться раньше байта с более значимыми битами.

Так исторически сложилось, что данные в пакетах, передаваемых в IP-сетях, имеют сетевой порядок байтов, который подразумевает, что байт, содержащий старшие биты, хранится первый. Что касается порядка битов, то если не углубляться в вопросы кодирования передаваемых данных на уровне сигналов, порядок не важен, так как сетевой адаптер сделает всё без вмешательства программиста.

Cтек протоколов TCP/IP

Существует ряд протоколов, на которых всё основывается:

Рассмотрим их поподробнее. Данные передаются порциями, которые называются Protocol Data Unit (PDU). PDU состоит из заголовка (header) и полезных данных (payload). PDU одного протокола в полезных данных могут содержать PDU другого протокола. Это называется инкапсуляцией. В зависимости от уровня, на котором работает сетевой протокол, PDU могут называться по-разному:

Но в разной литературе могут не следовать правилу, например, часто можно встретить IP-датаграмму, TCP-пакеты или UDP-пакеты. А в программах по анализу трафика в сети все PDU называются пакетами. По мере приобретения опыта, вы будете лучше ориентироваться, что имелось в виду при употреблении того или иного термина.

Обычно при описании протокола Ethernet опускаются чуть ли не до бит, а то и сигналов, передаваемых по сети. Я не буду углубляться в такие подробности, к тому же с большой долей вероятности вы используете WiFi-соединение, поэтому различные средства для перехвата сетевого трафика, как правило, будут показывать его как IP-пакеты, инкапсулированные в Ethernet II фреймы. Эти фреймы имеют мало чего общего с фреймами WiFi, но унифицируют работу с канальным уровнем. Вообще, информация о том, как работает WiFi, заслуживает отдельной статьи.

Ethernet-фрейм, который передаётся или принимается драйвером сетевого адаптера, состоит из заголовка и полезных данных.

Что это такое и как она работает

Часто можно встретить информацию о минимальном размере Ethernet-фрейма, преамбуле и контрольной сумме. Но это уровень реализации драйвера сетевого адаптера или аппаратной реализации самого адаптера, поэтому не буду рассматривать его в статье. Для нас Ethernet-фрейм содержит MAC-адрес получателя, MAC-адрес отправителя, тип фрейма и сами данные.

▍ Протокол IP

Оригинальное описание протокола находится в RFC 791 Internet Protocol — DARPA Internet Program Protocol Specification.

▍ Структура пакетов

Структура IP-пакета приведена ниже.

Что это такое и как она работает

▍ IP-пакеты и IP-датаграммы

Протокол IP позволяет передавать данные порциями. В литературе можно встретить два похожих термина: IP-датаграмма и IP-пакет. Иногда их неверно употребляют. Я хочу уточнить это различие. IP-датаграмма — это те данные, которые передаются на сетевой уровень, а IP-пакет — это те данные, которые передаются в IP-сети. Размер IP-датаграммы ограничивается максимальным значением в поле Total Length. Размер IP-пакета ограничивается MTU (Maximum Transmission Unit) — максимально возможное количество данных, которые могут быть переданы одним фреймом на канальном уровне. Чтобы передать IP-датаграмму, которая содержит полезных данных больше, чем может поместиться в один IP-пакет, используется фрагментация.

▍ Фрагментация IP-датаграмм

Протокол IP поддерживает фрагментацию IP-датаграмм. Cуть фрагментации заключается в том, что максимальный размер передаваемых данных в одной IP-датаграмме составляет 65535 байт (октетов), а максимальный размер данных, который может поместиться в PDU канального уровня (MTU), гораздо меньше (обычно он составляет 1500 или около байт). Если размер IP-датаграммы больше MTU, она будет разбита на несколько IP-пакетов, каждый из которых можно будет передать в PDU канального уровня. При получении IP-пакетов они будут собраны в IP-датаграмму, и она будет разобрана на транспортном уровне.

Все IP-пакеты одной IP-датаграммы имеют одинаковое значение в поле Identification, а поле Offset содержит смещение в payload IP-датаграммы.

Хотя фрагментация позволяет соединять хосты в разнородных сетях, её желательно избегать, так как она усложняет передачу данных и увеличивает нагрузку на сеть из-за создания новых IP-пакетов и перерасчёта контрольных сумм. Поэтому желательно, чтобы TCP-сегмент или UDP-датаграмма имела размер не больше MTU по пути следования IP-пакетов.

▍ Протокол ARP

Что это такое и как она работает

▍ Протокол ICMP

Описание протокола приведено в RFC 792 (Internet Protocol DARPA Internet Program Protocol Specification) .

▍ Структура сообщений

Что это такое и как она работает

Хотя сообщения, используемые протоколом, инкапсулируются в IP-датаграммы, ICMP причисляют к тому же уровню, что и IP — сетевому.

▍ Протокол UDP

Протокол позволяет двум процессам обмениваться UDP-датаграммами. Каждая UDP-датаграмма содержит в себе порт отправителя (Source Port), порт получателя (Destination Port), длину дейтаграммы (Length), контрольную сумму (Checksum) и собственно сами передаваемые данные.

При расчёте контрольной суммы добавляется псевдозаголовок, который не передаётся, а только участвует в расчёте контрольной суммы.

Протокол используется в качестве транспортного протокола там, где на транспортном уровне допускается дублирование получаемых данных, пропуск данных или не важен порядок, в котором данные будут доставлены.

Как правило, обработка этих случаев возлагается на протоколы уровня приложений или не осуществляется вовсе. Например, в потоковом видео или аудио данные пропускаются, так как повторная передача данных является в этом случае бессмысленной. Но если вы хотите гарантированную доставку данных на транспортном уровне, то вам необходимо использовать протокол TCP.

Структуры псевдозаголовка, используемого при вычислении контрольной суммы и UDP-датаграммы, приведены ниже.

Что это такое и как она работает

Что это такое и как она работает

▍ Протокол TCP

Протокол TCP — самый сложный из всех, приведённых в статье. Назначение протокола TCP — создать надёжное виртуальное полнодуплексное соединение между процессами. На данный момент самое свежее описание протокола приведено в RFC 9293 — Transmission Control Protocol (TCP).

Сообщения, используемые в протоколе TCP, называются TCP-сегментами. Просьба не путать с сегментами сети. Они с ними не имеют ничего общего. При расчёте контрольной суммы для TCP-сегмента как и в UPD используется псевдозаголовок. Но если для UDP расчёт контрольной суммы не является обязательным, то для TCP он обязателен.

Структура псевдозаголовка и TCP-сегмента приведена ниже.

Что это такое и как она работает

Что это такое и как она работает

Как видно из структуры заголовка, в протокол TCP, как и в протокол IP, заложены возможности для расширения и эволюции протокола при помощи поля Options.

Про сертификаты:  Ошибки в отчетах ФСС

Ключевые понятия, необходимые для понимания TCP:

Для надёжной передачи данных используются Sequence Number, Acknowledge Number и Window Size. Рассмотрим, как они работают вместе. Передаваемые данные разбиваются на TCP-сегменты.

За каждым TCP-сегментом закрепляется Sequence number.

Sequence Number может принимать значения от 0x00000000 до 0xffffffff. Если каждому передаваемому байту присвоить номер и разбить на сегменты, то Sequence Number — это номер первого байта каждого сегмента.

Sequence Number служит для упорядочивания сегментов, которые пришли не в порядке их отсылки (out of order), подтверждения полученных сегментов (acknowledgement), а также для повторной отсылки потерявшихся сегментов (retransmitting).

Каждый передаваемый по сети TCP-сегмент содержит поля Sequence Number и Acknowledge Number. Sequence Number идентифицирует отправляемый сегмент, а Acknowledge Number указывает на то, какой сегмент ожидается.

Значения Sequence Number и Acknowledge Number позволяют отслеживать прогресс передачи данных по TCP-соединению. Каждая сторона генерирует случайное число из диапазона от 0 до 2^32, которое называется ISN. Это число является началом для генерирования Sequence Numbers отсылаемых сегментов.

Сегменты отсылаются только те, которые попадают в окно. Размер этого окна сообщается отправителю при установлении соединения, но может быть изменён принимающей стороной в дальнейшем.

По мере получения подтверждений с принимающей стороны, окно сдвигается по кругу. Перед передачей данных, необходимо установить соединение. При установке соединения стороны обмениваются параметрами будущего соединения. Любая сторона может инициировать разрыв соединения.

При установке соединения стороны обмениваются параметрами Sequence Number, Acknowledge Number, Window Size, а также параметрами, которые передаются в поле TCP Options (MSS, Window scale).

▍ Флаги TCP

Для управления TCP-соединением используются флаги в отсылаемых TCP-сегментах. Наиболее важными являются:

▍ Опции TCP

Протокол TCP разработан таким образом, что его можно расширять используя механизм опций. Опции это дополнительные поля, которые передаются в заголовке. Например, при установлении соединения стороны обмениваются опциями, Window Scale, MSS. В зависимости от настроек стека в TCP-сегменте может передаваться опция TCP timestamp. Если опция не поддерживается, она игнорируется стеком.

▍ Открытие соединения, передача данных, закрытие соединения

В RFC 9293 приведено подробное описание и представлена диаграмма состояний для TCP-соединения. Я не буду её здесь приводить. При желании вы её можете разобрать. Но хочу сразу сказать, её сложно читать. Ниже представлена диаграмма последовательностей для жизненного цикла TCP соединения.

Что это такое и как она работает

Обратите внимание, как меняются значения в полях SequenceNumber и AcknowledgeNumber предаваемых TCP сегментов.

Если при установлении TCP-соединения используется 3-way handshake, то с закрытием существует множество различных вариантов. На диаграмме приведен 4-way handshake, который будет в случае, если сервер не обработал все данные от клиента при получении TCP-сегмента FIN,ACK. В случае, если данные все обработанные, то выполняется 3-way handshake (сервер отсылает только сегмент FIN,ACK).

Чтобы вам было понятнее в механизме передачи и приёма TCP-сегментов, я нарисовал схематический рисунок.

Что это такое и как она работает

▍ Настройка стека TCP/IP

Работу стека протоколов TCP/IP можно настраивать в операционной системе, только делать это лучше в том случае, если вы точно осознаёте, что именно вы изменяете и зачем.

В Windows стек можно настроить командой netsh, В Linux/MacOS — командой sysctl. В зависимости от операционной системы перечень и значения по умолчанию настраиваемых параметров могут отличаться. Например, в Windows tcp timestamps отключены по умолчанию. Чтобы включить, нужно выполнить команду:

netsh int tcp set global timestamps=enabled

В Linux, напротив, tcp timestamps включены, если вы хотите их отключить нужно выполнить команду:

sysctl -w net.ipv4.tcp_timestamps=0

В MacOS включить/отключить tcp timestamps у вас не получится.

▍ Протокол DHCP

2. Если в сети присутствует DHCP-сервер, он отвечает unicast-сообщением DHCP Offer, в котором содержится предлагаемая конфигурация для хоста.

4. Сервер отвечает unicast-сообщением DHCP Acknowledge, которое говорит о том, что конфигурация хосту назначена.

Диаграмма последовательностей приведена ниже.

Что это такое и как она работает

Описание протокола приведено в RFC 2131 — Dynamic Host Configuration Protocol. DHCP-протокол является расширением более раннего протокола BOOTP (RFC 951 Bootstrap Protocol). Поэтому заголовок DHCP-сообщения почти полностью совпадает с BOOTP-сообщением. Поле options всегда начинается с магического числа 0x62825363, за которым следуют DHCP-опции, описанные в RFC 2132 DHCP Options and BOOTP Vendor Extensions .

Каждая опция состоит из кода, длины и одного или нескольких октетов сообщения. Исключение составляют опции с кодами 0x00 (заполнитель) и 0xff (конец опций). Размер DHCP-сообщения в октетах должен быть кратным четырём, поэтому после опции с кодом 0xff может быть одна или несколько опций с кодом 0x00.

Как выглядит DHCP-сообщение, приведено ниже:

Что это такое и как она работает

▍ Протокол DNS

Протокол DNS регламентируется RFC 1035 DOMAIN NAMES — IMPLEMENTATION AND SPECIFICATION.

Программы типа nslookup и функции в Winsock или glibc запутывают в понимании DNS. Я бы советовал начинать изучение DNS с экспериментов с утилитой dig и анализа трафика. DNS нужно рассматривать, не привязываясь к IP. DNS — это распределённая иерархическая база данных доменов.

Чтобы убедиться, что это действительно база данных можете зайти на сайт и увидеть тому подтверждение.

Домены не существуют сами по себе, они хранятся серверами имён. Информация, связанная с доменом, объединяется в зону, которая обслуживается конкретным сервером имён.

Зона — это информация о доменах, размещённая на DNS-сервере.

Корневую зону доменов интернета можно посмотреть здесь.

Корневая зона доменов обслуживается 13 корневыми доменными серверами.

▍ Ресурсная запись

Система доменных имён позволяет структурировано хранить информацию. Доменные имена организуются в древовидную структуру, листьями которой являются ресурсные записи (Resource Record (RR)). Каждая RR имеет класс и тип. Как правило, классы могут принимать следующие значения:

Хотя можно встретить классы CH и HS, применение их специфическое, и с большой долей вероятности вы с ними не столкнётесь.

А вот типов RR гораздо больше, и часть из них знать обязательно:

Обычно в примерах по сетевому программированию приводится именно работа с API резолвера. Я же в практической части покажу, как можно послать запрос DNS-серверу на низком уровне, сформировав IP-пакет, содержащий DNS-запрос.

Простой DNS-запрос выглядит следующим образом:

Что это такое и как она работает

Пример DNS-ответа приведён ниже:

Что это такое и как она работает

Как правило, запросы и ответы отсылаются с использованием UDP в качестве транспортного протокола. Однако если ответ слишком большой, сервер вернёт флаг TC. Это означает, что для получения полного ответа нужно использовать TCP в качестве транспорта.

Сетевое программирование и анализ сетевого трафика

Практически любая современная операционная система имеет поддержку работы с семейством протоколов TCP/IP. Набор компонентов операционной системы, которые обеспечивают коммуникацию посредством семейства протоколов TCP/IP, называют стеком протоколов. Разные операционные системы предоставляют доступ к стеку, используя различные программные интерфейсы. Наиболее распространённым является интерфейс сокетов.

Хотя и существуют различия в этом интерфейсе для различных операционных систем, большинство функций схожи. Работа с сокетами подразумевает программирование на языке С. Однако для различных языков написаны обёртки, которые позволяют кроссплатформенно работать с сокетами. В зависимости от языка, обёртки могут предоставлять больше или меньше функций. Например обёртка в Python больше зависит от платформы, на которой исполняется, чем обёртка в Java.

▍ Анализ пакетов в сети

Обычно в литературе по сетевым технологиям рассматриваются основы компьютерных сетей, потом сокеты. Но то, как именно можно создать и послать пакет, структура которого подробно расписана, не приводится. Я хочу восполнить этот пробел.

Инструкции процессора в операционной системе могут исполняться в режиме ядра или режиме пользователя. Большинств кода, который пишет программист — это инструкции процессору, которые выполняются в режиме пользователя. В режиме ядра выполняется код драйверов и ядра операционной системы.

Стек TCP/IP выполняется в режиме ядра, а из режима пользователя он, как правило, доступен только через вызов АPI-сокетов. Поэтому программист только может выполнить высокоуровневые операции, такие как открыть TCP-соединение, передать данные по TCP-соединению или передать данные как UDP-датаграмму. Доступа к формируемым пакетам он не имеет.

Чтобы получить доступ к формируемым пакетам, используются так называемые Raw-сокеты. Замечу, что в Windows Raw-сокеты имеют ограниченный функционал. Например, невозможно создать Raw-сокет, который бы позволял работать с Ethernet-фреймами. Поэтому для получения доступа к формированию Ethernet-фреймов используют специальный NDIS-драйвер и библиотеку npcap. В Linux же достаточно же просто создать AF_PACKET Raw-сокет.

Библиотека предоставляет высокоуровневый, если так можно сказать, API для формирования, фильтрации и перехвата пакетов, который прячет детали реализации для разных платформ.

Для Windows существует библиотека npcap, для Unix-подобных систем — libpcap. Python-библиотека Scapy позволяет писать платформо-независимые приложения, игнорируя этот факт. Также она поддерживает многие сетевые протоколы. И содержит средства для разбора, генерации и отсылки пакетов из пространства пользователя. Например, расчёт контрольной суммы для заголовка IP-пакета, указание правильного Ethertype или Protocol при инкапсуляции пакетов. Библиотека удобна для экспериментирования и исследования сетевых протоколов.

Программа Wireshark, можно сказать, самая распространённая программа для анализа сетевого трафика. При помощи графического интерфейса, можно записывать сетевой трафик на диск, фильтровать пакеты, рассматривать их структуру, отслеживать работу TCP-сессий и многое другое. Совместно с Scapy, это, наверное, лучший набор для изучения основ сетевых протоколов и проведения различных экспериментов.

Про сертификаты:  ГОСТ Р 52745-2007 Комплексная система контроля качества. Контроль качества материалов и полуфабрикатов, используемых при изготовлении изделий авиационной, космической, оборонной техники и техники двойного применения, на предприятиях-поставщиках (Переиздание) от 06 сентября 2007 -

Примеры программного кода

Далее я хочу привести фрагменты из моего приложения для упрощения понимания основ TCP/IP.

▍ Создание ARP-запроса

def create_arp_request(ip): return Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)

def create_ping_request(ip): return IP(dst=ip)/ICMP()

▍ Создание сообщений DHCP Discover и DHCP Request

return IP(dst=dns_server)/UDP()/DNS(rd=1, qd=DNSQR(qname=host_name))

▍ Организация TCP соединения

Так как мы вмешиваемся в стандартную работу стека протоколов TCP/IP, и стек не догадывается о нашем вмешательстве, то он может отсылать RST-сегменты на сегменты, которые он не ожидает. Чтобы такого не было, нам придётся временно запретить отсылку RST-сегментов. В MacOS это выполняется при помощи команды pfctl. В Linux можно использовать iptables.

Изначально я хотел осветить вопросы перехвата трафика в компьютерных сетях для начинающих, но потом подумал, что было бы хорошо осветить основы компьютерных сетей с точки зрения программиста, чтобы дать начальные знания. Тема оказалась очень обширная, и, к сожалению, размер статьи не позволил включить всё. Но для понимания основ и примеров я привёл достаточно материала.

Использование Scapy позволяет экспериментировать с отсылкой кастомных пакетов из пространства пользователя, написав минимальное количество кода, не погружаясь в дебри программирования драйверов. А Wireshark удобен для анализа пакетов, передаваемых по сети и изучения их структуры.

Я написал статью о том, чего мне не хватало, когда я сам начинал изучать сетевое программирование.

Примеры, приведённые в статье, не годятся для использования в реальных приложениях, они всего лишь позволяют разобраться в основах сетевых протоколов. C большой долей вероятности, вам не понадобится собственная реализация ARP-протокола, написание DHCP-клиента, DNS-клиента или реализация команды ping. Но экспериментируя с ними можно улучшить своё понимание сетевых протоколов, а ещё, увидеть как ведут себя реализации сетевых протоколов в различных непредвиденных ситуациях.

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх 🕹️

Что это такое и как она работает

Протоколы передачи данных – это набор правил и соглашений, которые будут определять способ обмена информацией между устройствами и программами в Интернете (сети). Они имеют огромное значение для обеспечения безопасности, надежности и эффективности соответствующих процессов.

Для более удобного получения и отправки информации упомянутые операции разделяются. Совместно они называются клиент-серверной моделью. Здесь клиент будет отвечать за отправку запроса, а сервер – принимать его и возвращать ответ.

Перед изучением протоколов обработки данных рекомендуется запомнить два ключевых определения. Они пригодятся всем, кто работает с Интернетом:

Теперь можно более подробно рассмотреть протоколы связи. А еще – модель OSI, которая имеет с ними тесную связь.

Виды сетей

Изучая, что такое протокол передачи данных, рекомендуется сначала хорошо разобраться с сетями. Они могут быть разных видов. Каждая имеет свои ключевые особенности:

Также стоит обратить внимание на модель OSI. Обычно на ее примере начинается изучение существующих сетевых уровней. Каждому отводится своя роль и задачи. Далее они будут рассмотрены более детально.

О модели OSI

Когда компьютерные сети только зарождались и появлялись различные протоколы, не было моделей, которые бы могли определить общие стандарты их работы и подходы к проектированию. Каждая организация, которая трудилась над созданием сетей, реализовывала собственные задумки. Они не могли работать с решением от других корпораций.

Такая ситуация стала настоящей проблемой. Сети, которые должны были объединить компьютеры, из-за различий в архитектурах создавали себе определенные преграды для расширения. В 1977 году проблема была решена компанией ISO. Так называется международная организация по стандартизации. В течение 7-ми лет она изучала реализации сетей и к 1984 году представила модели OSI.

OSI – это Open System Interconnection, что в переводе буквально означает «Воздействие открытых систем». Она включает в себя 7 сетевых уровней.

Физический уровень

Физический уровень решает вопросы, которые связаны с физическими аспектами передачи данных. Методы обмена информацией, характеристики сетевой среды, модуляция сигнала – все это относится к соответствующему уровню.

Канальный уровень

Канальный уровень будет функционировать в рамках локальной сети. Он формирует полученный от физического уровня поток битов в кадр: обнаруживает начало и конец сообщения. Здесь же будут решаться задачи адресации внутри локальной сети, поиск ошибок, проверка целостности данных. Основные сетевые протоколы тут – это Ethernet и PPP.

Сетевой уровень

На нем функционируют протоколы сетевого взаимодействия. Они необходимы для построения крупных сетей из отдельных подсетей. Здесь вводится общая адресация для идентификации имеющихся устройств, выполняется маршрутизация (выбор оптимального пути передачи информации). Пример – протокол IP. С его помощью каждое оборудование получает уникальный адрес, функционирующий на сетевом уровне. Основными протоколами служат IP и ICMP.

Транспортный уровень

Тут производится передача информации между процессами на различных устройствах (компьютерах). Он называется также уровнем сквозной передачи данных.

Пакеты тут доставляются до определенного адресата на компьютере, которому присваивается особый номер – порт. Порты потребуются для того, чтобы информация могла быть получена той службой или процессом, который их запрашивал изначально. Тут функционируют протоколы TCP и UDP, которые обеспечивают разный сервис:

Других функций transport layer не выполняет.

Сеансовый уровень

Проектировщики рассматриваемой системы здесь подразумевали организацию управления сеансами связи. Под управлением принято понимать установку и разрыв соединения, а также синхронизацию и иные процессы.

Представительный уровень

Его задачей служит представление данных в понятном для отправителя и получателя виде. Сюда относятся разнообразные варианты представления данных:

Сюда же относится шифрование и дешифрование данных.

Прикладной уровень

С ним работают конечные пользователи. Тут по протоколу HTTP будут работать браузеры, электронная почта, приложения для аудио и видеосвязи и так далее.

Протоколы OSI не всегда относятся к одному логическому уровню. Иногда они распространяются на несколько «слоев». Пример – Ethernet функционирует одновременно и на физическом, и на канальном уровнях.

Самые популярные протоколы

Что такое протокол для передачи данных, понятно. Существуют различные типы этого элемента. Они будут работать на различных сетевых «слоях» и выполнять разные функции. Далее будут рассмотрены наиболее популярные протоколы передачи информации.

IP – Internet Protocol

Работа IP сравнима с обычным почтовым отделением: протокол направляет IP-пакеты по интернету подобно рассылке почтой писем по всему миру. В процессе доставка почта использует пункты передачи: из отделения посылка сначала попадает на поезд, затем – на грузовик, а в самом конце – адресату. В интернете тоже есть «пункты передачи» – маршрутизаторы. Их цель – направить пакет в пункт назначения по наиболее короткому пути. Если все идет хорошо, пакет прибудет на ближайший к получателю маршрутизатор, который точно знает, куда его перенаправить. Но бывает и так, что какой-то из маршрутизаторов на пути выходит из строя. В этом случае будет выбран другой путь.

IP записывается в виде 4-х чисел от 0 до 255. DNS – протокол, которые связывает IP с понятным для людей именем. Цифры превращаются в привычный «Гугл».

DNS похож на поиск и вызов контактов в телефоне. Когда человек хочет позвонить, он находит нужное имя и нажимает на кнопку «Звонок». В этот момент происходит соединение.

SSL/TLS

Разбираясь, что такое протокол для передачи данных, а также в их разновидностях, стоит обратить внимание на SSL/TLS. Первый компонент – это криптографический протокол шифрования запросов и ответов. Он необходим для того, чтобы данные могли безопасно перемещаться по Интернету. Второй элемент – его более совершенная (новая) версия. SSL уже почти не используется, но это название оказалось настолько популярным, что оно до сих пор встречается. Любой SSL-сертификат у хостинг-компаний – это TLS-сертификат.

TCP/UDP

Среди протоколов обмена информацией хорошо известны TCP и UDP. Они отвечают за передачу данных и функционируют поверх IP, но с некоторой разницей. TCP доставляет данные, минуя потери. Он чаще используется для передачи:

UDP доставку не гарантирует, но работает в несколько раз быстрее. Он используется тогда, когда скорость имеет большую роль, чем надежность. Примером может послужить передача аудиосообщений или видеотрансляции.

HTTP и HTTPS

Это протоколы обмена данными. Пользователи за счет них могут просматривать в браузерах веб-страницы. HTTPS – это не самостоятельный протокол, а расширение HTTP. Он является более безопасным за счет использования SSL/TLS для шифрования обычных запросов и ответов. Увидеть тип используемого на веб-портале протокола можно в браузерной строке. Обычно соответствующая информация отображается перед адресом.

Теперь понятно, что такое протоколы передачи данных. Лучше изучить их получится на дистанционных компьютерных курсах. Там в срок от нескольких месяцев до года научат работать с сетями и протоколами.

P. S. Интересуют компьютерные сети, сетевые технологии, протоколы передачи данных? Обратите внимание на следующие курсы в Otus:

Протокол в IT — это набор правил, по которым передаются данные. С помощью протоколов связываются между собой компьютеры в сети, разные устройства и программы. Они выполняют определенные правила и поэтому понимают друг друга.

Протоколы в информатике описывают, в каком формате будут передаваться данные, как будет выглядеть процедура их передачи. Еще в них обычно прописано, как устройства будут «договариваться» друг с другом при контакте и что делать с ошибками, если они возникнут. Например, протокол доступа к каталогам (LDAP) регламентирует способ получения и изменения информации в каталоге.

Оцените статью
Мой сертификат
Добавить комментарий