МЕНЮ

Транспортные протоколы TCP и UDP. Что это такое и в чем разница?

Zip File, мамкины хаЦкеры. С вами Денчик и сегодня мы продолжим рассматривать базовые концепции сетевых технологий, а конкретнее, более полно познакомимся с транспортными протоколами TCP и UDP. Разберём что из себя представляют данные протоколы, поговорим о том, что происходит на транспортном уровне моделей OSI и TCP/IP, а также проведём напоследок небольшое сравнение механизмов работы. Если вам интересна данная тема и вы хотите с головой погрузиться в сетевую безопасность, тогда обновите себе вискарик в бокале, устройтесь по удобней в пропуканом кресле, и больше не будем терять не минуты. Погнали

Но, прежде чем мы перейдём к космическим кораблям в виде механизмов работы транспортных протоколов, мне бы хотелось поговорить о более реальной, земной работе офисных клерков.

Так уж сложилось, что наиболее популярными программулинами в любом офисе, в том числе у сотрудников, занимающих внушительные позиции в ТОПах, являются Ворд, Аутлук, и конечно, Excel в связке с Гугл таблицами.

Согласно официальной статистике в одном только Excel’е ежедневно работают около 1 млрд пользователей. Однако, по данным Acuity Training, лишь 6% из них знакомы со всеми возможностями этой программы.

Но благо, это легко поправимо. Ведь недавно образовательная платформа SkillBox запустила курс по работе с Excel и Google таблицами с нуля

до уровня PRO. Курс спроектировали опытные методисты и эксперты, которые ежедневно проводят в Excel’е большую часть своего рабочего времени. Программа построена таким образом, что за 4 месяца вы с нуля получите продвинутые навыки по работе с табличным редактором.

Уже с первых занятий вы будете выполнять практические задания и получать подробную обратную связь от опытных наставников и кураторов курса, попутно перенимая их опыт, профессиональные знания и лайфхаки.

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

Весь процесс обучения построен по принципу: от простого к сложному. После каждого модуля нужно будет выполнить домашнее задание, чтобы закрепить полученные знания, а грамотные кураторы в свою очередь всё проверят и дадут корректирующую обратную связь в течение суток.

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

И кто знает. Быть может, именно эти скиллы помогут вам получить повышение или увеличить цену за ваши услуги. Ведь с ними вы не только сможете быстро и качественно обрабатывать данные, но и брать на себя более ответственные задачи.

Более подробно ознакомиться со всей информацией по курсу «Excel и Google Таблицы с нуля до PRO» и выбрать наиболее подходящий тариф, вы можете, перейдя по ссылочке в описании, либо отсканировов QR который видите на экране.

А по моему промокоду специально для мамкиных хаЦкеров, ребята из SkillBox сделают скидку 50%. Так что не протупите. Переходите по ссылке в описании или по QR-коду. Оставляйте заявку прямо сейчас, и уже завтра будете щёлкать макросы в Иксэльке круче любого ген. дира. Бегом записываться.

Окей. Теперь, собственно, вернёмся к основной теме ролика. И начнём мы с определения. Транспортный уровень — определяет способы доставки данных (т.е., по сути, сам механизм передачи данных). Тип взаимодействия в нём: точка – точка.

Основные проблемы, которые, как правило решаются на данном уровне, это мультиплексирование (т.к. он может работать с несколькими потоками данных между двумя устройствами).

Надежная передача данных, регулирование количества передаваемых данных и непосредственный контроль доставки. Единицы измерения, с которыми работает Transport Layer – сегмент и дейтаграмма.

Протокол TCP

На транспортном уровне работают популярные протоколы: TCP и UDP. Спецификация протокола TCP приведена в RFC 675.

Данный протокол является “рабочей лошадкой” Интернета. Именно он передает данные между приложениям (например, браузером и web-службами).

К его основным функциям относится надежная доставка данных, сборка сегментов на стороне получателя, контроль сессии и скорости передачи данных.

Ведь согласитесь, когда приложение посылает данные в сеть, никто не знает, какой путь будет выбран для каждого отдельного пакета. Также ничто не гарантирует, что до получателя дойдут все посланные данные.

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

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

Надежная же доставка осуществляется за счёт автоматической повторной пересылки пропавших сегментов. Каждый сегмент TCP содержит в заголовке специальное поле — (Sequence number). По русски – порядковый номер.

После того, как отправитель выслал какое-то количества сегментов, он будет ждать подтверждения от получателя, с указанием порядкового номера следующего сегмента, который адресат желает получить. Если такое подтверждение не будет получено, отправка вновь повторится.

Сборка сегментов пришедших в неправильном порядке также будет осуществлена автоматически с использованием всё тех же полей.

Протокол TCP соберет сегменты сессии в нужном порядке и передаст правильные данные приложению получателя.

Перед началом передачи, TCP всегда проверяет, что получатель существует и готов принимать данные. Этот механизм называется “трехстороннее рукопожатие” (three-way handshake).

Во время сессии все данные тщательно контролируются. А при закрытии получатель и отправитель также извещают друг друга о том, что сеанс связи был завершен.

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

Благодаря этому, отправитель может динамически менять размер пересылаемых данных, анализируя подтверждения от получателя.

Заголовок TCP

Давайте более подробно проанализируем из чего состоит классический TCPшный заголовок. Основные поля тут, это:

●Source и Destination port — номера портов получателя и отправителя;

●Sequence number и номер подтверждения;

●Header length — длина самого заголовка. Число в данном поле всегда нужно умножать на 4, чтобы узнать истинное значение;

●Window — размер окна;

●Urgent — признак важности (срочности) данного сегмента;

●Options — необязательное поле, которое может использоваться разработчиками;

●ACK - значение номера подтверждения;

●Push - получатель должен передать все данные из буфера в приложение и сразу же отправить сообщение с подтверждением;

●Rеset – грубый сброс соединения;

●SYN - создает соединение;

●FIN – вежливо завершает его.

Номер порта - это идентификатор приложения на хосте получателя и/или отправителя. В значении номера у вас всегда будет целое положительное число (от 0 – до 65535). Сами номера в свою очередь условно делятся на: административные, пользовательские и частные.

Список тех, которые стоит запомнить вы сейчас видите на экране. На практике, если использовать какой-нибудь сетевой сканер аля Wireshark, это будет выглядеть следующим образом.

Кстати, по практике в Wireshark'е на канале есть отдельный полноценный урок. Настоятельно рекомендую к просмотру, если хотите вникнуть в тему анализа не только поверхностно.

Но одну фишку я расскажу вам прямо сейчас. Флаг Urgent, необязательный флаг, который частенько используется для передачи зловредных данных. Т.е. Потенциальная уязвимость.

По умолчанию большинство современных систем умеет его откидывать, но,  как показывает практика, не все делают это корректно. Поэтому очень часто именно с его помощью злоумышленники обманывают IPSки и передают жертве данные, как ни в чём не бывало.

Сокеты

Сетевой сокет – это структура которая определяет конечную точку во время сетевого обмена данными. Для TCP/IP сокетом является сочетание трех параметров сессии: транспортного протокола (TCP или UDP), номера порта и IP-адреса.

Сетевой сокет TCP/IP также называют интернет-сокетом. Парные сокеты - локальный и соответствующий удаленный сокет. Хорошая аналогия сокетов – это динамик и микрофон на смартфоне.

При разговоре по мобильному телефону: вы говорите в микрофон, который на вашем устройстве, а слышит вас собеседник в своём динамике.

Т.е. это такая "виртуальная" труба, соединяющая две точки в сети, где каждый пишет и читает в свой и из своего сокета, что приводит к автоматическому взаимодействию с удалённым сокетом. 

По подключению сокеты бывают 3 типов: потоковый (TCP); сокет дейтаграмм (UDP) и сырой (raw) сокет в котором зашит IP-пакет с данными.

По функциям сокеты делятся на клиентский (всегда один) и серверный (может быть несколько одинаковых на сервере).

Установка и завершение соединения

Установка соединения - важная стадия сетевого обмена. Хосты могут убедиться, что они оба существуют и работают, что на обоих запущен один и тот же стек протоколов. Как я уже упоминал, протокол TCP устанавливает соединение с помощью трехстороннего рукопожатия (в три этапа).

Сначала отправляется SYN-пакет. От сервера приходит ответ SYN-ACK. И потом наш клиент снова отсылает серверу TCP-сегмент с флагом ACK. 

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

Сначала посылаем пакет с флагом FIN. В данном случае, флаг ACK отвечает за подтверждение передачи. Хотя по факту это вообще не имеет отношение к закрытию соединения.

Далее получает в ответ подтверждение, что соединение закрыто. И затем получаем уведомление ACK + FIN от удаленного хоста, что соединение закрыто. Ну и закрываем эту историю подтверждением закрытия флагом ACK.

Тут важно помнить, что в заголовке сегмента TCP есть специальный флаг RESET, он же сброс. Если этот флаг установлен в 1, это означает, что хост, получивший такой пакет, должен немедленно прекратить обмен и закрытий со своей стороны сокет.

Данный механизм нужен для уведомления противоположной стороны о произошедшем сбое.

Заголовок UDP

Протокол UDP является “рабочей лошадкой” всех потоковых сервисов для аудио-видео стриминга и геймдева. Именно этот протокол обеспечивает работу современных цифровых сервисов. Кроме этого, он является основой для DNS.

Спецификация протокола UDP приведена в RFC 768. Главными особенностями данного протокола является:

●Ориентация на транзакции (запрос - ответ), например: DNS или NTP;

●Простота исполнения. Тут не требуется сложная модель обмена данными;

●Отсутствие сохранения состояния соединения. Это хорошо подходит для рассылки большому количеству хостов (например, IPTV);

●Отсутствие повторной передачи. Это позволяет работать в режиме реального времени (актуальненько в играх) 

Ну и на закуску поддержка многоадресной рассылки. В этом режиме данные передаются группе хостов. В сетях IPv4 для многоадресного вещания зарезервирована подсеть 224.0.0.0/4.

Преимущество многоадресного вещания в том, что снижается нагрузка на пропускную способность сети, т.к. часть информации для разных клиентов передается один раз по “общему” маршруту.

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

Сравнение TCP и UDP

Если сравнить протоколы TCP и UDP по 5 основным показателям, то в плане надёжности TCP управляет потоком данных через подтверждения, повторные передачи и изменение скорости. В UDP ничего этого нет.

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

А вот в вопросе ресурсоемкости TCP требует много накладных расходов (по времени и по нагрузке на сеть). Особенно, при неустойчивой связи. В UDP же всё очень просто, поэтому он работает быстрее и меньше нагружает сеть.

Опять же, широковещательный режим. Т.к. UDP не требует установки соединения, то данные, которые посылаются всем узлам сети, будут обработаны одинаково.

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

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

Окей друзья. Вот мы с вами и познакомились с базовыми представлениями о протоколах транспортного уровня TCP и UDP. Если остались вопросы – можете задать их в комментах, сразу после того, как досмотрите ролик.

А если не поленитесь и чекните описание, то найдёте там ссылку на домашнее задание к данному видеосюжету опубликованное на моём авторском сайте. Там же выложены домашки к каждому уроку из цикла «Информационная безопасность с нуля до джуна».

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

Ну а всем олдам по традиции, хочу пожелать удачи, успеха, и самое главное, отличного настроения. Большое спасибо, что смотрите мои ролики до конца. Это очень вдохновляет на съёмку новых сюжетов.

Хочется верить, что вы замечаете рост в уровне проработки и подачи трудновоспринимаемых материалов. А то у меня периодически уже мозг закипает от душноты материала.

Ладненько, это всё мелочи. До новых встреч, мои кайфные друже. Всем пока.

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

telegram chanel

Хочешь больше контента? Подписывайся на YouTube-канал!

Курс «Диплом за неделю»

Пособие «Библия вардрайвинга»

Курс Cisco «CCNA: Introduction to Networks»

© 2024. IT-спец. Денис Курец.