TCP/IP
Стек протоколов TCP/IP - это сетевая модель, которая описывает набор протоколов, используемых для передачи данных в компьютерных сетях. Он состоит из четырех уровней (или слоев), каждый из которых предназначен для выполнения определенных функций. (Transmission Control Protocol/Internet Protocol, протокол управления передачей/протокол интернета) — сетевая модель, описывающая процесс передачи цифровых данных. Она названа по двум главным протоколам, по этой модели построена глобальная сеть интернет. Делиться на 4 уровня и регламентирует взаимодействие между этими уровнями.
1 уровень. Канальный уровень.
Link Layer. Этот уровень отвечает за передачу данных между устройствами внутри одной локальной сети
Он включает в себя протоколы, такие как Ethernet, Wi-Fi и PPP (Point-to-Point Protocol), которые обеспечивают непосредственное физическое соединение между устройствами и передачу данных по этим соединениям.
Происходит "физическая" передача информации между устройствами: сетевыми картами, свичами, маршрутизаторами, сетевой средой (медь, оптика, wi-fi). На этом уровне информация кодируется, делится на пакеты, и отправляется адресату через определенную среду передачи. Основной протокол - Ethernet. Здесь каждому пакету данных полученному с межсетевого уровня добавляется дополнительный заголовок для правильной доставки данных соответствующим аппаратным компонентам (MAC-адрес), затем полученные фреймы данных преобразуются в соответствующие сигналы и предаются в среду передачи.
Основные протоколы Канального уровня:
- ARP (Address Resolution Protocol) - это протокол разрешения адресов, используемый в компьютерных сетях для связи между физическими MAC-адресами и IP-адресами. ARP выполняет функцию преобразования IP-адресов в соответствующие им MAC-адреса, чтобы обеспечить связь и доставку пакетов данных на уровне канала.
- Ethernet - это популярный стандарт коммуникации для проводных локальных сетей (LAN). Он определяет методы физического и канального доступа к среде передачи данных, а также форматы кадров для обмена информацией между устройствами в сети.
2 уровень. Межсетевой уровень.
Network Layer. Этот уровень отвечает за маршрутизацию и доставку данных от отправителя к получателю через несколько сетевых устройств.
Происходит маршрутизация передаваемой информации между различными сетями. Основной протокол - IP. Каждый компьютер сети имеет свой уникальный для этой сети адрес, связь с компьютерами в других сетях происходит через маршрутизаторы, которые знают куда нужно отправлять ip-пакеты (прокладывают маршруты), если требуемого адреса нет в локальной сети. Сам по себе IP-протокол не несет "полезной" информации он предназначен для определения адресата и доставки ему информации (маршрутизации). В его задачи входит: разделение "полезной" информации полученной с верхних уровней на пакеты (дейтаграммы), добавление ip-заголовка каждому пакету и передача созданных пакетов на канальный уровень.
Поддержка IP:
- IP (Internet Protocol): IP является базовым протоколом TCP/IP. Он отвечает за маршрутизацию и доставку пакетов данных между узлами сети. IP-адреса используются для идентификации узлов в сети.
- ICMP (Internet Control Message Protocol): ICMP используется для обмена контрольными сообщениями и обнаружения ошибок в IP-сетях. Он используется для отправки сообщений об ошибках, подтверждений, запросов эхо (ping) и других сетевых операций. ICMP работает поверх протокола IP и обеспечивает механизмы обратной связи и обнаружения проблем в сети.
- IGMP (Internet Group Management Protocol) - это протокол, используемый в компьютерных сетях для управления многоадресной рассылкой IP-пакетов. IGMP позволяет хостам в сети присоединяться к группам IP-адресов и сообщать маршрутизаторам о своем желании получать пакеты, отправленные в эти группы. Он используется для организации групповой коммуникации и обеспечения доставки пакетов только тем хостам, которые выразили свое желание принимать данные из определенной группы.
Протоколы маршрутизации:
- OSPF (Open Shortest Path First) - это протокол внутренней маршрутизации, используемый в компьютерных сетях, основанных на протоколе IP. OSPF является одним из наиболее распространенных протоколов маршрутизации в сетях среднего и большого масштаба, таких как предприятий и провайдеров услуг для обеспечения оптимальной доставки пакетов и адаптации к изменениям в сетевой топологии.
- BGP (Border Gateway Protocol) - это протокол междоменной маршрутизации, используемый в сетях Интернет. BGP является основным протоколом, который позволяет провайдерам услуг обмениваться информацией о маршрутах и принимать решения о передаче трафика между различными автономными системами (AS).
3 уровень. Транспортный уровень.
Transport Layer. Этот уровень обеспечивает передачу данных между устройствами в сети.
Происходит упаковка полученных с верхних уровней данных в пакеты и передача сформированных пакетов на межсетевой уровень. Два основных протокола данного уровня: TCP и UDP.
- TCP (Transmission Control Protocol)(протокол управления передачей) - является надежным протоколом передачи, проверяет дошли ли все сформированные пакеты, проверяет целостность пакетов, повторно запрашивает потерянную информацию, гарантирует получение и сборку информации у адресата в правильном порядке.
- UDP (User Datagram Protocol) (протокол пользовательских датаграмм) — ненадежный, он занимается передачей автономных датаграмм. UDP не гарантирует, что всех датаграммы дойдут до получателя. Датаграммы уже содержат всю необходимую информацию, чтобы дойти до получателя, но они все равно могут быть потеряны или доставлены в порядке отличном от порядка при отправлении.
- Основные отличия протоколов TCP и UDP.
4 уровень. Прикладной уровень, уровень приложений.
Application Layer. Этот уровень предоставляет интерфейс для приложений, работающих поверх сетевого соединения.
Самый верхний уровень модели, на нем происходит обмен "полезной" информацией между клиент-серверными приложениями. На этом уровне приложения и службы формируют требуемый данные, определяют порт и передают их на транспортный уровень. Часто используемые протоколы: HTTP, HTTPS, FTP, SMTP, POP3, DHCP, DNS
Для обеспечения корректной работы протоколов различных уровней в сетевых моделях используется специальный метод — инкапсуляция. Суть этого метода заключается в добавлении заголовка протокола текущего уровня к данным, полученным от протокола вышестоящего уровня. Процесс, обратный описанному, называется декапсуляцией. Оба процесса осуществляются на компьютерах получателя и отправителя данных попеременно, это позволяет долго не удерживать одну сторону канала занятой, оставляя время на передачу информации другому компьютеру.
- DNS (Domain Name System) - это протокол, используемый для преобразования доменных имен в IP-адреса и обратно. DNS обеспечивает разрешение имен, позволяя пользователям использовать удобные для запоминания доменные имена для доступа к ресурсам в Интернете, вместо необходимости запоминать числовые IP-адреса.
- DHCP (Dynamic Host Configuration Protocol) – это протокол динамической конфигурации хоста. Он используется для автоматической настройки сетевых параметров устройств в компьютерных сетях.
- SMTP (Simple Mail Transfer Protocol) - это протокол передачи электронной почты, который используется для отправки электронных писем между почтовыми серверами в сети. SMTP определяет правила и форматы для отправки, маршрутизации и доставки электронной почты.
- HTTP (Hypertext Transfer Protocol) - является протоколом передачи данных для обмена гипертекстовыми документами в Интернете. Он используется для загрузки веб-страниц, отправки данных форм, выполнения запросов и других веб-операций.
- HTTPS (Hypertext Transfer Protocol Secure) - это защищенная версия протокола HTTP, которая использует шифрование для обеспечения безопасности передачи данных между клиентом и сервером. Он широко применяется для безопасной передачи конфиденциальной информации, такой как пароли, платежные данные и т. д.
- FTP (File Transfer Protocol) - предназначен для передачи файлов между клиентом и сервером. Он обеспечивает функции загрузки, загрузки, переименования, удаления и других операций с файлами на удаленном сервере.
- Telnet - это протокол, который предоставляет возможность удаленного доступа к компьютеру или сетевому устройству через сеть. Он позволяет пользователю установить текстовое соединение с удаленной системой и взаимодействовать с ней так, как если бы он находился непосредственно на этой системе.
- SSH (Secure Shell) - это протокол, который обеспечивает безопасное удаленное управление и передачу данных между двумя узлами через незащищенную сеть. SSH обеспечивает шифрованное соединение, аутентификацию и защиту данных, что делает его предпочтительным протоколом для удаленного доступа и выполнения команд на удаленных серверах.
- SNMP (Simple Network Management Protocol) - это протокол управления сетью, который используется для мониторинга и управления сетевыми устройствами. SNMP позволяет сетевым администраторам собирать информацию о состоянии и производительности сетевых устройств, управлять ими и получать уведомления об изменениях.
Protocols
ARP
ARP (Address Resolution Protocol) - это протокол разрешения адресов, используемый в компьютерных сетях для связи между физическими MAC-адресами и IP-адресами. ARP выполняет функцию преобразования IP-адресов в соответствующие им MAC-адреса, чтобы обеспечить связь и доставку пакетов данных на уровне канала.
Вот как работает ARP:
- Устройство A хочет отправить данные устройству B, которое имеет определенный IP-адрес.
- Устройство A проверяет свой кэш ARP (таблицу, в которой хранятся соответствия IP- и MAC-адресов), чтобы узнать, имеет ли оно уже MAC-адрес устройства B.
- Если MAC-адрес не найден в кэше ARP, устройство A отправляет широковещательное ARP-запросное сообщение в локальную сеть с вопросом "Кто имеет этот IP-адрес?".
- Все устройства в локальной сети получают ARP-запрос, но только устройство B распознает свой IP-адрес и отвечает.
- Устройство B отправляет ARP-ответное сообщение устройству A, сообщая: "У меня есть этот IP-адрес, и вот мой MAC-адрес".
- Устройство A получает ARP-ответ, обновляет свой кэш ARP соответствующим IP- и MAC-адресом устройства B и теперь может отправлять данные устройству B, используя MAC-адрес.
- Последующее взаимодействие между устройствами A и B может использовать их MAC-адреса напрямую, без необходимости повторного использования ARP, пока запись в кэше не истечет или не будет инвалидирована
В Linux кэш ARP расположен в ядре. При загрузке компьютера кэш ARP пуст. Как же тогда MAC-адреса попадают в этот кэш? Все начинается тогда, когда компьютер желает отправить пакет другому хосту. Если целевой IP-адрес отсутствует в кэше ARP, выполняются следующие действия.
- Хост-источник создает специальный кадр Ethernet, содержащий пакет запросау кэша ARP тех адресов, которые соответствуют целевому IP-адресу.
- Хост-источник передает этот кадр по всей физической сети в целевой подсети.
- Если один из других хостов этой подсети знает правильный MAC-адрес, он создает ответный пакет и кадр, содержащий данный адрес, а затем отправляет его источнику. Зачастую отвечающий хост является целевым и просто отправляет в ответ собственный MAC-адрес.
- Хост-источник добавляет пару адресов IP-MAC в кэш ARP и готов продолжить работу.
Единственная настоящая проблема с кэшем ARP может возникнуть, когда он становится устаревшим, если вы присвоили IP-адрес от одной карты сетевого интерфейса другой карте (например, при тестировании компьютера), поскольку у этих карт различные MAC-адреса. Система Unix делает недействительными записи в кэше ARP, если они неактивны в течение некоторого времени, поэтому здесь возникнет лишь небольшая задержка, вызванная недействующими данными.
Ethernet
Ethernet – технология пакетной передачи данных, применяемая в основном в локальных сетях. Дословно с английского языка «ethernet» можно перевести как «эфирная сеть», то есть сеть, по которой один компьютер связан с другим компьютером (или сервером) «в прямом эфире»
Доступ к сети Ethernet осуществляется по случайному методу CSMA/CD, обеспечивающему полное равноправие абонентов. В сети используются пакеты переменной длины со структурой. Длина кадра Ethernet (то есть пакета без преамбулы) должна быть не менее 512 битовых интервалов, или 51,2 мкС (именно такова предельная величина двойного времени прохождения в сети). Предусмотрена индивидуальная, групповая и широковещательная адресация.
Структура пакета Ethernet

В пакет Ethernet входят следующие поля:
- Преамбула состоит из 8 байт, первые семь из которых представляют собой код 10101010, а последний восьмой — код 10101011. В стандарте IEEE 802.3 этот последний байт называется признаком начала кадра (SFD - Start of Frame Delimiter) и образует отдельное поле пакета.
- Адрес получателя (приемника) и адрес отправителя (передатчика) включают по 6 байт. Эти адресные поля обрабатываются аппаратурой абонентов.
- Поле управления (L/T - Length/Type) содержит информацию о длине поля данных. Оно может также определять тип используемого протокола. Принято считать, что если значение этого поля не больше 1500, то оно определяет длину поля данных. Если же его значение больше 1500, то оно определяет тип кадра. Поле управления обрабатывается программно.
- Поле данных должно включать в себя от 46 до 1500 байт данных. Если пакет должен содержать менее 46 байт данных, то поле данных дополняется байтами заполнения. Согласно стандарту IEEE 802.3, в структуре пакета выделяется специальное поле заполнения (pad data - незначащие данные), которое может иметь нулевую длину, когда данных достаточно (больше 46 байт).
- Поле контрольной суммы (FCS — Frame Check Sequence) содержит 32-разрядную циклическую контрольную сумму пакета (CRC) и служит для проверки правильности передачи пакета.
Таким образом, минимальная длина кадра (пакета без преамбулы) составляет 64 байта (512 бит). Именно эта величина определяет максимально допустимую двойную задержку распространения сигнала по сети в 512 битовых интервалов (51,2 мкс для Ethernet, 5,12 мкс для Fast Ethernet). Стандарт предполагает, что преамбула может уменьшаться при прохождении пакета через различные сетевые устройства, поэтому она не учитывается. Максимальная длина кадра равна 1518 байтам (12144 бита, то есть 1214,4 мкс для Ethernet, 121,44 мкс для Fast Ethernet). Это важно для выбора размера буферной памяти сетевого оборудования и для оценки общей загруженности сети.
В Ethernet управление доступом - распределенное, так как, в отличие от некоторого другого сетевого оборудования, здесь нет централизованной схемы предоставления доступа. Схема доступа Ethernet называется множественным доступом с контролем несущей и обнаружением коллизий (CSMA/CD). Она является CSMA, так как несколько машин могут получить доступ к Ethernetу одновременно, и каждая машина определяет, занят ли Е-кабель, по наличию несущей в нем. Когда интерфейс компьютера имеет пакет, который нужно передать, он слушает Е-кабель, чтобы узнать, передается ли уже чье-то сообщение (т.е. определяет наличие несущей). Когда передачи не обнаружено, интерфейс компьютера начинает передачу. Каждая передача ограничена в своей продолжительности (так как существует максимальный размер пакета). Более того, оборудование должно делать небольшие паузы между передачами пакетов, чтобы не получилось так, что сеть используется одной парой машин, и чтобы другие машины тоже имели возможность доступа к сети.
CSMA/CD
В сетях Ethernet используется метод доступа к среде передачи данных, называемый методом коллективного доступа с опознаванием несущей и обнаружением коллизий (carrier-sense-multiply-access with collision detection, CSMA/CD).
Все данные, передаваемые по сети, помещаются в кадры определенной структуры и снабжаются уникальным адресом станции назначения. Затем кадр передается по кабелю. Все станции, подключенные к кабелю, могут распознать факт передачи кадра, и та станция, которая узнает собственный адрес в заголовках кадра, записывает его содержимое в свой внутренний буфер, обрабатывает полученные данные и посылает по кабелю кадр-ответ. Адрес станции-источника также включен в исходный кадр, поэтому станция-получатель знает, кому нужно послать ответ. При описанном подходе возможна ситуация, когда две станции одновременно пытаются передать кадр данных по общему кабелю. Для уменьшения вероятности этой ситуации непосредственно перед отправкой кадра передающая станция слушает кабель (то есть принимает и анализирует возникающие на нем электрические сигналы), чтобы обнаружить, не передается ли уже по кабелю кадр данных от другой станции. Если опознается несущая (carrier-sense, CS), то станция откладывает передачу своего кадра до окончания чужой передачи, и только потом пытается вновь его передать. Но даже при таком алгоритме две станции одновременно могут решить, что по шине в данный момент времени нет передачи, и начать одновременно передавать свои кадры. Говорят, что при этом происходит коллизия, так как содержимое обоих кадров сталкивается на общем кабеле, что приводит к искажению информации.
Метод CSMA/CD определяет основные временные и логические соотношения, гарантирующие корректную работу всех станций в сети:
- Между двумя последовательно передаваемыми по общей шине кадрами информации должна выдерживаться пауза в 9.6 мкс; эта пауза нужна для приведения в исходное состояние сетевых адаптеров узлов, а также для предотвращения монопольного захвата среды передачи данных одной станцией.
- При обнаружении коллизии (условия ее обнаружения зависят от применяемой физической среды) станция выдает в среду специальную 32-х битную последовательность (jam-последовательность), усиливающую явление коллизии для более надежного распознавания ее всеми узлами сети.
- После обнаружения коллизии каждый узел, который передавал кадр и столкнулся с коллизией, после некоторой задержки пытается повторно передать свой кадр. Узел делает максимально 16 попыток передачи этого кадра информации, после чего отказывается от его передачи. Величина задержки выбирается как равномерно распределенное случайное число из интервала, длина которого экспоненциально увеличивается с каждой попыткой. Такой алгоритм выбора величины задержки снижает вероятность коллизий и уменьшает интенсивность выдачи кадров в сеть при ее высокой загрузке. Станция, которая хочет передать кадр, должна сначала с помощью MAC-узла упаковать данные в кадр соответствующего формата. Затем для предотвращения смешения сигналов с сигналами другой передающей станции, MAC-узел должен прослушивать электрические сигналы на кабеле и в случае обнаружения несущей частоты 10 МГц отложить передачу своего кадра. После окончания передачи по кабелю станция должна выждать небольшую дополнительную паузу, называемую межкадровым интервалом (interframe gap), что позволяет узлу назначения принять и обработать передаваемый кадр, и после этого начать передачу своего кадра.
MTU
MTU (Maximum Transmission Unit) - это максимальный размер пакета данных, который может быть передан через сетевой интерфейс без фрагментации. MTU измеряется в байтах и определяет максимальный размер полезной нагрузки данных, которую можно включить в единичный пакет для передачи по сети.
Когда узел отправляет пакет данных через сетевой интерфейс, он разбивает данные на фрагменты (если размер превышает MTU) и передает их по отдельности. Приемник собирает фрагменты и восстанавливает исходные данные. Фрагментация может снижать производительность сети, поэтому оптимальное значение MTU важно для эффективной передачи данных.
Значение MTU может различаться в разных сетях и типах соединений. Например, в Ethernet сетях MTU обычно равен 1500 байтам. Однако в некоторых сетях, таких как PPPoE (Point-to-Point Protocol over Ethernet), MTU может быть уменьшен до 1492 байтов из-за добавления дополнительных заголовков протоколов.
Настройка оптимального значения MTU в сети важна для обеспечения эффективной передачи данных. При неправильной конфигурации MTU может возникнуть фрагментация пакетов и возможная потеря данных. Максимальное значение MTU зависит от типа сети, используемых протоколов и сетевого оборудования.
Если пакет данных превышает MTU (Maximum Transmission Unit) сети, то возможны две ситуации:
- Фрагментация пакета: Если отправляемый пакет больше MTU, то он будет разделен на фрагменты, которые соответствуют максимальному размеру MTU сети. Эти фрагменты будут передаваться по сети отдельно и воссоединяться на стороне получателя. Фрагментация может привести к увеличению нагрузки на сеть и ухудшению производительности, особенно при передаче больших объемов данных.
- Отбрасывание пакета: В некоторых случаях сетевое оборудование может отбросить пакет, если его размер превышает MTU сети и не поддерживается фрагментация. Это может привести к потере данных и неудачной доставке пакета.
Для эффективной передачи данных в сети рекомендуется устанавливать MTU сетевого интерфейса в оптимальное значение, которое обеспечивает максимальную эффективность и минимизацию фрагментации. Как уже упоминалось, оптимальное значение MTU может различаться в разных типах сетей и соединений.
TCP
TCP (Transmission Control Protocol, протокол управления передачей) - сетевой протокол, который обеспечивает гарантированную доставку пакетов в виде байтовых потоков с предварительно установленном соединении. Протокол TCP используется в тех случаях, когда требуется надежная доставка сообщений. При использовании протокола TCP приложение открывает соединение между одним из портов данного компьютера и каким-либо портом удаленного хоста.
Перед тем как начать процесс обмена информацией по протоколу TCP, клиентское приложение инициирует подключение одного из своих локальных портов к определенному порту на сервере, с помощью специальной серии пакетов. На серверном хосте должен работать процесс прослушивающий целевой порт и отвечающий на клиентские запросы.
Когда прикладной процесс начинает использовать TCP, то модуль TCP на машине клиента и модуль TCP на машине сервера начинают общаться. Эти два оконечных модуля TCP поддерживают информацию о состоянии соединения, называемого виртуальным каналом. Этот виртуальный канал потребляет ресурсы обоих оконечных модулей TCP. Канал является дуплексным; данные могут одновременно передаваться в обоих направлениях. Один прикладной процесс пишет данные в TCP-порт, они проходят по сети, и другой прикладной процесс читает их из своего TCP-порта.
Протокол TCP требует, чтобы все отправленные данные были подтверждены принявшей их стороной. Он использует таймауты и повторные передачи для обеспечения надежной доставки. Отправителю разрешается передавать некоторое количество данных, не дожидаясь подтверждения приема ранее отправленных данных. Таким образом, между отправленными и подтвержденными данными существует окно уже отправленных, но еще неподтвержденных данных. Количество байт, которые можно передавать без подтверждения, называется размером окна. Как правило, размер окна устанавливается в стартовых файлах сетевого программного обеспечения.
Схема работы пользовательского приложения с TCP в общих чертах состоит в следующем. Для передачи данных пользовательскому процессу надо вызвать соответствующую функцию TCP, с указанием на буфер передаваемых данных. TCP упаковывает эти данные в сегменты своего стека и вызывает функцию передачи протокола нижнего уровня, например IP. На другом конце, получатель TCP группирует поступившие от протокола нижнего уровня данные в принимающие сегменты своего буфера, проверяет целостность данных, передает данные пользовательскому процессу и уведомляет отправителя об их получении.
Передача данных по протоколу TCP включает в себя несколько этапов:
-
Инициализация соединения. Трехстороннее рукопожатие TCP.
- (Пакет №1). Клиент отправляет пакет с установленным флагом SYN и случайным числом («R1»), включенным в поле порядкового номера (sequence number).
- (Пакет №2). При получении пакета №1 сервер в ответ отправляет пакет с установленным флагом SYN, а также с установленным флагом ACK. Поле порядкового номера будет содержать новое случайное число («R2»), а поле номера подтверждения будет содержать значение порядкового номера клиента, увеличенного на единицу (то есть «R1 + 1»). Таким образом, он будет соответствовать следующему порядковому номеру, который сервер ожидает получить от клиента.
- (Пакет №3). В ответ на пакет SYN от сервера (пакет №2) клиент отправляет пакет с установленным флагом ACK и полем номера подтверждения с числом «R2 + 1». По аналогии, это число будет соответствовать следующему порядковому номеру, который клиент ожидает получить от сервера.
-
Передача данных. После инициализации соединения полезная нагрузка будет перемещаться в обоих направлениях TCP-соединения. Все пакеты в обязательном порядке будут содержать установленный флаг ACK. Другие флаги, такие как, например, PSH или URG, могут быть, а могут и не быть установленными. Когда получатель получает TCP-пакет, он отправляет подтверждение (ACK) обратно отправителю для указания успешной доставки. Если отправитель не получает подтверждение в течение определенного времени, он повторно отправляет пакет.
- Завершение соединения (TCP Termination). При нормальном завершении TCP-соединения в большинстве случаев инициализируется процедура, называемая двухсторонним рукопожатием, в ходе которой каждая сторона закрывает свой конец виртуального канала и освобождает все задействованные ресурсы. Обычно эта фаза начинается с того, что один из задействованных процессов приложения сигнализирует своему уровню TCP, что сеанс связи больше не нужен. Со стороны этого устройства отправляется сообщение с установленным флагом FIN (отметим, что этот пакет не обязательно должен быть пустым, он также может содержать полезную нагрузку), чтобы сообщить другому устройству о своем желании завершить открытое соединение. Затем получение этого сообщения подтверждается (сообщение от отвечающего устройства с установленным флагом ACK, говорящем о получении сообщения FIN). Когда отвечающее устройство готово, оно также отправляет сообщение с установленным флагом FIN, и, после получения в ответ подтверждающего получение сообщения с установленным флагом ACK или ожидания определенного периода времени, предусмотренного для получения ACK, сеанс полностью закрывается. Состояния, через которые проходят два соединенных устройства во время обычного завершения соединения, отличаются, потому что устройство, инициирующее завершение сеанса, ведет себя несколько иначе, чем устройство, которое получает запрос на завершение. В частности, TCP на устройстве, получающем начальный запрос на завершение, должен сразу информировать об этом процесс своего приложения и дождаться от него сигнала о том, что приложение готово к этой процедуре. Инициирующему устройству не нужно это делать, поскольку именно приложение и выступило инициатором.
Порты TCP и соединения
Протокол TCP предоставляется нескольким сетевым приложениям на одном компьютере с помощью сетевых портов. Порт — это просто число. Если IP-адрес можно уподобить почтовому индексу какого-либо жилого дома, то порт похож на номер почтового ящика: это дальнейшее деление на более мелкие части.
При использовании протокола TCP приложение открывает соединение между одним из портов данного компьютера и каким-либо портом удаленного хоста. Например, такое приложение, как браузер, могло бы открыть соединение между портом 36406 компьютера и портом 80 удаленного хоста. С точки зрения приложения порт 36406 является локальным портом, а порт 80 — удаленным портом.
Можно идентифицировать соединение с помощью пары, составленной из IP-адреса и номера порта.
На уровне ОС TCP-соединение работает черех сокеты Linux.
UDP
UDP (User Datagram Protocol)- это протокол транспортного уровня модели OSI, который обеспечивает несоединительную и ненадежную доставку данных между узлами в сети. В отличие от TCP, UDP не предоставляет гарантии надежной доставки, управления потоком или установления соединения.
Передача данных по протоколу UDP происходит следующим образом:
- Упаковка данных: Данные, которые нужно передать, разбиваются на отдельные датаграммы (UDP-пакеты). Каждая датаграмма содержит информацию о порте отправителя и получателя, а также о длине пакета.
- Отправка датаграммы: Отправитель отправляет датаграмму через сеть на определенный IP-адрес и порт получателя без предварительного установления соединения.
- Передача датаграммы: Датаграмма передается по сети, причем UDP не предоставляет никаких гарантий доставки или подтверждения.
- Обработка датаграммы получателем: Получатель получает датаграмму и обрабатывает ее. UDP не гарантирует доставку датаграммы в правильном порядке или без потерь.
Протокол UDP является намного более простым транспортным уровнем по сравнению с протоколом TCP. Он определяет передачу только для отдельных сообщений, потока данных здесь нет. В то же время, в отличие от протокола TCP, протокол UDP не выполняет коррекцию утерянных или неправильно расположенных пакетов. На самом деле, хотя у протокола UDP и есть порты, он даже не обладает соединениями! Хост просто отправляет сообщение от одного из своих портов порту на сервере, а сервер отправляет что-либо обратно, если желает. Тем не менее в протоколе UDP все же присутствует выявление ошибок данных внутри пакета. Хост может установить, что пакет поврежден, но он ничего не должен делать в связи с этим.
UDP широко применяется в приложениях, где небольшая задержка и простота более важны, чем надежность доставки данных. Примеры использования UDP включают потоковое видео, онлайн-игры, DNS (доменная система имен) и другие приложения, где быстрая передача данных более критична, чем гарантия надежности.
Одним из примеров приложения, которое использует протокол UDP, является протокол NTP (Network Time Protocol, протокол сетевого времени). Клиент отправляет короткий и простой запрос серверу, чтобы получить текущее время, ответ сервера такой же краткий. Поскольку ответ необходим клиенту по возможности быстро, приложению годится протокол UDP; если ответ сервера затеряется где-либо в сети, клиент может просто направить повторный запрос или прекратить попытки. Другим примером является видеочат: в этом случае изображения пересылаются с помощью протокола UDP. Если некоторые фрагменты будут утрачены в пути, клиент на принимающей стороне сделает все возможное для их компенсации.
На уровне ОС UDP работает черех сокеты Linux.
TCP-vs-UDP
Основные отличия протоколов TCP и UDP

TCP и UDP - это два основных протокола передачи данных в компьютерных сетях. Они отличаются в нескольких аспектах:
- Надежность соединения: TCP устанавливает устойчивое и надежное соединение между отправителем и получателем передачи данных, в то время как UDP является безсоединительным протоколом, каждый пакет данных рассматривается отдельно, независимо от других пакетов.
- Гарантия доставки: TCP гарантирует, что данные доставлены в нужном порядке и без потерь. Он использует механизм подтверждения доставки, повторной передачи и управления потоком данных. UDP не обеспечивает гарантии доставки, поэтому пакеты могут быть потеряны или доставлены в неправильном порядке.
- Скорость: UDP является более быстрым и менее надежным протоколом, поскольку он не требует установления соединения и не выполняет механизмы подтверждения и повторной передачи, которые есть в TCP. TCP обеспечивает более надежную доставку, но может быть медленнее из-за дополнительной нагрузки.
- Метод передачи данных: В TCP данные отправляются в виде потока байтов и гарантируется, что они будут получены в том же порядке. UDP передает данные в виде отдельных датаграмм, каждая из которых является самостоятельным пакетом и может быть обработана независимо от других пакетов.
- Использование: TCP часто используется для приложений, где важна надежная доставка данных, таких как веб-просмотрщики, электронная почта, файловые передачи и другие. UDP используется в случаях, когда небольшие задержки и более высокая скорость передачи данных более важны, например, в потоковом видео, голосовых и видео-чатах, играх и т. д.
Оба протокола имеют свои особенности и применения, и выбор между ними зависит от требований конкретного приложения и сценария использования.

DNS
DNS (Domain Name System) - это протокол, используемый для преобразования доменных имен в IP-адреса и обратно. DNS обеспечивает разрешение имен, позволяя пользователям использовать удобные для запоминания доменные имена для доступа к ресурсам в Интернете, вместо необходимости запоминать числовые IP-адреса.
Основные особенности и функции протокола DNS:
- Разрешение имен: DNS выполняет преобразование доменных имен (например, example.com) в соответствующие IP-адреса (например, 192.0.2.1). Это позволяет установить соответствие между именами хостов и их физическими адресами в сети.
- Иерархическая структура: DNS использует иерархическую структуру доменных имен, которая представляется в виде дерева. Каждая часть доменного имени (например, example.com) разделяется точками и представляет уровень в иерархии доменов.
- DNS-серверы: DNS-серверы отвечают за хранение и предоставление информации о доменных именах и соответствующих им IP-адресах. Существуют различные типы DNS-серверов, включая корневые серверы, серверы верхнего уровня домена (TLD), серверы авторитетных зон и рекурсивные серверы.
- Кэширование: DNS-серверы могут кэшировать запросы и ответы, чтобы улучшить производительность и снизить нагрузку на сеть. Клиенты и промежуточные DNS-серверы могут использовать локальные кэши для хранения ранее разрешенных запросов и ответов.
- Типы записей DNS: DNS поддерживает различные типы записей, которые содержат различную информацию о доменных именах. Некоторые из наиболее распространенных типов записей включают записи типа A (IPv4-адрес), AAAA (IPv6-адрес), CNAME (каноническое имя), MX (адрес почтового сервера) и другие.
- Протоколы: Протокол DNS работает поверх протокола UDP (User Datagram Protocol) на стандартном порту 53. Однако, для больших запросов или передачи зон используется протокол TCP (Transmission Control Protocol).
Процесс разрешения имен обычно протекает следующим образом.
- Приложение вызывает функцию, чтобы выяснить IP-адрес, который стоит за именем хоста. Эта функция находится в совместно используемой системной библиотеке, поэтому приложению не нужно знать подробности о том, как она работает, или об изменениях в ее реализации.
- Когда эта функция запускается, она действует в соответствии с набором правил (расположенных в файле /etc/nsswitch.conf), чтобы установить план действий при поисках. Например, такие правила обычно говорят о том, что перед переходом к DNS следует проверить ручное переопределение в файле /etc/hosts.
- Когда функция решает использовать службу DNS для поиска имени, она обращается к дополнительному файлу конфигурации, чтобы найти сервер имен DNS. Сервер имен представлен в виде IP-адреса.
- Функция отправляет DNS-запрос на поиск (по сети) серверу имен.
- Сервер имен сообщает в ответ IP-адрес имени хоста, а функция возвращает этот IP-адрес приложению.
Это упрощенный вариант. В типичной современной системе присутствует больше исполнителей, которые стремятся ускорить трансакцию и/или добавить гибкость.
Подробно про Пространство доменных имен DNS
Типы DNS-записей:
- Запись A (Address): Запись A связывает доменное имя с IPv4-адресом. Она используется для разрешения доменного имени в соответствующий IPv4-адрес. Пример:
example.com IN A 192.0.2.1. - Запись AAAA (IPv6 Address): Запись AAAA аналогична записи A, но связывает доменное имя с IPv6-адресом. Она используется для разрешения доменного имени в соответствующий IPv6-адрес. Пример:
example.com IN AAAA 2001:db8::1. - Запись CNAME (Canonical Name): Запись CNAME создает псевдоним (алиас) для доменного имени. Она позволяет связать доменное имя с другим доменным именем, что полезно для перенаправления трафика с одного домена на другой. Пример:
www.example.com IN CNAME example.com. - Запись MX (Mail Exchanger): Запись MX указывает почтовый сервер, который отвечает за обработку электронной почты для доменного имени. Она определяет приоритетные имена почтовых серверов, используемые для доставки почты. Пример:
example.com IN MX 10 mail.example.com. - Запись NS (Name Server): Запись NS указывает имена DNS-серверов, которые отвечают за определенный домен. Она определяет авторитетные DNS-серверы для домена. Пример:
example.com IN NS ns1.example.com. - Запись TXT (Text): Запись TXT позволяет администраторам добавлять произвольные текстовые данные к доменному имени. Она может использоваться для различных целей, включая проверку доменной подлинности (SPF, DKIM) или хранение других метаданных. Пример:
example.com IN TXT "Hello, world!". - Запись SRV (Service): Запись SRV определяет местоположение сервиса или ресурса в сети. Она может использоваться для указания порта, на котором работает сервис, а также для установки приоритета и веса при маршрутизации. Пример:
_service._tcp.example.com IN SRV 10 0 5060 server.example.com. - Запись PTR (Pointer): Запись PTR используется для обратного разрешения IP-адреса в соответствующее доменное имя. Она связывает IP-адрес с доменным именем. Пример:
1.2.3.4 IN PTR example.com.
DHCP
DHCP (Dynamic Host Configuration Protocol) — это протокол динамической настройки, который предназначен для настройки хоста, используя команды удаленного сервера. Протокол является клиент-серверным вариантом и имеет свой собственный метод обмена сообщениями. В большинстве случаев сервис используется для того, чтобы присвоить IP-адрес клиентским устройствам, хотя, кроме этого, протокол позволяет передавать и другие даные для настройки узлов, вплоть до указания серверов времени для синхронизации.
Рассмотрим процесс получения IP-адреса.
-
Когда клиент загружается (или хочет присоединиться к сети), он начинает четырехэтапный процесс для получения IP-адреса. Процесс начинается с отправки широковещательного пакета (broadcast) с сообщением DHCPDISCOVER, в котором содержится MAC-адрес узла, тем самым происходит процесс обнаружения доступных серверов DHCP. Так как у клиента еще нет никаких настроек, то в качестве адреса назначения в пакете указывается 255.255.255.255, а адрес источника указывается как 0.0.0.0.
-
Когда DHCP-сервер получает сообщение DHCPDISCOVER, он резервирует доступный IP-адрес из объявленного пула для выдачи (аренды) клиенту. Сервер также создает запись ARP, состоящую из MAC-адреса клиента и арендованного IP-адреса, а затем отправляет сообщение DHCPOFFER клиенту, уже по unicast, используя MAC-адрес сервера в качестве исходного адреса и MAC-адрес клиента в качестве адреса получателя.
-
Когда клиент получает DHCPOFFER с сервера, он отправляет обратно сообщение DHCPREQUEST. Это сообщение используется как для получения адреса, так и для продления аренды. В случае, когда у нас идет первоначальный запрос для аренды адреса, DHCPREQUEST служит в качестве уведомления о принятии выбранных сервером параметров и отклонении предложения от других серверов, так как в случае больших корпоративных сетей может использоваться несколько DHCP серверов, и сообщение DHCPREQUEST отправляется в виде широковещательнго пакета, чтобы проинформировать все серверы о принятом предложении.
-
При получении сообщения DHCPREQUEST сервер проверяет информацию об аренде с помощью ICMP-запроса на этот адрес, чтобы убедиться, что он не используется и создает новую ARP запись для аренды IP-адреса клиента, а затем отвечает одноадресным (unicast) DHCPACK сообщением. Это сообщение является дубликатом DHCPOFFER, за исключением поля типа сообщения. Когда клиент получает сообщение DHCPACK, он регистрирует информацию и выполняет поиск ARP для назначенного адреса. Если ответа на ARP нет, то клиент знает, что адрес IP действителен и начинает его использовать.
SMTP
SMTP (Simple Mail Transfer Protocol) - это протокол передачи электронной почты, который используется для отправки электронных писем между почтовыми серверами в сети. SMTP определяет правила и форматы для отправки, маршрутизации и доставки электронной почты.
Вот некоторые основные особенности и функции протокола SMTP:
- Отправка электронной почты: SMTP позволяет клиентским приложениям отправлять электронные письма на почтовый сервер для дальнейшей передачи получателям. Клиент формирует письмо, включая заголовки, текст и вложения, и отправляет его почтовому серверу через протокол SMTP.
- Маршрутизация почты: SMTP определяет правила маршрутизации почты от отправителя к получателю. Почтовые серверы используют информацию в адресах электронной почты для определения следующего сервера, которому следует отправить письмо, чтобы оно достигло конечного получателя.
- Протокол клиент-сервер: SMTP работает в клиент-серверной модели, где клиентское приложение (например, почтовый клиент) отправляет команды SMTP на почтовый сервер. Сервер обрабатывает команды, выполняет аутентификацию и передает письмо дальше по цепочке SMTP-серверов.
- Очередь доставки: Если получатель недоступен или почтовый сервер временно недоступен, почтовые серверы могут использовать очередь доставки (mail queue) для временного хранения писем и их повторной попытки доставки в дальнейшем.
- Коды ответов: SMTP использует коды ответов, такие как 250 (Успех), 421 (Сервер не доступен), 550 (Неправильный адрес получателя) и другие, чтобы информировать отправителя о статусе и результате операции.
HTTP
HTTP (Hypertext Transfer Protocol) - это протокол прикладного уровня, используемый для передачи данных веб-страниц и других ресурсов в сети. Он определяет формат запросов и ответов между клиентом (например, веб-браузером) и сервером, обеспечивая взаимодействие между ними.
Вот некоторые основные характеристики и особенности протокола HTTP:
- Клиент-серверная модель: HTTP следует клиент-серверной модели, где клиент (например, веб-браузер) отправляет HTTP-запросы на сервер, а сервер отвечает на эти запросы с помощью HTTP-ответов, содержащих запрошенные данные или информацию об ошибке.
- Стейтлессность: Протокол HTTP является безсостоятельным (стейтлесс), что означает, что каждый запрос-ответ выполняется независимо от предыдущих запросов-ответов. Сервер не сохраняет информацию о состоянии клиента между запросами.
- Методы запросов: HTTP определяет различные методы запросов, которые клиент может использовать для взаимодействия с сервером. Некоторые из наиболее распространенных методов запросов включают GET (запросить данные), POST (отправить данные для обработки), PUT (обновить существующий ресурс) и DELETE (удалить ресурс).
- URL и URI: HTTP использует URL (Uniform Resource Locator) и URI (Uniform Resource Identifier) для идентификации ресурсов (например, веб-страницы) в сети. URL обычно используется для указания конкретного местоположения ресурса, а URI более общий термин, который может указывать идентификатор ресурса.
- Заголовки и тело сообщений: HTTP-запросы и HTTP-ответы могут содержать заголовки, которые передают дополнительную информацию о запросе или ответе, а также тело сообщения, которое может содержать данные или содержимое ресурса.
- Стандартизация: Протокол HTTP определяется серией спецификаций, таких как HTTP/1.1 и HTTP/2, которые устанавливают правила и форматы для обмена данными между клиентом и сервером.
Коды HTTP (HTTP status codes)
Коды HTTP (HTTP status codes) — это числовые значения, которые возвращаются веб-сервером в ответ на HTTP-запросы клиентских устройств. Они указывают на состояние и результат выполнения запроса.
Стандартные HTTP-коды состоят из трех цифр и разделены на пять классов:
- Класс 1xx (Информационные): Эти коды информируют клиентские устройства о том, что запрос получен и обрабатывается. Например, код 100 (Continue) сообщает, что сервер принял начальную часть запроса и клиент должен продолжить отправку оставшихся данных.
- Класс 2xx (Успех): Эти коды указывают на успешное выполнение запроса клиента. Например, код 200 (OK) означает, что запрос был успешно обработан, а код 201 (Created) сообщает, что ресурс был успешно создан на сервере.
- Класс 3xx (Перенаправление): Эти коды указывают на необходимость выполнения дополнительных действий клиентом для завершения запроса. Например, код 302 (Found) сообщает клиенту о необходимости выполнить перенаправление на другой URL.
- Класс 4xx (Ошибка клиента): Эти коды указывают на ошибку со стороны клиента. Например, код 404 (Not Found) сообщает о том, что запрашиваемый ресурс не найден на сервере, а код 403 (Forbidden) указывает на то, что доступ к ресурсу запрещен.
- Класс 5xx (Ошибка сервера): Эти коды указывают на ошибку со стороны сервера. Например, код 500 (Internal Server Error) указывает на внутреннюю ошибку сервера, а код 503 (Service Unavailable) сообщает, что сервер временно недоступен.
HTTPS
HTTPS (Hypertext Transfer Protocol Secure) - это защищенная версия протокола HTTP, которая обеспечивает безопасную передачу данных между клиентом и сервером в сети. HTTPS использует шифрование для защиты конфиденциальности и целостности данных, а также для обеспечения подлинности сервера.
TLS
SSL (Secure Sockets Layer) и TLS (Transport Layer Security) - это криптографические протоколы, используемые для обеспечения безопасной связи и защиты данных при передаче через компьютерные сети, особенно в интернете.
Протокол TLS предназначен для предоставления трёх услуг всем приложениям, работающим над ним, а именно: шифрование, аутентификацию и целостность. Технически, не все три могут использоваться, однако на практике, для обеспечения безопасности, как правило используются все три:
- Шифрование – сокрытие информации, передаваемой от одного компьютера к другому;
- Аутентификация – проверка авторства передаваемой информации;
- Целостность – обнаружение подмены информации подделкой.
Для того чтобы установить криптографически безопасный канал данных, узлы соединения должны согласовать используемые методы шифрования и ключи. Протокол TLS однозначно определяет данную процедуру, подробнее это рассмотрено в пункте TLS Handshake. Следует отметить, что TLS использует криптографию с открытым ключом, которая позволяет узлам установить общий секретный ключ шифрования без каких-либо предварительных знаний друг о друге.
Также в рамках процедуры TLS Handshake имеется возможность установить подлинность личности и клиента, и сервера. Например, клиент может быть уверен, что сервер, который предоставляет ему информацию о банковском счёте, действительно банковский сервер. И наоборот: сервер компании может быть уверен, что клиент, подключившийся к нему – именно сотрудник компании, а не стороннее лицо
Наконец, TLS обеспечивает отправку каждого сообщения с кодом MAC (Message Authentication Code), алгоритм создания которого – односторонняя криптографическая функция хеширования (фактически – контрольная сумма), ключи которой известны обоим участникам связи. Всякий раз при отправке сообщения, генерируется его MAC-значение, которое может сгенерировать и приёмник, это обеспечивает целостность информации и защиту от её подмены.
TLS Handshake
Перед тем, как начать обмен данными через TLS, клиент и сервер должны согласовать параметры соединения, а именно: версия используемого протокола, способ шифрования данных, а также проверить сертификаты, если это необходимо.
Разберём подробнее каждый шаг данной процедуры:
- Так как TLS работает над TCP, для начала между клиентом и сервером устанавливается TCP-соединение.
- После установки TCP, клиент посылает на сервер спецификацию в виде обычного текста (а именно версию протокола, которую он хочет использовать, поддерживаемые методы шифрования, etc).
- Сервер утверждает версию используемого протокола, выбирает способ шифрования из предоставленного списка, прикрепляет свой сертификат и отправляет ответ клиенту (при желании сервер может так же запросить клиентский сертификат).
- Версия протокола и способ шифрования на данном моменте считаются утверждёнными, клиент проверяет присланный сертификат и инициирует либо RSA, либо обмен ключами по Диффи-Хеллману, в зависимости от установленных параметров.
- Сервер обрабатывает присланное клиентом сообщение, сверяет MAC, и отправляет клиенту заключительное (‘Finished’) сообщение в зашифрованном виде.
- Клиент расшифровывает полученное сообщение, сверяет MAC, и если всё хорошо, то соединение считается установленным и начинается обмен данными приложений.
