Протоколы транспортного уровня 1. Протокол UDP (User Datagram Protocol) Протоколы транспортного уровня получают данные от прикладных программ, при необходимости делят их на блоки и передают сетевому протоколу (IP-протоколу), а при приёме -- получают данные от IP-протокола и передают их прикладной программе. Протокол UDP предназначен для ненадёжной передачи данных без подтверждения доставки (не ориентированный на соединение недостоверный протокол). Структура пакета UDP +---------------+--------------+ |16 Порт отправ.|16 Порт получ.| +---------------+--------------+ |16 Длина дейт. |16 КС | +---------------+--------------+ | Данные | +------------------------------+ Области использования UDP: UDP подходит для процесса, который требует простой связи "запрос -- ответ" без управления потоком и контроля ошибок. Он не подходит для передачи файлов. UDP подходит для многоадресного и широковещательного распространения. UDP используется для протоколов административного управления (SNMP). 2. TCP-протокол (Transport Control Protocol) TCP -- это надёжный, ориентированный на соединение протокол. TCP позволяет создать поток байтов и получать информацию о прохождении этого потока. [Отпр.] [Получ.] v ^ [ TCP ]байты инф.[ TCP ] | ^------------+ ^ +----------------+ байты данных Для функционирования потока байтов необходимо: 1) установить соединение отправителя с получателем; 2) отправитель должен передавать в единицу времени столько байтов, сколько способен принять получатель. Для согласования скорости передачи и приёма у отправителя и получателя формируются специальные буферы памяти. В буфере памяти отправителя существует три типа ячеек: свободные ячейки, занятые ячейки (в которые уже занесены байты, подготовленные к отправке) и ячейки с отправленными байтами. В буфере памяти получателя два типа ячеек: свободные и занятые. Передающий процесс заносит байты в свободные ячейки. Принимающий процесс передаёт, сколько у него есть свободного места. Получатель принимает данные, передаёт их прикладной программе и сообщает отправителю номер последнего принятого байта. Отправитель переводит ячейки до заданного числа в свободные. Пакеты, сформированные на TCP-уровне, называются сегментами. Структура сегмента: +-------------------+-------------------+ |16 Порт отправ. |16 Порт получ. | +-------------------+-------------------+ |32 Номер последовательности | +---------------------------------------+ |32 Номер подтверждения | +-------+--------+-------+--------------+ |4 Смещ.|6 Резерв|6 Флаги|16 Размер окна| +-------+--------++------+--------------+ |16 КС |16 Указатель важности| +-----------------+---------------------+ | Опции | +---------------------------------------+ | Данные | +---------------------------------------+ Порт -- номер, закреплённый за определённым приложением (FTP -- 20/21, HTTP -- 80,8008, SMTP -- 25, POP3 -- 110, HTTPS -- 443). Номер последовательности -- номер, передаваемый последовательности, делимой на сегменты. Номер подтверждения -- номер ожидаемого байта получателем. Смещение данных -- смещение данных относительно начала сегмента (в 32-битных словах). Флаги: URG (задействовано поле "указатель важности"), ACK (Acknowledgement -- номер подтверждения задействован), PSH (говорит получателю протолкнуть данные в вышестоящий протокол), RST (Reset -- разорвать соединение, очистить буфер), SYN (синхронизация номеров последовательности), FIN (окончание сессии). Размер окна -- количество байтов, которые получатель готов принят. Указатель важности -- порядковый номер байта, которым заканчиваются важные данные (анализируется только при включённом флаге URG). 3. MSS -- максимальный размер сегмента MSS -- это размер наибольшей порции данных, которую TCP может отправить получателю. После установления соединения отправитель и получатель согласовывают размер MSS. Если одна из сторон не принимает предложение другой стороны, то устанавливается MSS по умолчанию, равный 536 байт. Для сети Ethernet максимальный MSS -- 1460 байт. 4.Механизм работы протокола В работе протокола TCP можно выделить три стадии: 1) установка соединения; 2) передача данных; 3) завершение соединения. Установка соединения: 1) отправитель отправляет получателю сегмент с номером последовательности и с флагом SYN; 2) получатель принимает сегмент, запоминает номер последовательности и пытается создать сокет для приёма данных; 3) в случае успеха получатель отправляет отправителю такой же сегмент, но уже с двумя флагами: SYN и ACK; в случае неудачи отправляет обратно пакет с флагом RST; 4) отправитель, получив сегмент с флагом SYN, тоже запоминает номер последовательности и посылает получателю сегмент с флагом ACK; если отправитель не получает ответа от получателя в течение 10 секунд, то он прекращает работу с ним; если получатель в состоянии SYN получает второй пакет с флагом ACK, он переходит в состояние готовности к приёму; если за некоторое время он не получил пакет с флагом ACK -- он ликвидирует сокет. Завершение соединения: 1) отправитель посылает пакет с флагами FIN+ACK; 2) получатель присылает отправителю сегмент с этими флагами.