Транспортный уровень. Протоколы TCP и UDP

На транспортном уровне используется два основных транспортных протокола UDP — User Datagram Protocol, RFC 768 (протокол пользовательских дейтаграмм) и TCP — Transmission Control Protocol, RFC 793 (протокол управления передачей).

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

Протокол UDP

Данный протокол иногда называют протоколом ненадёжной доставки. Этот протокол предоставляет прикладным процессам транспортные услуги, которые немногим отличаются от услуг протокола IP (сетевого уровня).

Протокол UDP обеспечивает только доставку дейтаграммы и не гарантирует её выполнение. При обнаружении ошибки дейтаграмма просто стирается. Протокол не поддерживает виртуального соединения с удалённым модулем UDP. Чаще всего базируется на принципах динамической маршрутизации (каждая дейтаграмма передаётся по оптимальному маршруту). Основное достоинство — простота.

Формат UDP-дейтаграммы имеет следующий вид:

Видно, что формат протокола UDP размещается в поле данных IP-пакета (или после заголовка IP-пакета) и содержит следующие поля:

Поле «Порт источника» (Source Port) указывает порт процесса источника, куда может быть адресован ответ на данное сообщение.

Поле «Порт получателя» (Destination Port) идентифицирует принимающий процесс.

Под «портом» понимается адрес (номер) некой точки доступа к услугам другого уровня. В случае архитектуры TCP/IP под портом понимается некий номер области памяти, где размещаются передаваемые в сеть (протоколу UDP или TCP) и принимаемые из сети (поступающие в распоряжение операционной системы) данные. Номера портов на передачу и приём в общем случае могут различаться. На приёмной и передающей сторонах взаимодействие процессов в общем случае может происходить через разные номера портов, поэтому указание порта в заголовке UDP-дейтаграммы необходимо.

В поле «Длина» (Length) указывается размер данной дейтаграммы с учётом длины заголовка в байтах.

Поле «Контрольная сумма» (Checksum) обеспечивает контроль правильности данных и заголовка. Суммируются все контролируемые 16-битные слова (с циклическим переносом из старшего разряда в младший). Инвертированное значение результата записывается в поле контрольной суммы. Если UDP-дейтаграмма содержит нечетное число байтов, то недостающий последний байт в таких случаях считается нулевым. Этот байт не передается в области данных.

При подсчете контрольной суммы протокол UDP учитывает 12-байтовый псевдозаголовок (pseudo header). Псевдозаголовок включает в себя: IP-адрес источника, IP-адрес приемника, протокол (код 17) и длину UDP-дейтаграммы.

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

UDP-данные могут отсутствовать.

Прикладные процессы и модули UDP взаимодействуют через UDP-порты, которые нумеруются, начиная с 0. Прикладной процесс ожидает сообщение в порт, специально выделенный для этих услуг. Номер этого порта является общеизвестным и определяется стандартами сети Internet.

Номера портов, используемые в протоколе UDP
Номер порта Идентификатор в стандарте Идентификатор в UNIX Описание
ECHO echo Эхо
- netstat Программа выдачи состояния сети
TIME time Текущее время
NAMESERVER name Сервер имен хостов
NICNAME whois Информация о пользователе
DOMAIN nameserver Сервер доменных имен (DNS)
BOOTPS bootps Сервер BOOTP или DHCP
BOOTPC bootpc Клиент BOOTP или DHCP
TFTP tftp Простейший протокол передачи файлов (TFTP)
KERBEROS kerberos Служба аутентификации Kerberos
NTP ntp Протокол синхронизации сетевого времени (NTP)
- snmp Простой протокол сетевого управления (SNMP)
- snmp-trap Прерывания протокола SNMP
- biff Сервер UNIX comsat

Более подробную информацию о протоколе UDP можно найти в RFC-768.

Пример вычисления контрольной суммы (UDP checksum) UDP-дейтаграммы

 


Протокол TCP

Данный протокол является сквозным и ориентирован на создание соединений, то есть в данном протоколе создаётся виртуальное соединение. Он работает в широком спектре систем связи — от выделенных каналов до сетей с КП или КК. Протокол TCP размещается над сетевым протоколом IP, который даёт возможность TCP посылать и принимать сегменты информации различной длины, вложенные в межсетевые дейтаграммные «конверты» (пакеты).

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

Протокол TCP, в отличие от протокола UDP, создаёт виртуальные соединения или каналы. Подобно модулю UDP, прикладные процессы взаимодействуют с модулем TCP через порты, которые имеют общеизвестные адреса (номера).

Часто используемые стандартные номера портов протокола TCP
Номер порта Идентификатор в Internet Идентификатор в UNIX Описание
ECHO echo Эхо
FTP-DATA ftp-data Данные протокола передачи файлов (FTP)
FTP ftp Протокол передачи файлов (FTP)
TELNET telnet Подключение к терминалу
SMTP smtp Простой протокол передачи электронной почты (SMTP)
TIME time Текущее время
NICNAME whois Информация о пользователе
DOMAIN nameserver Сервер доменных имен (DNS)
BOOTPS bootps Сервер BOOTP или DHCP
WWW www Сервер World Wide Web
KERBEROS kerberos Служба аутентификации Kerberos
HOSTNAME hostname Сервер NIC имен хостов
X400 x400 Почтовая служба X.400
X400-SND x400-snd Отправитель почты X.400
AUTH auth Служба аутентификации
UUCP-PATH uucp-path Служба путей протокола UUCP
NNTP nntp Протокол передачи сетевых новостей Usenet (NNTP)
NTP ntp Протокол синхронизации сетевого времени (NTP)
SNMP snmp Простой протокол сетевого управления (SNMP)

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

Протокол ТСР требует, чтобы все отправленные сегменты данных были подтверждены с приёмного конца, т.е. используется алгоритм обратной связи. Для повышения эффективности работы используются механизм скользящего окна, тайм-ауты и повторные передачи для обеспечения надёжной доставки. Каждая из принимающих сторон может управлять потоком данных от передающего модуля, чем предотвращается возможность переполнения буферов приёмников. Пользователь при установлении соединения может устанавливать категорию срочности и безопасности. Эти признаки учитываются не только при работе с TCP-сегментами, но и дублируются в поле «Тип сервиса» IP-пакета.

Формат ТСР-сегмента включает заголовок и данные и имеет следующий вид:

Поля «Порт источника» и «Порт получателя» указывают номера портов в TCP-модулях (идентифицируют взаимодействующие приложения). Порт источника идентифицирует порт, с которого отправлен пакет. Порт получателя (порт назначения) идентифицирует порт, на который отправлен пакет.

В поле «Последовательный номер (Позиционный номер)» содержится номер, который указывает в потоке данных от источника до конечного получателя место первого байта данных, содержащихся в этом сегменте.
В начальном сегменте, посылаемом при установлении соединения, присутствует флаг SYN, а в поле «Позиционный номер» содержится начальный позиционный номер ISN (initial sequence number), выбранный данным хостом для этого нового соединения. Первому байту данных, переданному хостом по новому соединению, будет присвоен позиционный номер, равный ISN+1.
Если SYN не установлен, первый байт данных — номер последовательности.

Поле «Номер подтверждения (Квитанция)» при установленном флаге АСК содержит значение последовательного номера, который отправитель данного сегмента собирается принимать, то есть помечает этот сегмент как подтверждение получения. (Этот номер всегда на единицу больше номера последнего успешно принятого байта). После установления виртуального соединения это поле обязательно заполняется. С помощью этого поля отмечается байт, с которого начнется окно приёма данных от источника (механизм скользящего окна).
TCP предоставляет приложениям сервис полнодуплексной передачи. Это означает, что данные могут передаваться в обоих направлениях независимыми потоками. В процессе двусторонней передачи каждая из сторон должна вести учет позиционных номеров передаваемых и принимаемых ею байтов.

Поле «Смещение данных (Размер заголовка)» определяет число 32-разрядных слов в заголовке TCP-сегмента. Минимальный размер составляет 5 слов, а максимальный — 15, то есть 20 и 60 байт соответственно. Смещение считается от начала заголовка TCP.

В поле «Резерв» все разряды устанавливаются равными 0.

Содержимое «Поля управляющих флагов»: URG (urgency) - указатель срочности; АСК (acknowledgement) - подтверждение; PSH (push) - указатель немедленной выдачи на верхний уровень; RST (reset) - немедленный сброс соединения; SYN (synchronization) - синхронизация последовательных номеров; FIN (final) - завершение соединения.

Поле «Окно» содержит число байт, равное длине окна, т.е. период времени в байтах, когда отправитель ожидает информацию от приёмника.

Поле «Проверочная сумма». Проверочная сумма подсчитывается для всего ТСР сегмента, при этом определяется 16-битное дополнение суммы всех 16-битных слов в заголовке и в поле данных. Если сегмент содержит нечетное количество байтов, то он будет дополнен нулями справа до образования 16-битного слова. Этот выравнивающий байт не передается с сегментом по сети, так как может быть "восстановлен" получателем.
Проверочная сумма учитывает также 96-битный псевдозаголовок, который ставится перед заголовком протокола ТСР. Подзаголовок включает следующие поля из заголовка протокола IP: IP-адреса отправителя и получателя, протокол (код 6) и длину сегмента.
С помощью добавления псевдозаголовка протокол ТСР защищает самого себя от ошибочной доставки протоколов IP. Так, если протокол IP доставляет сегмент, не предназначенный данному работающему приложению, то модуль протокола ТСР на принимающей стороне обнаружит некорректность доставки.

Поле «Указатель срочности (Указатель границы срочных данных)» указывает последовательный номер байта, которым заканчиваются срочные данные. Если установлен флаг URG и это поле равно 0, то весь сегмент считается срочным.

Поле «Модификаторы (Опции)» указывает на дополнительные услуги и может иметь переменную длину, кратную байту.

Поле «Заполнитель» имеет переменную длину и дополняет заголовок до целого числа 32-разрядных слов. Поле заполняется нулями.