TCP против UDP: развенчание мифов о надежности и эффективности.

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

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

TCP расшифровывается как Transmission Control Protocol (протокол управления передачей) и известен как протокол, ориентированный на установление соединения. Это означает, что прежде чем одно приложение сможет начать отправку данных другому, оба процесса должны выполнить рукопожатие. Рукопожатие — это логически связанный процесс, обеспечивающий надежную передачу и упорядоченный прием данных. Во время рукопожатия устанавливается соединение между исходным и целевым хостами путем обмена серией управляющих пакетов и согласования некоторых параметров и правил для обеспечения успешной передачи данных.

Что такое TCP? (Mylinking'sСетевой переходникиБрокер сетевых пакетовможет обрабатывать как TCP, так и UDP пакеты.)
TCP (Transmission Control Protocol) — это ориентированный на соединение, надежный протокол связи транспортного уровня, основанный на потоковой передаче байтов.

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

TCP-соединение — это полнодуплексная услуга, что означает, что хост A и хост B могут передавать данные в обоих направлениях по TCP-соединению. То есть данные могут передаваться между хостами A и B в двунаправленном потоке.

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

TCP-UDP

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

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

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

В компьютерных сетях передача данных между хостами осуществляется посредством сегментов. Так что же такое сегмент пакета?

TCP создает TCP-сегмент, или сегмент пакета, путем разделения входящего потока на части и добавления заголовков TCP к каждой части. Каждый сегмент может передаваться только в течение ограниченного времени и не может превышать максимальный размер сегмента (MSS). На своем пути сегмент пакета проходит через канальный уровень. Канальный уровень имеет максимальный размер передаваемого блока (MTU), который представляет собой максимальный размер пакета, который может пройти через канальный уровень. Максимальный размер передаваемого блока обычно связан с интерфейсом связи.

В чём же разница между MSS и MTU?

В компьютерных сетях иерархическая архитектура очень важна, поскольку она учитывает различия между различными уровнями. Каждый уровень имеет свое название; на транспортном уровне данные называются сегментом, а на сетевом уровне — IP-пакетом. Таким образом, максимальный размер передаваемого блока (MTU) можно рассматривать как максимальный размер IP-пакета, который может быть передан сетевым уровнем, а максимальный размер сегмента (MSS) — это понятие транспортного уровня, обозначающее максимальный объем данных, который может быть передан TCP-пакетом за один раз.

Обратите внимание, что если максимальный размер сегмента (MSS) превышает максимальный размер передаваемого блока (MTU), фрагментация IP-пакетов будет выполняться на сетевом уровне, и TCP не будет разделять большие данные на сегменты, соответствующие размеру MTU. Для IP-уровня будет создан отдельный раздел на сетевом уровне.

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

Сегмент TCP

Порядковый номерSYN-пакет: случайное число, генерируемое компьютером при установлении соединения, является его начальным значением при установлении TCP-соединения, и этот порядковый номер отправляется получателю через SYN-пакет. Во время передачи данных отправитель увеличивает порядковый номер в соответствии с объемом отправленных данных. Получатель определяет порядок данных в соответствии с полученным порядковым номером. Если обнаруживается несоответствие порядка данных, получатель переупорядочивает данные, чтобы обеспечить их правильный порядок.

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

Управляющие биты сегмента TCP включают в себя следующее:

бит ACKЕсли этот бит равен 1, это означает, что поле подтверждения ответа действительно. В TCP указано, что этот бит должен быть установлен в 1, за исключением пакетов SYN при первоначальном установлении соединения.
RST битЕсли этот бит равен 1, это означает, что в TCP-соединении возникла ошибка, и соединение необходимо принудительно разорвать.
SYN битЕсли этот бит установлен в 1, это означает, что соединение должно быть установлено, и начальное значение порядкового номера задается в поле порядкового номера.
Фин битКогда этот бит равен 1, это означает, что в будущем передача данных прекращается, и соединение необходимо установить.
Различные функции и характеристики TCP воплощены в структуре сегментов TCP-пакетов.

Что такое UDP? (Mylinking's)Сетевой переходникиБрокер сетевых пакетов(может обрабатывать как TCP, так и UDP-пакеты)
Протокол UDP (User Datagram Protocol) — это протокол связи без установления соединения. В отличие от TCP, UDP не предоставляет сложных механизмов управления. Протокол UDP позволяет приложениям напрямую отправлять инкапсулированные IP-пакеты без установления соединения. Когда разработчик выбирает использование UDP вместо TCP, приложение взаимодействует напрямую с IP-адресом.

Полное название протокола UDP — протокол пользовательских дейтаграмм (User Datagram Protocol), а его заголовок занимает всего восемь байтов (64 бита), что очень лаконично. Формат заголовка UDP следующий:

сегмент UDP

Порты назначения и отправленияИх основная цель — указать, какому процессу UDP следует отправлять пакеты.
Размер упаковкиПоле «Размер пакета» содержит размер заголовка UDP плюс размер данных.
Контрольная суммаКонтрольная сумма предназначена для обеспечения надежной доставки заголовков и данных UDP. Ее роль заключается в обнаружении ошибок или повреждений во время передачи пакета UDP для обеспечения целостности данных.

Различия между TCP и UDP в MylinkingСетевой переходникиБрокер сетевых пакетовможет обрабатывать как TCP, так и UDP пакеты.
TCP и UDP различаются по следующим параметрам:

TCP против UDP

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

Объект сервисаTCP — это двухточечный протокол «один к одному», то есть соединение осуществляется только с двумя конечными точками. В то же время UDP поддерживает интерактивную связь «один к одному», «один ко многим» и «многие ко многим», позволяя одновременно взаимодействовать с несколькими хостами.

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

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

Заголовок верхнего уровняTCP имеет большую длину заголовка, обычно 20 байт, которая увеличивается при использовании полей параметров. UDP, с другой стороны, имеет фиксированный заголовок всего в 8 байт, поэтому у UDP меньше накладных расходов на заголовок.

TCP против UDP

Сценарии применения протоколов TCP и UDP:
TCP и UDP — это два разных протокола транспортного уровня, и они имеют некоторые различия в сценариях применения.

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

Передача файлов по FTPПротокол TCP гарантирует, что файлы не будут потеряны или повреждены во время передачи.
HTTP/HTTPSTCP обеспечивает целостность и корректность веб-контента.
Поскольку UDP — это протокол без установления соединения, он не гарантирует надёжности, но обладает такими характеристиками, как эффективность и работа в режиме реального времени. UDP подходит для следующих сценариев:

Низкопакетный трафик, например, DNS (система доменных имен).DNS-запросы обычно представляют собой короткие пакеты, и протокол UDP позволяет обрабатывать их быстрее.
Мультимедийная связь, такая как видео и аудио.Для передачи мультимедийных данных с высокими требованиями к скорости передачи в реальном времени протокол UDP обеспечивает меньшую задержку, гарантируя своевременную передачу данных.
Вещательная связьПротокол UDP поддерживает связь «один ко многим» и «многие ко многим» и может использоваться для передачи широковещательных сообщений.

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


Дата публикации: 03.12.2024