TCP против UDP: особенности, использование и отличия

ТСР-против-УДПTCP и UDP два основных протокола для связи через Интернет, так как эти два протокола расположены в транспортный уровень модели TCP / IP и это первый уровень, на котором источник и пункт назначения обмениваются данными напрямую, поскольку нижние уровни (сетевой уровень и средний уровень доступа) не выполняют эту функцию. Сегодня мы объясним Основные характеристики протокола TCP и Протокол UDP , когда каждый из них используется, различия и основные виды использования.

Протокол TCP: что это и как работает?

Ассоциация TCP (протокол управления передачей) Протокол является одним из основных протоколов в Интернете, он позволяет приложениям взаимодействовать с гарантиями независимо от нижних уровней модели TCP / IP. Это означает, что маршрутизаторы (сетевой уровень в модели TCP / IP) должны только отправлять сегменты (единицы измерения в TCP), не беспокоясь о том, будут ли эти данные поступать правильно. TCP поддерживает несколько протоколов уровня приложений такие как HTTP (Интернет), HTTPS (защищенный Интернет), POP3 (входящая почта) и SMTP (исходящая почта), а также их безопасные версии с использованием TLS. TCP также используется в таких важных протоколах, как FTP, FTPES и SFTP для передачи файлов из источника в место назначения, и даже протокол SSH для локального и удаленного безопасного управления компьютерами использует протокол TCP.

основные черты

Поскольку TCP обслуживает большое количество протоколов прикладного уровня, он важно, чтобы данные (сегменты) доходили до получателя правильно без ошибок и по порядку. Если при передаче сегментов они повреждены или утеряны, автоматически TCP протокол начинается ретрансляция без вмешательства прикладного уровня. Таким образом, гарантируется, что данные достигают получателя без ошибок, так как этот протокол отвечает за решение любого типа проблемы.

MSS (максимальный размер сегмента) - это максимальный размер в байтах, который TCP может принимать в одном сегменте, он аналогичен MTU, но MSS находится на уровне транспортного уровня. Чтобы получить лучшую производительность, MSS должен быть достаточно маленьким, чтобы избежать фрагментации IP. MSS обычно объявляется на каждой стороне канала связи через сам заголовок TCP. Обычно размер MSS - это MTU (обычно 1500 байт) за вычетом заголовка TCP (переменная длина которого составляет не менее 20 байтов) за вычетом заголовка IP (переменная длина которого составляет не менее 20 байтов). MSS = MTU (1,500 байт) - заголовок TCP 20 байтов - заголовок IP 20 байтов

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



  • Контрольная
  • Нумерация всех сегментов для правильного контроля
  • Выборочные подтверждения ACK, хотя они также позволяют вам «накапливать» сегменты, чтобы с помощью одного ACK вы могли подтвердить несколько.
  • Таймеры: если проходит много времени, TCP автоматически повторно передает «потерянный» сегмент.
  • Дублирующиеся сегменты отбрасываются: в случае появления дублирующего сегмента (поскольку один занял больше времени, чем обычно, и был повторно отправлен), он удаляет его.

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

Еще одна очень важная характеристика информации, которая перемещается из источника в пункт назначения, заключается в том, что данные поступают в порядке то есть в том же порядке, в котором они были выпущены, поскольку протокол IP является протоколом с максимальными усилиями, он делает все возможное. Возможно, пакеты доставляются в порядке и корректно, но это ненадежно, поскольку ничего не гарантирует. , TCP имеет скользящее окно на отправителе и получателе, так что, если мы получим сегмент, который не в порядке, он будет автоматически «ждать», пока не прибудет отсутствующий сегмент, или же будет запрашивать повторную передачу только отсутствующего сегмента , С каждым сегментом, полученным получателем, отправляется ACK, указывающий отправителю, что все поступает правильно, однако в реальных реализациях TCP позволяет отправлять ACK для подтверждения приема нескольких сегментов одновременно, с целью не насыщение сети с таким количеством подтверждений.

Протокол TCP позволяет управление потоком то есть он способен смягчить возможное насыщение сети или удаленного хоста. Если устройство передает данные со скоростью 500 Мбит / с, а устройство-адресат может получать информацию только со скоростью 100 Мбит / с, протокол TCP динамически адаптируется. Таким образом, протокол TCP всегда будет пытаться максимизировать доступную пропускную способность между источником и назначением. Работа этого скользящего окна сложна, но в основном он работает в том, что у получателя есть доступное окно TCP с количеством байтов, которые могут быть сохранены в буфере, отправитель может отправлять данные до тех пор, пока это количество не будет заполнено. Для того чтобы отправитель отправил больше данных, получателю необходимо отправить ACK, указывающий, что все правильно и что он продолжает «загружать» его на прикладной уровень.



TCP также имеет контроль перегрузки это позволяет нам не терять пакеты в Интернете, потому что на маршрутизаторах возникает перегрузка. Если маршрутизатор не может обрабатывать или пересылать пакеты со скоростью, с которой он их получает, сам маршрутизатор отбрасывает их, и он будет потерян, поскольку его буфер будет заполнен. Мы не должны путать управление потоком (которое мы объяснили выше) с управлением перегрузкой. Окно перегрузки (дополняющее окно приема) - это то, что используется для управления контролем перегрузки в TCP. В ситуации отсутствия перегрузки преимущество перегрузки такое же, как у окна приема, если происходит перегрузка, размер преимущества перегрузки уменьшается, а если он исчезает, он увеличивается. Максимальное количество байтов, которое может отправить отправитель, является минимумом обоих размеров окна (если окно перегрузки составляет 1500 байтов, а окно приема составляет 2000 байтов, то отправляется 1500 байтов, самое маленькое).

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

TCP в настоящее время имеет различные алгоритмы для эффективного управления перегрузкой, первыми были TCP Tahoe и Reno, хотя у нас также есть другие, такие как TCP Vegas, но с годами, благодаря новым сетям передачи данных TCP / IP, у них появились другие алгоритмы, которые более эффективным. Например, у нас есть TCP БРР что позволяет нам отправлять информацию как можно быстрее, поскольку он намного эффективнее исходного протокола TCP (у нас будет большая скорость). У нас также есть TCP Cubic, который является средством контроля перегрузки, используемым Linux и операционные системы Unix.



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

Установление соединения между клиентом и сервером и отключение в TCP

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

Это предыдущее соединение называется 3-способ рукопожатия , и он в основном состоит из клиента (того, кто инициирует соединение), отправляющего SYN-сообщение на сервер (тот, который получает соединение). Затем сервер отправит сообщение типа SYN-ACK, указывающее, что он может начать отправку информации, наконец, клиент отправляет ACK, указывающий, что он получил его правильно, и вся информация между клиентом и сервером уже отправляется. двунаправленный способ. Очень важной деталью TCP является то, что он генерирует порядковые номера на каждой стороне, помогая тому, что ложные соединения между ними не могут быть установлены, хотя, если злоумышленник находится «посередине», то ARMАтака MitM-типа может быть осуществлена ​​с помощью спуфинга или подобного, но не через Интернет.



Одна из уязвимостей TCP заключается в отправке большого количества сегментов TCP SYN с целью «насыщения» подключений к получателю. Вот некоторые возможные решения для смягчения атаки типа «отказ в обслуживании»:

  • Ограничьте количество подключений, глобальных или IP-подключений.
  • Принимайте только подключения к доверенным IP-адресам.
  • Задержка распределения ресурсов с помощью «куки», или также называемых SYN Cookies.

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



Заголовок TCP

TCP добавляет XNUMX% 20 байтов заголовка в каждом сегменте, так как у нас есть «необязательное» поле. В этом заголовке TCP мы найдем порт источника и порт назначения соединения (сокета), мы также найдем порядковый номер, номер ACK и различные флаги TCP, такие как SYN, ACK, RST, FIN, URG и другие. В этом заголовке у нас также есть очень важная часть для работы со скользящим окном, и у нас будет 16-битное поле, которое указывает размер окна приема, которое мы объяснили ранее.

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

  • Известные порты : от 0 до 1023. Эти порты зарезервированы IANA для определенных приложений, таких как HTTP-сервер, FTP, SSH и многие другие известные порты.
  • Зарегистрированные порты : От 1024 до 49151. Эти порты зарезервированы для конкретных приложений, таких как системы управления базами данных, BitTorrent и многие другие приложения.
  • Частные порты : от 49152 до 65535. Эти порты не зарезервированы никаким приложением, и вы можете использовать их свободно, не затрагивая любой другой протокол.

Протокол UDP: что это и как работает?

Ассоциация Протокол UDP (протокол пользовательских дейтаграмм) является одним из основных протоколов в Интернете, он позволяет приложениям обмениваться данными с гарантиями независимо от нижних уровней модели TCP / IP. Это означает, что маршрутизаторы (сетевой уровень в модели TCP / IP) должны отправлять только дейтаграммы (единица измерения в UDP). UDP поддерживает несколько протоколов прикладного уровня, например, популярный DNS и даже протокол DHCP для автоматического получения (и предоставления) IP-адресации.

основные черты

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

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

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



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

Заголовок UDP

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

TCP против UDP в различных протоколах VPN, таких как OpenVPN

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

Сегуро OpenVPN

OpenVPN позволяет использовать протокол TCP и UDP для туннеля данных, как вы видели, TCP и UDP сильно различаются, и всегда рекомендуется использовать TCP, так как он имеет управление потоком, контроль перегрузки, контроль ошибок и многие другие функции, которые делают соединение надежным. Если вы собираетесь использовать OpenVPN, по умолчанию используется UDP, это связано с тем, что, если есть какие-либо проблемы, протоколы прикладного уровня, такие как HTTP (который использует TCP ниже), будут отвечать за выполнение повторных передач, если это было необходимо, поэтому соединение будет надежным (управление потоком, перегрузка, ошибки и т. д.), даже если зашифрованный туннель точка-точка использует UDP.

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

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