Транспортный уровень TCP/IP
Создана 28.05.2022
Отредактирована 18.07.2022
Отредактирована 18.07.2022
Передача данных
Транспортный уровень — это канал между уровнем приложений и нижними уровнями (сетевой, канальный, физический), которые отвечают за передачу данных по сети. Транспортный уровень отвечает за логические связи между приложениями, работающими на разных узлах. На транспортном уровне действуют два протокола — TCP и UDP. Протоколы транспортного уровня определяют способ передачи сообщений между узлами и отвечают за управление требованиями надежности связи.
Транспортный уровень отвечает за:
- отслеживание сеансов;
- сегментирование данных и повторную сборку сегментов;
- добавление информации заголовка;
- идентификацию приложений;
- мультиплексирование сеансов.
TCP надежен, подтверждает получение данных, повторно отправляет потерянные данные, обеспечивает доставку данных в порядке их отправки. Используйте TCP для электронной почты и Интернета.
UDP характеризует высокая скорость, малый объем дополнительного трафика, не требуется подтверждение, нет повторной отправки потерянных данных, данные обрабатываются в порядке их поступления. Используйте UDP для VoIP и DNS.
UDP характеризует высокая скорость, малый объем дополнительного трафика, не требуется подтверждение, нет повторной отправки потерянных данных, данные обрабатываются в порядке их поступления. Используйте UDP для VoIP и DNS.
Обзор протокола TCP
TCP устанавливает сеансы, обеспечивает надежность, обеспечивает доставку одной и той же доставки и поддерживает управление потоком. Сегмент TCP добавляет 20 байт (то есть 160 бит) накладных расходов при инкапсуляции данных уровня приложения. Поля заголовка TCP включают порты источника и назначения, порядковый номер, номер подтверждения, длину заголовка, управляющие биты и размер окна. Приложения, использующие протокол TCP: HTTP, FTP, SMTP и Telnet.
Формат заголовка TCP
Обзор протокола UDP
UDP восстанавливает данные в том порядке, в котором они были получены, потерянные сегменты повторно не отправляются, не создаются сеансы, UDP не сообщает отправителю о доступности ресурсов. Заголовок UDP имеет только четыре поля: порт источника, порт назначения, длина и контрольная сумма. Приложения, использующие UDP, включают DHCP, DNS, SNMP, TFTP, VoIP и видеоконференции (в реальном времени).
Формат заголовка UDP
Номера портов
Протоколы транспортного уровня TCP и UDP используют номера портов для управления несколькими одновременными соединениями. Поэтому поля заголовков TCP и UDP определяют номер порта приложения источника и назначения. Номера порта источника и порта назначения записываются в сегмент. Затем эти сегменты инкапсулируются в пакете IP. В пакете IP записывается IP-адрес источника и назначения. Сочетание IP-адреса источника и номера порта источника или IP-адреса назначения и номера порта назначения называется сокетом (вот так выклядет сокет 192.168.1.3:23). Сокет используется для определения сервера и служб, запрашиваемых клиентом.
Существует диапазон номеров портов от 0 до 65535. Этот диапазон разделен на группы:
- зарезервированные порты - от 0 до 1023;
- пользовательские порты - от 1024 до 49151;
- динамические и/или частные порты - от 49152 до 65535.
Существует несколько хорошо известных номеров портов, зарезервированных для обычных приложений, таких как FTP, SSH, DNS, HTTP и другие. В некоторых случаях требуется определить, какие TCP-соединения открыты и действуют на сетевом узле. Проверить состояние этих соединений помогает важное программное средство – netstat (откройте командную строку и введите данную команду).
Обмен данными по протоколу TCP
Каждый процесс приложения, работающий на сервере, использует номер порта. Номер порта автоматически назначается или настраивается системным администратором вручную. Процессы TCP-сервера являются следующими: клиенты, отправляющие TCP-запросы, запрашивающие порты назначения, запрашивающие порты источника, реагируя на запросы порта назначения и порта источника.
Трехстороннее рукопожатие устанавливает, что конечное устройство присутствует в сети, проверяет, что конечное устройство имеет активную службу и принимает запросы на номер порта назначения, который инициирующий клиент намеревается использовать, и уведомляет устройство назначения о том, что исходный клиент намерен установить сеанс связи по этому номеру порта.
TCP флаги
Flags: •••• ••0• •••• = URG: Urgent Pointer field significant •••• •••0 •••• = ACK: Acknowledgment field significant •••• •••• 0••• = PSH: Push Function •••• •••• •0•• = RST: Reset the connection •••• •••• ••0• = SYN: Synchronize sequence numbers •••• •••• •••0 = FIN: No more data from sender [TCP Flags: •••• •••• ••••]
Установление TCP-соединения
- Узел А отправляет запрос SYN на узел B
- Узел B отправляет ответ ACK и запрос SYN на узел A
- Узел A отправляет ответ ACK узлу B
Чтобы завершить один сеанс связи, поддерживаемый протоколом TCP, необходимы четыре операции обмена данными, которые завершат оба сеанса. Прекращение может инициировать клиент или сервер.
Прекращение TCP-соединения
- Узел A отправляет запрос FIN узлу B
- Узел B отправляет ответ ACK узлу A
- Узел B отправляет запрос FIN узлу A
- Узел A отправляет ответ ACK узлу B
Надежность и управление потоком передачи данных
Для того чтобы получатель смог расшифровать изначальное сообщение, данные в этих сегментах повторно собираются в исходном порядке. В заголовке каждого пакета указываются порядковые номера. Независимо от того, насколько хорошо разработана сеть, иногда происходит потеря данных. TCP предоставляет способы управления потерями сегмента. Среди них — механизм повторной передачи сегментов с данными, получение которых не было подтверждено. В настоящее время серверные операционные системы обычно используют опциональную функцию TCP, называемую выборочным подтверждением (SACK), согласованную во время трехстороннего рукопожатия. Если оба узла поддерживают SACK, приемник может явно определить, какие сегменты (байты) были получены, включая любые сегменты прерывания. Поэтому отправляющему хосту нужно будет только повторно передать недостающие данные. Управление потоком позволяет поддерживать надежность передачи по протоколу TCP, регулируя скорость потока данных между узлами источника и назначения в течение определенного сеанса. Для этого в заголовке TCP имеется 16-битное поле, которое называется размером окна. Процесс отправки подтверждений узлом назначения по мере обработки полученных байтов и непрерывная регулировка окна отправки источника называются скользящими окнами. Источник передает 1460 байт данных в каждом сегменте. Это типичный MSS (maximum segment size), который может получить устройство назначения. Во избежание таких ситуаций и для предотвращения перегрузок сети в протоколе TCP предусмотрен ряд соответствующих механизмов, таймеров и алгоритмов. Следует отметить, что узел источника сокращает именно количество неподтвержденных байтов, которые он отправляет, а не размер окна, определенный узлом назначения.
Размер окна - это количество байтов, которое устройство назначения способно принять и обработать за один раз во время сеанса TCP.
Обмен данными по протоколу UDP
UDP — это простой протокол, обеспечивающий работу основных функций транспортного уровня. Как и в случае с сегментами TCP, когда на узел назначения отправляются датаграммы UDP, они могут использовать разные пути и прибыть в неправильном порядке. Протокол UDP не отслеживает порядковые номера, как это делает протокол TCP. Протокол UDP не может повторно скомпоновать датаграммы в том порядке, который использовался при их передаче. Таким образом, протокол UDP просто повторно собирает данные в том порядке, в котором они были приняты, и пересылает их приложению. Если последовательность данных важна для работы приложения, оно должно определить правильную последовательность и выбрать оптимальный способ обработки данных. Серверным приложениям на базе UDP назначаются широко известные или зарегистрированные номера портов. Если UDP получает датаграмму, адресованную одному из этих портов, он пересылает данные приложения соответствующему приложению, исходя из его номера порта. Процесс UDP-клиента динамически выбирает номер порта из диапазона номеров портов и использует его в качестве порта источника для сеанса связи. Как правило, порт назначения — это общеизвестный или зарегистрированный номер порта, присвоенный процессу сервера. После того как клиент выбрал порты источника и назначения, эта же пара портов будет указана в заголовке всех датаграмм, которые используются в процессе пересылки. Для того чтобы сервер мог вернуть данные клиенту, номера портов источника и назначения в заголовке датаграммы указываются в обратном порядке.