Что мы знаем о TCP и UDP? Интернет, блокчейн, облачные вычисления – независимо от области, компьютеры наиболее эффективны, когда они подключены друг к другу. Однако процесс отправки данных – и обеспечение того, чтобы они дошли до своей аудитории в целости и сохранности – требует сложного взаимодействия сетей и узлов. Прежде чем углубляться в особенности протоколов TCP и UDP, важно сделать шаг назад.
Все сетевые модели стремятся описать один и тот же процесс: как биты данных передаются по проводам в виде электрического импульса или по оптоволоконным кабелям в виде световых узоров. И – на восходящем конце – как эти биты данных принимаются и повторно собираются.
Передача данных из одного приложения на одном компьютере на другой технически возможна по одному протоколу. Однако этот метод будет невероятно хрупким: любые модификации аппаратного обеспечения означают, что необходимо изменить все приложение и программное обеспечение протокола. Чтобы достичь гибкости, необходимой для подключения устройств, в сети используются многоуровневые стеки различных протоколов. Каждый слой в стеке выполняет определенную функцию и взаимодействует со слоями непосредственно над и под ним.
Сегодня наиболее инклюзивной структурой является взаимодействие открытых систем (OSI). UDP и TCP измельчают и изменяют некоторые задействованные уровни, поэтому начало с OSI дает лучшую отправную точку для более глубокого изучения.
Краткий обзор модели OSI
Физический слой
На самом базовом уровне этот уровень состоит из механических элементов отправки и получения данных. Это определяет, как контакты и провода кодируют 0 и 1 в сигнал, который затем отправляется в местные средства массовой информации в виде световых, электрических и радиосигналов.
Уровень канала передачи данных (DLL)
Уровень канала передачи данных действует как посредник между физическими компонентами устройства и пакетами сетевых данных. Данные на физическом уровне по существу неструктурированы, и задача этого уровня — упаковать их в кадры. При этом постоянный поток отправленных данных группируется в кластеры — процесс, называемый мультиплексированием. Здесь каждому пакету данных присваивается заголовок, обозначающий предполагаемого отправителя и получателя.
Сетевой уровень
Когда пакеты данных готовы к отправке, сетевой (или Интернет) уровень может маршрутизировать пакеты данных от одного устройства к другому через сеть. Это достигается путем присвоения каждому устройству уникального IP-адреса, который используется для идентификации устройства и определения маршрута, по которому пакеты должны пройти, чтобы достичь его.
Транспортный уровень
Транспортный уровень, расположенный между сетевым и сеансовым уровнями, фокусируется на доставке сообщений хосту. Транспортный уровень позволяет приложениям и службам работать быстрее, поскольку восходящим процессам не нужно учитывать уникальные характеристики сети связи каждого устройства. Этот уровень является основой протоколов UDP и TCP, к которым мы вскоре доберемся.
Сеансовый уровень
Транспортный уровень не заботится о том, что два компьютера уже установили связь — он просто фокусируется на пересылке пакетов туда и обратно. Сеансовый уровень организует трафик в логическое начало и конец.
Уровень представления
Объем этих пакетов данных может быть очень большим. Уровень представления в основном фокусируется на кодировании и сжатии этих пакетов, чтобы снизить требования к полосе пропускания, прежде чем они покинут устройство отправителя.
Прикладной уровень
Наконец, эти полученные данные (или данные, которые будут отправлены) необходимо передать пользователю. Хотя OSI является полезной моделью, имейте в виду, что ни один современный протокол не следует ее точным контурам на всех семи уровнях. Например, протоколы TCP и UDP ориентированы только на сетевой и транспортный уровни.
Что такое TCP
Протокол управления транспортировкой был, по сути, первым сетевым протоколом. Изобретенная вскоре после появления Интернета в 1981 году, ее первая форма была сосредоточена на сегментации данных на пакеты. За прошедшие десятилетия он вырос и превратился в стек TCP/IP, который является сегодняшним стандартом. Пакеты в TCP разделены на 4 уровня: канальный уровень, сетевой, транспортный и прикладной.
Как следует из названия, TCP оказывает наибольшее влияние на транспортном уровне. Перед отправкой каких-либо данных TCP устанавливает короткое соединение между двумя конечными точками сети посредством трехстороннего рукопожатия.
Сначала клиент инициирует соединение, отправляя сообщение SYN (синхронизация) (в форме случайного числа) — при получении сервер подтверждает его с помощью SYN-ACK (который просто добавляет 1 в конце номера клиента).). Наконец, этот SYN-ACK подтверждается клиентом сообщением ACK. Это виртуальное рукопожатие гарантирует, что и отправитель, и получатель готовы к общению и знают, что канал установлен. Если принимающий порт отключен или недоступен, сообщение ACK заменяется пакетом TCP RST (сброс).
На двустороннем подтверждении основан не только начальный процесс: двустороннее завершение также подтверждает, что клиент или сервер также завершили отправку данных. По аналогичной схеме, после того как все соответствующие фрагменты данных были отправлены, клиент отправляет их через сегмент FIN в форме своего собственного порядкового номера. Опять же, сервер подтверждает это. Когда все данные получены сервером, наступает очередь сервера отправить пакет FIN, который подтверждается и соединение разрывается.
Важность интеллектуальной собственности
Критическим для этого процесса является тот факт, что для каждого соединения перед отправкой необходимо определить пункт назначения. Только после этого может произойти TCP-квитирование. Здесь Интернет-протокол (IP) выступает в качестве другой стороны медали TCP/IP.
Каждое устройство или домен, подключенное к Интернету, имеет уникальный IP-адрес. В заголовке каждого пакета данных указан IP-адрес предполагаемого получателя, что означает, что данные попадают туда, где они необходимы. Как только IP-адрес идентифицирован, процесс TCP может инициировать передачу данных. Однако полученные данные должны попасть в правильный порт, поэтому TCP-пакеты включают данные порта. Считайте IP-адрес почтовым индексом, а данные TCP-порта — номером конкретного дома. Наконец, TCP-пакеты включают порядковый номер, аналогичный нумерованным страницам в письме; они определяют, в каком порядке отправляются пакеты.
Хотя TCP/IP стал стандартом безопасной и надежной передачи данных через Интернет, основным преимуществом подхода IP является его гибкость, и TCP — не единственный способ передачи данных из точки А в точку Б.
Что такое UDP
Протокол пользовательских дейтаграмм (UDP) — это облегченный протокол передачи данных, работающий на основе IP. Однако вместо длительного процесса установления связи, как в TCP, UDP отправляет небольшие независимые пакеты, известные как дейтаграммы, без предварительной перекрестной ссылки на соединение. Хотя это может показаться рискованным, UDP создан с возможностью отбрасывать информацию и не допускать критических сбоев связи.
Каждая дейтаграмма является самодостаточной единицей и не содержит информации о фрагментах данных, поступающих до или после. Таким образом, вместо обработки накопившихся задержанных пакетов сервер может обрабатывать запросы полностью линейным образом. Этот процесс поддерживается размером пакетов, участвующих в UDP. Рассмотрим, как пакеты TCP имеют встроенную проверку ошибок и последовательную нумерацию: если удалить все эти необязательные дополнения, дейтаграммы UDP уменьшатся в разы. Эти оптимизированные фрагменты данных затем могут обрабатываться с молниеносной скоростью.
В результате UDP используется в сервисах, которым требуется обработка практически в реальном времени. Подумайте о потоковом видео и компьютерных играх: им может потребоваться много датаграмм UDP, но их скорость необходима для хорошего взаимодействия с пользователем. А если пакет упадет или пропадет, реальными последствиями, возможно, будет отсутствие пикселя, сохраняющегося в течение кадра. Связывая доменное имя с узнаваемым веб-адресом, запросы службы доменных имен (DNS) также используют UDP. Эти запросы крошечные и состоят из одной пары запрос-ответ, но они должны выполняться быстро, что делает UDP естественным вариантом использования.
Отличия между TCP и UDP по функциям
Особенность | UDP (протокол пользовательских дейтаграмм) | TCP (протокол управления передачей) |
Связь | Без установления соединения: соединение не устанавливается перед отправкой данных. | Ориентированный на соединение, перед передачей данных устанавливается трехстороннее рукопожатие. |
Надежность | Не гарантирует доставку, заказ или проверку ошибок. | Архитектура пакетов обеспечивает доставку в правильном порядке. |
Скорость | Быстрый. | Медленнее, чем UDP, из-за обширных механизмов проверки ошибок. |
Управление потоком данных | Нет контроля потока; отправляет данные так быстро, как отправитель может их сгенерировать и сеть может обработать. | Управление потоком осуществляется с помощью оконных методов для настройки потока данных. |
Применение | Используется для чувствительных ко времени приложений, где потеря некоторых данных допустима (например, потоковое аудио/видео в реальном времени). | Используется там, где надежная доставка данных имеет решающее значение (например, просмотр веб-страниц, электронная почта). |
Размер заголовка | Меньший размер заголовка (8 байт). | Увеличенный размер заголовка (минимум 20 байт). |
Последовательность действий | Не упорядочивает пакеты данных. | Упорядочивает пакеты данных для обеспечения упорядоченной доставки. |
Еще немного пищи для размышления, посвященной вопросам безопасности
Выбирая между протоколами UDP и TCP в своих проектах, имейте в виду, что хотя скорость UDP делает его привлекательной перспективой, он по своей сути более восприимчив к проблемам безопасности, таким как спуфинг и атаки типа «отказ в обслуживании». Механизм установления связи TCP предотвратит возникновение проблем с любыми поддельными IP-адресами, но учтите, что TCP не застрахован. В последние годы DDoS-атаки с усилением взломали этот возвратно-поступательный механизм, заставив сервер ждать окончательного сообщения ACK, которое так и не пришло.