<|||>
Как работает интернет. Часть 8 | Как устроен протокол TCP, структура - Опции протокола TCP
Глобальные компьютерные сети и интернет
Оглавление
Как работает интернет. Часть 8 | Как устроен протокол TCP, структура
Подтверждение пакетов
Контроль целостности соединения в TCP. SEQ и ACK
Опции протокола TCP
Все страницы

 

В предыдущих статьях мы никак не затронули такое поле TCP-протокола, как Options. Напомню еще раз структуру заголовка TCP:

 

 

Что это за Options и Padding внизу? Сначала про Padding. Это просто байты (в стандарте они политкорректно называются октетами), значение которых равно 00. Зачем они нужны, если просто занимают место?

Все дело в поле Data Offset, про которое мы говорили ранее, и которое, как вы, наверное, помните, содержит смещение данных в «32-битных кусочках». Раз в 32-битных, то размер заголовка TCP должен делиться на 32. И вообще, все, что мы рассматривали до сих пор (поля с самого начала – Source Port до последнего Urgent Pointer) как раз и занимают 5 блоков по 32 бита.

А дальше идут опции. Причем опции могут быть самыми разными, разного размера и формата. И вполне может быть, что они не будут выровнены на границу 32 бит. Тогда в дело и вступает Padding, и дополняет опции до границы 32 бит нулями. Например, если опции у нас заняли 17 байт (136 бит), то нам нужно еще 3 байта (24 бита) Padding, чтобы получилось 160 бит, которые ровно делятся на 32 бита.

Если же опций нет совсем, то Data Offset просто содержит число «5», что означает, что данные начинаются сразу же после поля Urgent Pointer (нужно пропустить 5 32-битных блока от начала заголовка).

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

Примером первого вида опций служит опция вида «00». Она означает «конец опций». Согласитесь, мы же нигде не указываем размер опций, следовательно, нужно указать, где они кончаются. Поэтому, опция 00 – последняя в списке опций.

Примером второго вида опций служит опция вида «02». После нее идет байт «04», что означает размер в 4 байта. Если исключить первые два байта, то получается, что далее должны идти два байта данных. Эти два байта указывают, какой максимальный размер можно передавать в TCP-пакете. Например, если там записано «500», то нельзя передавать пакеты длиннее 500 байт. Эта опция используется при установлении TCP-соединения, если оборудование не поддерживает длинные TCP-пакеты.

Какие же полезные опции можно придумать для TCP-пакетов? Давайте подумаем. Помните, если TCP подтверждает, что он принял пакет №8, то это автоматически означает, что он принял и все пакеты до пакета №8, но еще не принял пакет №9. А что с пакетами ПОСЛЕ №9? А про них ничего неизвестно. Вполне может быть, что пакеты №10 и №11 уже приняты, но так как №9 где-то потерялся, сервер об этом вам так и не сообщит, пока либо он не найдется, либо вы его не переотправите.

Было бы желательно, чтобы сервер сообщал об этом. То есть, не говорил, что «принял все пакеты до №8», а «принял пакеты до №8, а также №10 и №11, жду пакета №9». Так как в заголовке для этого поля нет, то используются специальные опции, называемые SACK, которые имеют тип «04» и «05».

Размер окна. Как вы помните, в заголовке он максимум 65536 байт. Но ведь его можно увеличить в опциях? Можно. Для этого есть опция вида «03» - расширение окна.

Но постойте, ведь если окно сделать очень большим, могут переполнится номера Seq и Ack при быстром обмене. Мы говорили про это в предыдущей статье. А что нам мешает и тут перестраховаться, и добавить в каждый пакет дополнительную опцию, которая будет различать пакеты с одинаковым Seq или Ack? Да, есть и такая опция, она имеет тип «08» - в каждый пакет вставляется временная метка.

Как мы можем видеть, опций в TCP достаточно много, и в основном, они добавляют ту функциональность, которой не было в TCP изначально, но она оказалась востребована со временем. Может быть, именно поэтому есть IPv6, но нет TCPv6 – за счет опций этот протокол можно достаточно легко приспосабливать к меняющимся условиям.



Понравилась полезная статья? Подпишитесь на RSS и получайте больше нужной информации!




Комментарии
Добавить новый RSS
rema  - вопрос   |2013-10-11 04:03:44
А где все-таки 4-я и 7-я части?
Юрий  - А где все-таки 4-я и 7-я части?   |2013-10-11 12:20:00
4 часть находится здесь: http://mycompplus.ru/news/52-n etwork-/1865-port.html

А 7 часть здесь: http://mycompplus.ru/news/52-n etwork-/1878--7-ieee-rfc.html
Оставить комментарий
Имя:
Email:
 
Тема:
 
Пожалуйста, введите проверочный код, который Вы видите на картинке.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
Все права защищены. Copyright 2008-2016 © Мой компьютер плюс