Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОС_Шабалин.doc
Скачиваний:
876
Добавлен:
21.05.2015
Размер:
1.73 Mб
Скачать

2.5.2 Протокол tcp

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

Заголовок TCP-сегмента содержит значительно больше полей, нежели заголовок UDP (рис. 2.12), что указывает на широту возможности первого протокола [27].

16 бит

Порт источника

16 бит

Порт приемника

32 бита

Последовательный номер

32 бита

Подтвержденный номер

4 бита

Длина заголовка

6 бит

Резерв

6 бит

Кодовые биты

16 бит

Окно

URG

ACK

PSH

RST

SYN

F

IN

16 бит

Контрольная сумма

16 бит

Указатель срочности

максимум 24 бита

Параметры

Заполнитель

Рис. 2.12 – Структура TCP-заголовка

Поле Порт источника (Source Port) занимает 2 байта и идентифицирует процесс-от­правитель.

Поле Порт приемника (Destination Port) занимает 2 байта и идентифицирует про­цесс-получатель.

Поле Последовательный номер (Sequence Number) занимает 4 байта и представля­ет собой число, уникально идентифицирующее TCP-сегмент. Этот порядковый номер дает возможность получателям TCP-пакетов идентифицировать пропущенные части потока информации.

Поле Подтвержденный номер (Acknowledgement Number) занимает 4 байта и со­держит максимальный номер байта в полученном сегменте, увеличенный на единицу. Именно это значение используется в качестве квитанции, то есть удостоверения, что сегмент получен. Если ус­тановлен контрольный бит АСК, то поле содержит следующий номер оче­реди, который отправитель данного сегмента желает получить в обратном на­правлении.

Поле Длина заголовка (Hlen) занимает 4 бита и представляет собой длину заголов­ка TCP-сегмента, измеренную в 32-х-битовых словах. Длина заголовка не фик­сирована и может изменяться в зависимости от значений, устанавливаемых в поле параметров.

Поле Резерв (Reserved) занимает 6 бит.

Поле Кодовые биты (Code Bits) содержит служебную информацию о типе данного сегмента. Положительное значение сигнализируется установкой этих битов в единицу:

1) URG (срочность) – указывает на необходимость проверки значения поля Urgent Pointer (указатель срочности);

2) АСК (подтверждение) – указывает на необходимость проверки значения поля Acknowdgment Number (подтвержденный номер);

3) PSH (проталкивание) – игнорирует буферизацию и передает данные непосредственно прикладному уровню. Эта возможность применяется для приложений, выполняющихся однократно или с ограниченным временным ресурсом;

4) RST (сброс) – завершает соединение. Применяется для полного закрытия соединения, а также для отказа в соединении по любой причине;

5) SYN (синхронизация) – используется для синхронизации счетчиков передан­ных данных при установлении соединения и обозначает, что отправитель извещает противоположную сторону TCP-соединения о значении в своем поле Sequence Number (порядковый номер);

6) FIN (окончание) – обозначает, что хост завершил соединение, то есть достижение передающей стороной последнего байта в по­токе передаваемых данных.

Поле Окно (Window) определяет размер TCP-буфера приема в байтах. Размер окна, приравненный к нулю, означает, что отправитель должен приостановить передачу – TCP-буфер получателя заполнен.

Поле Контрольная сумма (Сhecksum) занимает 2 байта.

Поле Указатель срочности (Urgent pointer) занимает 2 байта. Данное поле значимо только в том случае, если установить флаг URG, и получатель должен просмотреть это поле, чтобы узнать, откуда начинать считывать данные пакета.

Поле Параметры (Options) имеет переменную длину и может вообще отсутствовать. Максимальная величина поля составляет 3 байта; оно используется для ре­шения вспомогательных задач, например для выбора максимального размера сегмента. Поле параметров может располагаться в конце заголовка TCP, а его длина кратна 8 битам.

Поле Заполнитель (padding) может иметь переменную длину. Это фиктивное поле, используемое для доведения размера заголовка до целого числа 32-х-битовых слов.

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

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

При установлении логического соединения модули TCP договариваются между собой о параметрах процедуры обмена данными. В протоколе TCP каждая сто­рона соединения посылает противоположной стороне следующие параметры:

1) максимальный размер сегмента, который она готова принимать;

2) максимальный объем данных (возможно несколько сегментов), которые она разрешает другой стороне передавать в свою сторону, даже если та еще не по­лучила квитанцию на предыдущую порцию данных;

3) начальный порядковый номер байта, с которого она начинает отсчет потока данных в рамках этого соединения.

В результате переговорного процесса модулей TCP с двух сторон соединения определяются параметры соединения. Одни из них остаются постоянными в те­чение всего сеанса связи, а другие адаптивно изменяются. В частности, в зави­симости от загрузки буфера принимающей стороны, а также от надежности работы сети динамически изменяется размер окна отправителя (размер буфера приема). Создание соединения означает выделение операционной системой на каждой стороне соеди­нения определенных системных ресурсов для организации буферов, таймеров, счетчиков. Эти ресурсы будут закреплены за соединением с момента создания и до момента разрыва. Логическое TCP-соединение однозначно идентифицируется парой TCP-сокетов, каждый из которых одновременно может участвовать в нескольких соединениях.

Таким образом, из всего вышеизложенного о двух протоколах транспортно­го уровня стека TCP/IP следует, что на один из них – TCP – возложена сложная и очень важная задача обеспечения надежной передачи данных через ненадежную сеть.

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

Протокол UDP может быть использован и в том случае, когда хорошее качество линий связи обеспе­чивает достаточный уровень надежности и без применения дополнительных приемов (например, установление логического соединения и квитирования пере­даваемых пакетов (подтверждение получения)). Заметим, что, поскольку протокол TCP основан на ло­гических соединениях, он не годится для широ­ковещательной и групповой рассылки, в отличие от протокола UDP.