размер приемного окна. Единственным определенным на сегодняшний момент параметром TCP является максимальный размер сегмента (когда он не указан, используется значение по умолчанию в 536 байт), который предполагает получать TCP. Это значение занимает 32 бита и обычно присутствует в запросе на соединение в поле вариантов (Option). Длина заголовка TCP, содержащего значение MSS, составляет 24 байта.

10.8.3 Использование полей заголовка в ответе на запрос соединения

В разрешающем ответе на запрос соединения оба флага (SYN и ACK) равны 1. Отвечающая система указывает начальный порядковый номер в соответствующем поле, а размер приемного окна — в поле Window. Максимальный размер сегмента, который желает использовать получатель, обычно находится в ответе на запрос о соединении (в поле вариантов). Это значение может отличаться от значения запрашивающей соединение стороны, т.е. могут применяться две разные величины.

Запрос на соединение может быть отклонен посредством указания в ответе флага сброса (RST) со значением 1.

10.8.4 Выбор начального порядкового номера

Спецификация TCP предполагает, что во время установки соединения каждая из сторон выбирает начальный порядковый номер (по текущему значению 32-разрядного внутреннего таймера). Как это выполняется?

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

Поэтому другая сторона в самом конце соединения может не знать о том, что ее партнер прошел через крах и его работа затем была восстановлена. Все это приведет к серьезным сбоям в работе, особенно когда проходит долгое время, пока старые данные не пройдут по сети и не смешаются с данными от вновь созданного соединения. Выбор по таймеру старта с обновлением (fresh start) позволяет исключить подобные проблемы. Старые данные будут иметь иную нумерацию, чем диапазон порядковых номеров нового соединения. Хакеры при фальсификации IP-адреса источника для доверительного хоста пытаются получить доступ к компьютерам с помощью указания в сообщении предсказуемого начального порядкового номера. Криптографическая функция хеширования на основе внутренних ключей служит лучшим способом для выбора защищенных начальных номеров.

10.8.5 Общепринятое использование полей

При подготовке заголовка TCP к пересылке порядковый номер первого октета передаваемых данных указывается в поле последовательного номера (Sequence Number).

Номер следующего октета, ожидаемого от партнера по соединению, заносится в поле подтверждения (Acknowledgment Number) при установке бита ACK в 1. Поле окна (Window) предназначено для текущего размера приемного окна. В этом поле содержится количество байтов от номера подтверждения, которое можно принять. Отметим, что это значение позволяет точно управлять потоком данных. С помощью этого значения партнер указывает реальное состояние приемного окна в течение сеанса обмена.

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

Флаг URGENT (срочность) при значении 1 предполагает срочную пересылку данных, а соответствующий указатель должен ссылаться на последний октет срочных данных. Типичным использованием срочных данных является пересылка из терминала сигналов на отмену или прерывание.

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

Флаг RESET (сброс) имеет значение 1, когда следует аварийно завершить соединение. Этот же флаг устанавливается в ответе при поступлении сегмента, не связанного ни с одним из текущих соединений TCP.

Флаг FIN устанавливается в 1 для сообщений о закрытии соединения.

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

Контрольная сумма IP предназначена только для заголовка IP, а контрольная сумма TCP вычисляется для всего сегмента, а также для псевдозаголовка, созданного из заголовка IP. Во время вычисления контрольной суммы TCP соответствующее поле имеет значение 0. На рис. 10.15 показан псевдозаголовок, очень напоминающий тот, что используется в контрольной сумме UDP.

Рис. 10.15. Поле псевдозаголовка включается в контрольную сумму TCP

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

10.9 Пример сегмента TCP

Рис. 10.16, протокол работы анализатора Sniffer компании Network General, представляет собой последовательность сегментов TCP. Первые три сегмента устанавливают соединение между клиентом и сервером Telnet. В последнем сегменте переносится 12 байт данных.

Рис. 10.16. Отображение заголовка TCP анализатором Sniffer

Анализатор Sniffer транслирует большинство значений в десятичный вид.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату