В контексте сетевой коммуникации транспортный уровень выполняет жизненно важную функцию — обеспечивает логическую связь между процессами приложений, работающими на разных компьютерах или серверах. Он отвечает за точную и надёжную передачу данных, гарантируя их последовательность, контроль ошибок и корректировку маршрутов при необходимости.
Транспортный уровень играет ключевую роль в организации обмена информацией: он управляет разбиением данных на пакеты, их доставкой и сборкой на стороне получателя. Это позволяет обеспечить эффективную, безопасную и бесперебойную работу сетевых приложений.
![](https://habrastorage.org/getpro/habr/upload_files/f1c/ca8/31c/f1cca831c0d339e58d71387fbe76564a.png)
На стороне отправителя:
Транспортный уровень получает сообщения от прикладного уровня, разбивает их на более мелкие, удобные для передачи блоки, которые называются сегментами, и передаёт их на сетевой уровень.
На стороне получателя:
Транспортный уровень собирает полученные сегменты обратно в исходные сообщения, понятные прикладному уровню.
TCP и UPD
Основные роли здесь играют: TCP (протокол управления передачей) и UDP (протокол пользовательских дейтаграмм). Их можно сравнить с двумя различными службами доставки, каждая из которых обладает своими сильными сторонами и особенностями.
TCP: Надёжный
![Схематическое описание структуры TCP-сегмента Схематическое описание структуры TCP-сегмента](https://habrastorage.org/getpro/habr/upload_files/b06/004/845/b06004845238e33f3131d2e6eba033fe.png)
Схематическое описание структуры TCP-сегмента
Вот краткое объяснение каждого элемента:
32 bits: Указывает на то, что каждый из следующих элементов занимает 32 бита (4 байта) в заголовке TCP.
Source Port # (Порт источника): Номер порта, с которого отправляются данные.
Destination Port # (Порт назначения): Номер порта, на который отправляются данные.
Sequence Number (Номер последовательности): Используется для упорядочивания сегментов данных.
Acknowledgement Number (Номер подтверждения): Подтверждает получение данных и указывает на следующий ожидаемый сегмент.
Offset Reserved C E U A P R S F Window: Это поле содержит несколько флагов и параметров, таких как смещение данных, зарезервированные биты, флаги управления (например, SYN, ACK, FIN) и размер окна для управления потоком данных.
Checksum (Контрольная сумма): Используется для проверки целостности данных.
Urgent Pointer (Указатель срочности): Указывает на срочные данные, если такие есть.
TCP Options (Опции TCP): Дополнительные параметры, которые могут быть использованы для расширения функциональности TCP.
Application data (payload) (Данные приложения): Фактические данные, которые передаются через TCP.
TCP Segment Header (Заголовок TCP-сегмента): Общее название для всех вышеперечисленных полей, которые составляют заголовок TCP.
TCP - это как курьерская служба премиум-класса. Она надежна, упорядочена и следит за тем, чтобы каждая посылка дошла в целости и сохранности.
Ориентированность на соединение: Перед отправкой данных TCP устанавливает соединение. Это как позвонить и убедиться, что кто-то дома, прежде чем доставить посылку.
Надежность: TCP гарантирует, что все данные приходят в порядке и без ошибок. Если сегмент потерян, он передается повторно.
Управление потоком: TCP может регулировать скорость передачи данных в зависимости от пропускной способности приемника. Это похоже на замедление речи, когда вы замечаете, что кто-то не успевает за вами.
Контроль перегрузки: TCP также может регулировать скорость передачи данных в зависимости от состояния сети. Это похоже на выбор менее загруженного маршрута при интенсивном трафике.
UDP: Быстрый
![Схематическое описание структуры UDP-сегмента Схематическое описание структуры UDP-сегмента](https://habrastorage.org/getpro/habr/upload_files/00d/003/ec5/00d003ec5c97fe9e2ea90d199d4803c2.png)
Вот краткое объяснение каждого элемента:
Source Port # (Порт источника) – 16-битное поле, указывающее порт источника.
Destination Port # (Порт назначения) – 16-битное поле, указывающее порт получателя.
Length (Длина) – 16-битное поле, определяющее длину всего UDP-дейтаграммы (заголовок + данные).
Checksum (Контрольная сумма) – 16-битное поле, используемое для проверки целостности данных.
Application data (payload) (Данные приложения) – основная информация, передаваемая в пакете.
С другой стороны, UDP - это как быстрая курьерская служба. Она работает быстро, но не гарантирует доставку.
Отсутствие соединения: UDP просто отправляет данные, не устанавливая сначала соединение. Это все равно что кричать сообщение через всю комнату, не проверяя, слушает ли его кто-нибудь.
Ненадежность: UDP не гарантирует, что все данные будут получены или что они будут получены в порядке очереди. Это протокол типа «выстрелил и забыл».
Низкие накладные расходы: Поскольку он не выполняет всех проверок, которые выполняет TCP, UDP работает быстрее и имеет меньше накладных расходов.
Контрольная сумма: Для обнаружения ошибок (16-битное значение, представляющее собой сумму заголовка UDP, полезной нагрузки и псевдозаголовка с уровня IP).
Поддерживает обнаружение ошибок, использует арифметику 1 для нахождения суммы
TCP |
UDP |
Ориентированный на соединение |
Не ориентированный на соединение |
Надежность (порядок поддерживается и повторная передача) |
Ненадежный |
Высокие накладные расходы - надежность, проверка ошибок и т.д. |
Низкие накладные расходы |
Управление потоком (на основе сети) |
Нет явного управления потоком |
Обнаружение ошибок - повторная передача ошибочных пакетов |
Имеет некоторую проверку ошибок - Ошибочные пакеты отбрасываются без уведомления |
Управление перегрузкой |
Нет управления перегрузкой |
Примеры использования: HTTP/HTTPS, передача файлов, почта |
Примеры использования: Потоковая передача данных, VoIP, DNS-запросы, ... |
Мультиплексирование и демультиплексирование
Теперь давайте поговорим о важнейшем навыке, который выполняет наш транспортный уровень: мультиплексировании и демультиплексировании. Представьте, что вы работаете в оживленном офисе с сотнями сотрудников и отвечаете за почтовое отделение.
Мультиплексирование - это сбор всей исходящей почты из разных отделов, добавление правильных адресных этикеток и ее рассылка. Транспортный уровень принимает данные от нескольких прикладных процессов, добавляет необходимые заголовки и отправляет их по сети.
Демультиплексирование - это обратный процесс. Когда приходит почта, ее нужно отсортировать и доставить в нужный отдел. Аналогично, когда данные поступают на хост, транспортный уровень использует информацию в заголовках сегментов, чтобы доставить данные в нужный прикладной процесс.
Соединение TCP
Давайте углубимся в то, как TCP устанавливает соединение. Это происходит с определенной последовательностью шагов.
![](https://habrastorage.org/getpro/habr/upload_files/179/65b/2bf/17965b2bf2653e927f91fe1194615de2.png)
-
Первый шаг: SYN (Синхронизация)
Клиент, желающий установить соединение с сервером, отправляет пакет с флагом SYN (синхронизация). Этот пакет содержит начальный номер последовательности (ISN), который будет использоваться для упорядочивания данных.
-
Второй шаг: SYN-ACK (Синхронизация и Подтверждение)
Сервер, получив SYN-пакет, отвечает пакетом с флагами SYN и ACK (подтверждение). В этом пакете сервер подтверждает получение SYN-пакета и отправляет свой собственный начальный номер последовательности.
-
Третий шаг: ACK (Подтверждение)
Клиент, получив SYN-ACK пакет, отправляет обратно пакет с флагом ACK, подтверждая получение SYN-ACK от сервера. На этом этапе соединение считается установленным, и обе стороны могут начинать обмен данными.
Этот процесс гарантирует, что обе стороны готовы к передаче данных и что соединение установлено надежно и упорядоченно.
Завершение соединения TCP
Так же важно, как и установление соединения, является его правильное завершение. TCP предоставляет два способа завершения соединения:
Вежливое завершение (с использованием флагов FIN)
Это четырехэтапный процесс, в ходе которого обе стороны соглашаются завершить общение. Это похоже на фразу: «Я закончил говорить. Ты тоже закончил? Хорошо, давай завершим этот разговор.»
![](https://habrastorage.org/getpro/habr/upload_files/61b/343/ba6/61b343ba6ad858546a8f897382ee3d33.png)
Аварийное завершение (с использованием флагов RST)
Это более внезапное завершение соединения, которое используется при возникновении ошибки или когда необходимо немедленно закрыть соединение. Это похоже на то, как если бы вы резко положили трубку, поняв, что набрали неправильный номер.
![](https://habrastorage.org/getpro/habr/upload_files/72a/d1b/ecb/72ad1becbabe7c1d1332bbb665c302cf.png)
Проблемы
Наша сеть не идеальна. Пакеты могут теряться, задерживаться или приходить в неправильном порядке. Как TCP справляется с этими проблемами? Давайте разберем:
![](https://habrastorage.org/getpro/habr/upload_files/0a4/70e/8b5/0a470e8b53ee823ed8da3343a24f67cd.png)
TCP использует умную систему номеров последовательности и подтверждений, чтобы обеспечить надежность передачи данных. Каждому байту присваивается номер последовательности, что помогает отслеживать, какие данные были отправлены и получены. Получатель подтверждает получение, отправляя отправителю номер следующего ожидаемого байта — этот процесс называется подтверждением (ACK). Если отправитель не получает подтверждение в течение определенного времени (RTT), он предполагает, что сегмент был потерян, и отправляет его снова.
Этот механизм можно сравнить с нумерацией страниц книги. Если вы читаете кому-то по телефону и связь прерывается, слушатель может сообщить вам, на какой странице он остановился, чтобы вы могли продолжить с этого момента. Таким образом, TCP обеспечивает надежную передачу данных, даже если сеть нестабильна.
Контроль потока: Предотвращение перегруженности
![](https://habrastorage.org/getpro/habr/upload_files/43a/dd7/92a/43add792af2353c2b32c6101303d8f1b.png)
Представьте, что вы пытаетесь пить из пожарного шланга — именно так выглядела бы ситуация, если бы медленный получатель пытался обрабатывать данные от быстрого отправителя без контроля потока. Чтобы этого не происходило, TCP использует механизм управления потоком. Получатель сообщает отправителю размер окна, то есть объем данных, который он может обработать в данный момент. В ответ отправитель контролирует, чтобы не передавать больше неподтвержденных данных, чем позволяет этот размер. Такой подход предотвращает перегрузку получателя и обеспечивает эффективную передачу данных, адаптируясь к возможностям обеих сторон.
Управление перегрузкой
TCP заботится не только об отправителе и получателе, но и о сети в целом, используя механизмы управления перегрузкой, чтобы предотвратить её. Он начинает передачу данных с небольшой скоростью и постепенно увеличивает её, если сеть справляется с нагрузкой. Однако, если обнаруживается потеря пакетов, что является признаком перегрузки, TCP снижает скорость передачи данных. Это можно сравнить с вождением на оживленной трассе: сначала вы двигаетесь медленно, затем разгоняетесь, если условия позволяют, но при появлении впереди тормозных огней снова сбавляете скорость.
UDP: Простой собрат
Хотя мы много говорили о TCP, не стоит забывать о UDP. Его простота — это его сила. Заголовок UDP намного проще, чем у TCP, и содержит всего четыре поля:
Порт источника
Порт назначения
Длина
Контрольная сумма
UDP работает по принципу «отправил и надеется на лучшее», что делает его идеальным для приложений, где важнее скорость, а не надежность, например для онлайн-игр или потоковых трансляций.
Заключение
Транспортный уровень с его протоколами TCP и UDP играет ключевую роль в интернет-коммуникациях, соединяя приложения с сетевой инфраструктурой. Он обеспечивает передачу данных — от доставки сообщений и видеозвонков до работы онлайн-игр. TCP гарантирует надежность и порядок, а UDP обеспечивает скорость и минимальные задержки. В следующий раз, когда вы будете загружать веб-страницу или смотреть видео, помните, что за этим стоит механизм передачи данных, который делает связь стабильной и быстрой.
Комментарии (6)
NickDoom
15.02.2025 07:50UDP не только быстрый, он ещё и живучий. Когда в канале 4 IP-пакета из 5 пропадают — TCP будет только реконнектиться, потому что не рассчитан на такое.
С UDP всё просто — нумеруем все датаграммы и передаём их в цикле, долетят-не-долетят, а те, которые получили ответ с подтверждением приёма — вычёркиваем из этой карусели. Можно одновременно в кучу каналов рассылать, кстати. И даже перебалансировать процент по мере улучшения/ухудшения каждого канала.
Ну и да, всякие там видеозвонки, где датаграмма должна либо дойти сразу, либо чёрт с ней — это тоже всё про UDP. Но уже без ручного подтверждения приёма.
BillGilbertN
Вам где-то накидали полные карманы запятых? Вы их ставите везде. Даже если это не нужно. Может, стоит подучить правила русского языка?
AzIdeaL
Вполне нормально и правильно: исключение знака тире, а также скобок, и привело к данной конструкции предложения.
BillGilbertN
И что же тут "правильного" и "нормального" и с чего вы решили, что в предложении должны быть скобки ?
На мой взгляд, предложение должно было выглядеть так: "Ваша задача - обеспечить участникам из разных стран возможность добраться до места проведения вовремя"
AzIdeaL
Ваш вариант правильный -- при наличии знака тире.
А первоначальный вариант, исключающий Ваше возражение про насилие запятых -- это:
"Ваша задача обеспечить (
в т.ч.,участникам из разных стран)... (и далее, по тексту)Как бы так)
BillGilbertN
Нет, не так) Но это уже неважно)
Автор просто убрал целиком весь обсуждаемые абзац.