Описание ТСР-заголовка
TCP-отправитель передает каждый сегмеит в одном IP-пакете вместе с ТСР-за- головком. Как показано на рис. 5.8, TCP-заголовок состоит из следующих полей.
Рис. 5.8. Формат ТСР-сегмеита
• Номер порта источника (source port) (16 бит). 16-битный помер порта, ассоциированный с ТСР-отправителем. IP-адрес отправителя содержится в IP-заголовке.
• Номер порта получателя (destination port) (16 бит). 16-битный помер норга, ассоциированный с ТСР-получателем. IP-адрес получателя содержится в IР-за- головке.
• Порядковый номер (sequence number) (32 бита). 32-битпый порядковый номер идентифицирует позицию первого байта сегмепта, содержащегося в пакете. Получатель использует порядковый номер для идентификации местоположения сегмепта в потоке байтов и реорганизации сегментов, поступающих не в том порядке. Перед передачей первого сегмента отправитель выбирает начальный порядковый номер, который представляет пачало упорядоченного байтового потока. Порядковые номера для всех сегментов строятся относительно этого начального порядкового номера.
• Номер подтверждения (acknowledgement number) (32 бита). Для подтверждения получения данных TCP-заголовок содержит 32-битпый помер подтверждения. Это поле указывает на следующий байт, который ожидается получателем, и корректно только в том случае, если флаг ACK установлен в 1. Когда приложение А передает данные приложению В, TCP-заголовок содержит порядковый помер каждого сегмента, и пакеты от В к А подтверждают получение этих сегментов.
• Длина заголовка (header length) (4 бита). 4-битная Длина заголовка указывает на количество 32-бигпых слов в TCP-заголовке. Заголовок обычно имеет длину 20 байтов, что соответствует пяти 32-битным словам. Более длинным заголовок может быть в случае использования отправителем опций TCP, которые содержат дополнительную управляющую информацию.
• Зарезервировано (6 бит). 6-битпое поле зарезервировано для будущего использования.
• Флаги TCP (TCP flags) (8 битов). TCP-заголовок также содержит 8-битное поле с шестыо 1-битными флагами. Эти флаги соответствуют различным управляющим действиям:
– URG. Флаг URG (флаг срочности) инструктирует TCP-получателя обратиться к части сегмента, идентифицируемой 16-бигпым полем указателя срочности в ТСР-заголовке.
– ACK. Флаг ACK (подтверждения) устанавливается при отправке подтверждения. Если флаг ACK установлен, 32-битное поле подтверждения указывает, сколько данных было получено отправителем. В пачале передачи данных ТСР-отиравитель почти всегда устанавливает бит ACK.
– PSH. Флаг PSH (форсированной отправки) указывает, что ТСР-получа- тель должен немедленно передать входящие данные сокету приложения.
– RST. Флаг RST (сброс) устанавливается при разрыве ТСР-соединения.
– SYN. Флаг SYN (синхронизации) устанавливается при установлении TCP-соединения. Если флаг SYN установлен, значение в иоле порядкового номера идентифицирует начальный порядковый помер.
FIN. Флаг FIN (окончания передачи) устанавливается, когда отправитель закончил передачу данных. При чтении принимающим приложением из сокета FIN преобразуется в символ конца файла.
Флаги SYN, ACK, FIN и RST будут подробнее обсуждаться далее в этом разделе. На практике большинство операционных систем не предоставляет для отправляющего приложения возможность установки флага PSH, а для ТСР-полу- чателя — возможность реакции на этот флаг. Флаг URG применяется для уведомления интерактивных приложений, таких как Telnet, о наличии управляющих символов (например, ctrl-C), которые могут повлиять на обработку предыдущих байтов в потоке.
• Окно приема (receiver windows) (16 битов). 16-битпое поле окпа приема содержит число дополнительных байтов, которые получатель может принять, помимо подтвержденных на данный момепт данных. Чтобы избежать переполнения входного буфера, TCP-отправитель не должен передавать данные, объем которых превышает размер окпа приема.
• Контрольная сумма TCP (TCP checksum) (16 битов). 16-битная контрольная сумма помогает TCP-получателю обнаруживать поврежденные пакеты.
В отличие от контрольной суммы IP-заголовка, контрольная сумма TCP распространяется и на заголовок, и на данные. Контрольная сумма дает возможность получателю выявить, был ли ТСР-сегмент поврежден во время передачи но сети. Отправитель вычисляет контрольную сумму массива из заголовка и данных. Получатель пересчитывает контрольную сумму и сравнивает ее со значением в заголовке TCP. Если результаты различаются, получатель отвергает поврежденный накет. Получатель не подтверждает получение поврежденного пакета. Следовательно, отправитель должен повторно передать не поступившие данные.
• Указатель срочных данных (urgent pointer) (16 битов). Если флаг URG установлен, 16-битпый указатель срочпых данных обращает впимапие получателя на определенную часть входных данных (например, символ ctrl-C, который прерывает передачу данных). 16-битпый указатель срочных данных идентифицирует последний байт срочных данных как целочисленное смещение от порядкового номера в ТСР-заголовке.
IP-заголовок содержит некоторую информацию, необходимую для ТСР-соеди- пегшя, включая IP-адреса отправителя и получателя, а также размер пакета. Размер IP-пакета представляет собой сумму длип IР-заголовка, TCP-заголовка и TCP-сегмента. Длина IP-заголовка включается в IP-заголовок, а длина ТСР-заго- ловка включается в ТСР-заголовок.
Рис. 5.9. Четыре сегмента в ТСР-соединспии (третий сегмент утерян)
При поступлении пакета получатель определяет диапазон байтов, занимаемый TCP-сегментом, основываясь на его порядковом номере и длипе. Предположим, что отправитель пачал с исходного порядкового номера 4500 и передает данные 100-байтпыми сегментами, как показано на рис. 5.9. Порядковый помер 4500 соответствует открытию ТСР-соединения. Первый сегмент имеет порядковый номер 4501 и длину 100, и занимает байты с 4501 по 4600. Второй сегмент имеет порядковый помер 4601 и длину 100, и т.д. Допустим, что В получает первый, второй и четвертый сегменты; третий 100-байтный сегмент был утерян или задержап. Поскольку В было иолучено только 200 последовательных байтов потока, подтверждающий пакет от В к А будет иметь помер подтверждения, равный 4701 (4501+200). Номер байта 4701 представляет собой порядковый помер следующего байта, который В ожидает получить. Важно отметить, что поле порядкового номера соответствует передаче сегмента, а поле номера подтверждения соответствует получению данных. Приложения А и В могут передавать данные друг другу одновременно. Для любого пакета значения полей порядкового номера и номера подтверждения не взаимосвязаны, поскольку они не отпосягся к одному и тому же направлению передачи.
Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.
Источник
Флаги TCP
В TCP-соединении флаги используются для указания определенного состояния соединения или для предоставления некоторой дополнительной полезной информации, например, в целях устранения неполадок или для управления определенным соединением. Чаще всего используются флаги «SYN», «ACK» и «FIN» . Каждый флаг соответствует 1-битной информации.
- Синхронизация (SYN) — используется на первом этапе фазы установления соединения или трехстороннего процесса установления связи между двумя хостами. Этот флаг должен быть установлен только для первого пакета отправителя и получателя. Это используется для синхронизации порядкового номера, то есть, чтобы сообщить другому концу, какой порядковый номер они должны исключать.
- Подтверждение (ACK) — используется для подтверждения пакетов, которые успешно приняты хостом. Флаг устанавливается, если поле номера подтверждения содержит действительный номер подтверждения.
На приведенной ниже диаграмме получатель отправляет ACK = 1, а также SYN = 1 на втором этапе установления соединения, чтобы сообщить отправителю, что он получил свой начальный пакет.
Завершить (FIN) — используется для запроса на завершение соединения, то есть, когда от отправителя больше нет данных, он запрашивает завершение соединения. Это последний пакет, отправленный отправителем. Это освобождает зарезервированные ресурсы и изящно прерывает соединение.
Готово (FIN) v / s Сброс (RST) —
- Push (PSH) — Транспортный уровень по умолчанию ожидает некоторого времени, пока прикладной уровень отправит достаточно данных, равных максимальному размеру сегмента, так что количество пакетов, передаваемых по сети, минимизируется, что нежелательно для некоторых приложений, таких как интерактивные приложения (в чате). Точно так же транспортный уровень на стороне приемника буферизует пакеты и передает их на прикладной уровень, если он удовлетворяет определенным критериям.
Эта проблема решается с помощью PSH. Транспортный уровень устанавливает PSH = 1 и немедленно отправляет сегмент на сетевой уровень, как только он получает сигнал от прикладного уровня. Транспортный уровень получателя, увидев PSH = 1, немедленно отправляет данные на прикладной уровень.
Как правило, он сообщает получателю обрабатывать эти пакеты по мере их поступления, а не буферизировать их.
Источник
Что такое TCP и как он работает?
Протокол управления передачей (TCP) является одним из самых важных протоколов пакета Internet Protocols. Это наиболее широко используемый протокол для передачи данных в сети связи, такой как Интернет.
- TCP — надежный протокол. То есть, приемник всегда отправляет отправителю положительное или отрицательное подтверждение о пакете данных, так что отправитель всегда имеет яркое представление о том, достигнут ли пакет данных адресату или ему нужно повторно отправить его.
- TCP гарантирует, что данные достигнут назначенного адресата в том же порядке, в котором он был отправлен.
- TCP ориентирован на соединение. TCP требует установления соединения между двумя удаленными точками перед отправкой фактических данных.
- TCP обеспечивает механизм проверки и восстановления ошибок.
- TCP обеспечивает сквозную связь.
- TCP обеспечивает контроль потока и качество обслуживания.
- TCP работает в режиме «точка-точка» Client / Server.
- TCP обеспечивает полный дуплексный сервер, т. Е. Он может выполнять роли как получателя, так и отправителя.
Длина заголовка TCP составляет минимум 20 байтов и максимум 60 байт.
- Source Port (16 бит). Он определяет порт источника процесса приложения на отправляющем устройстве.
- Destination Port (16 бит) — определяет порт назначения процесса приложения на принимающем устройстве.
- Sequence Number (32 бита) — порядковый номер байтов данных сегмента в сеансе.
- Acknowledgement Number (32 бита). Когда установлен флаг ACK, это число содержит следующий порядковый номер ожидаемого байта данных и работает как подтверждение предыдущих полученных данных.
- Data Offset (4 бита). В этом поле подразумеваются как размер заголовка TCP (32-разрядные слова), так и смещение данных в текущем пакете во всем сегменте TCP.
- Reserved (3 бита) — зарезервировано для будущего использования, и все по умолчанию устанавливаются в ноль.
- Флаги (по 1 бит)
- NS — бит Nonce Sum используется сигнальным процессом Явного сообщения о перегрузке.
- CWR. Когда хост получает пакет с установленным битом ECE, он устанавливает, что Congestion Windows Reduced подтверждает, что полученная от ЕС.
- ECE — имеет два значения:
- Если бит SYN очищен до 0, значит, ECE означает, что пакет IP имеет установленный бит CE (перегрузка).
- Если бит SYN установлен в 1, ECE означает, что устройство поддерживает ECT.
- URG — указывает, что поле Urgent Pointer имеет значительные данные и должно обрабатываться.
- ACK — указывает, что поле «Подтверждение» имеет значение. Если ACK очищен до 0, это означает, что пакет не содержит подтверждения.
- PSH — если установлено, это запрос на принимающую станцию на данные PUSH (как только это произойдет) в принимающее приложение без его буферизации.
- RST — флаг сброса. Он используется для отказа от входящего соединения, отклонения сегмента, перезапуска соединения.
- SYN — этот флаг используется для настройки соединения между хостами.
- FIN — этот флаг используется для освобождения соединения, и после этого больше не обменивается данными. Поскольку пакеты с символами SYN и FIN имеют порядковые номера, они обрабатываются в правильном порядке.
- Windows Size — это поле используется для управления потоком между двумя станциями и указывает объем буфера (в байтах), выделенный получателем для сегмента, т. Е. Сколько данных ожидает приемник.
- Checksum — это поле содержит контрольную сумму заголовков, данных и псевдо-заголовков.
- Urgent Pointer. Он указывает на аварийный байт данных, если флаг URG установлен в 1.
- Options — обозначает дополнительные опции, которые не покрываются обычным заголовком. Поле опций всегда описывается в 32-битных словах. Если это поле содержит данные размером менее 32 бит, для заполнения оставшихся битов используется дополнение, чтобы достичь 32-разрядной границы.
Адресация
Связь TCP между двумя удаленными хостами выполняется с помощью номеров портов (TSAP). Номера портов могут варьироваться от 0 до 65535, которые делятся как:
- Порты системы (0 — 1023)
- Порты пользователей (1024 — 49151)
- Частные / динамические порты (49152 — 65535)
Управление подключениями
Связь TCP работает в модели Server / Client. Клиент инициирует соединение, и сервер либо принимает, либо отклоняет его. Для управления подключением используется трехстороннее связывание.
Установка соединения
Клиент инициирует соединение и отправляет сегмент с порядковым номером. Сервер подтверждает это со своим собственным порядковым номером и ACK сегмента клиента, который является еще одним номером последовательности клиентов. Клиент после получения ACK своего сегмента отправляет подтверждение ответа сервера.
Любой из серверов и клиентов может отправлять сегмент TCP с флагом FIN, установленным в 1. Когда принимающая сторона отвечает на это посредством ACKnowlinging FIN, это направление связи TCP закрывается и соединение освобождается.
Управление полосой пропускания
TCP использует концепцию размера окна, чтобы удовлетворить потребность в управлении пропускной способностью. Размер окна сообщает отправителю на удаленном конце, количество сегментов байтов данных, которое может получить приемник с этого конца. TCP использует медленную фазу запуска с использованием размера окна 1 и увеличивает размер окна по экспоненте после каждого успешного сообщения.
Например, клиент использует размер окна 2 и отправляет 2 байта данных. Когда подтверждение этого сегмента получено, размер окна удваивается до 4, а следующий отправленный сегмент отправляется длиной 4 байта данных. Когда получено подтверждение 4-байтового сегмента данных, клиент устанавливает размер окна 8 и т. Д.
Если упущено подтверждение, то есть данные, потерянные в транзитной сети или полученные NACK, размер окна уменьшается до половины, а медленная начальная фаза начинается снова.
Контроль ошибок и контроль потока
TCP использует номера портов, чтобы узнать, какой процесс приложения ему нужен для передачи сегмента данных. Наряду с этим он использует порядковые номера для синхронизации с удаленным хостом. Все сегменты данных отправляются и принимаются с порядковыми номерами. Отправитель знает, какой последний сегмент данных был принят Получателем, когда он получает ACK. Получатель знает о последнем сегменте, отправленном отправителем, ссылаясь на порядковый номер недавно полученного пакета.
Если порядковый номер недавно полученного сегмента не совпадает с порядковым номером, который ожидал приемник, он отбрасывается и NACK отправляется обратно. Если два сегмента поступают с одинаковым порядковым номером, значение временной метки TCP сравнивается для принятия решения.
Мультиплексирование
Способ объединения двух или более потоков данных в один сеанс называется мультиплексированием. Когда клиент TCP инициализирует соединение с сервером, он всегда ссылается на четко определенный номер порта, который указывает на процесс приложения. Сам клиент использует случайный номер порта из частных пулов номеров портов.
Используя TCP Multiplexing, клиент может взаимодействовать с несколькими различными процессами приложения за один сеанс. Например, клиент запрашивает веб-страницу, которая, в свою очередь, содержит различные типы данных (HTTP, SMTP, FTP и т. Д.), Тайм-аут сеанса TCP увеличивается, и сеанс остается открытым на более длительное время, так что накладные расходы на трехстороннюю рукопожатие могут избегать.
Это позволяет клиентской системе получать несколько соединений по одному виртуальному соединению. Эти виртуальные соединения не подходят для серверов, если тайм-аут слишком длинный.
Контроль перегрузок
Когда большое количество данных подается в систему, которая не способна обрабатывать ее, происходит перегрузка. TCP управляет перегрузкой с помощью механизма Window. TCP устанавливает размер окна, говорящий на другом конце, сколько сегмента данных нужно отправить. TCP может использовать три алгоритма управления перегрузкой:
- Аддитивное увеличение, мультипликативное уменьшение
- Медленный старт
- Время ожидания
Управление таймером
TCP использует различные типы таймеров для управления и управления различными задачами:
Таймер сохранения:
- Этот таймер используется для проверки целостности и действительности соединения.
- Когда время ожидания сохраняется, хост отправляет пробник, чтобы проверить, существует ли соединение еще.
Таймер повторной передачи:
- Этот таймер поддерживает сеанс передачи данных с сохранением состояния.
- Если подтверждение отправленных данных не будет получено в течение времени повторной передачи, сегмент данных будет отправлен снова.
Постоянный таймер:
- Сеанс TCP может быть приостановлен хостом, отправив Размер окна 0.
- Чтобы возобновить сеанс, хосту необходимо отправить размер окна с некоторым большим значением.
- Если этот сегмент никогда не достигнет другого конца, оба конца могут ждать друг друга в течение бесконечного времени.
- Когда таймер Persist истекает, хост повторно отправляет свой размер окна, чтобы узнать другой конец.
Persist Timer помогает избежать взаимоблокировок в общении.
Timed-Wait:
- После освобождения соединения один из хостов ждет времени с пометкой времени, чтобы полностью завершить соединение.
- Это делается для того, чтобы убедиться, что другой конец получил подтверждение своего запроса о завершении соединения.
- Выдержка может быть не более 240 секунд (4 минуты).
Восстановление после аварий
TCP — очень надежный протокол. Он предоставляет порядковый номер для каждого байта, отправленного в сегменте. Он обеспечивает механизм обратной связи, т.е. когда хост получает пакет, он привязан к ACK, чтобы ожидал пакет, имеющий следующий порядковый номер (если он не является последним сегментом).
Когда TCP-сервер прерывает связь в середине и перезапускает его процесс, он отправляет трансляцию TPDU всем своим хостам. Затем хосты могут отправить последний сегмент данных, который никогда не был непризнан и продолжен.
Источник