Читаем Linux API. Исчерпывающее руководство полностью

Длина заголовка — длина заголовка, измеряемая 32-разрядными словами. Поскольку данное поле равно 4 битам, итоговая длина заголовка может достигать 60 байт (15 слов). Благодаря этому полю принимающая сторона соединения способна определить размер поля с параметрами и начальный сдвиг для данных.

Зарезервировано — состоит из 4 неиспользуемых битов и должно быть равно 0.

Управляющие биты — это поле состоит из 8 битов, которые определяют дополнительные свойства сегмента:

Рис. 57.2.Формат TCP-сегмента

• CWR: от англ. congestion window reduced — «сужение окна перегрузки».

• ECE: от англ. explicit congestion notification echo — «отклик явного уведомления о перегрузке». Флаги CWR и ECE являются частью алгоритма ECN (англ. explicit congestion notification — «явное уведомление о перегрузке»), который применяется в TCP/IP. Это относительно новая технология; ее описание можно найти в документе RFC 3168 и книге [Floyd, 1994]. Алгоритм ECN реализован в Linux начиная с версии 2.4; включить его можно, задав ненулевое значение в файле /proc/sys/net/ipv4/tcp_ecn (доступном только в Linux).

• URG: от англ. urgent pointer — «указатель важности». Если его установить, то он будет содержать корректную информацию.

• ACK: от англ. acknowledgement number — «номер подтверждения». Если его установить, то поле с номером подтверждения будет содержать корректную информацию (то есть этот сегмент сможет подтверждать получение данных, посланных ранее удаленным сокетом).

• PSH: от англ. push — «толкать». «Проталкивает» все полученные данные к принимающему процессу. Этот флаг описан в RFC 993 и [Stevens, 1994].

• RST: от англ. reset — «сбрасывать». Сбрасывает соединение. Используется для обработки различных ошибок.

• SYN: от англ. synchronize — «синхронизировать». Синхронизирует порядковые номера. Сегменты с этим флагом передаются во время установки соединения, чтобы оба сокета могли указать начальные порядковые номера, которые будут применяться для передачи данных в обоих направлениях.

• FIN: от англ. finish — «завершать». Используется отправителем для уведомления о завершении передачи данных.

Сегменту можно установить сразу несколько контролирующих битов (или ни одного), благодаря чему он может иметь разные назначения. Например, позже мы увидим, что во время установки TCP-соединения сокеты обмениваются сегментами с битами SYN и ACK.

Размер окна — когда получатель отправляет сегмент с битом ACK, данное поле сигнализирует о том, сколько свободного места есть у получателя для приема новых данных (это имеет отношение к алгоритму скользящего окна, который мы затронули в подразделе 54.6.3).

Контрольная сумма — 16-разрядная контрольная сумма, охватывающая как заголовок, так и данные сегмента.

В протоколе TCP контрольная сумма охватывает не только заголовок и данные, но и 12 дополнительных байтов, которые обычно называют псевдозаголовком. Он состоит из следующих элементов: исходного и конечного IP-адресов (по четыре байта каждый); двух байтов, обозначающих размер TCP-сегмента (это вычисляемое значение, но оно не входит ни в IP-, ни в TCP-заголовок); одного байта со значением 6, которое является уникальным номером протокола TCP в рамках стека TCP/IP; одного сдвигающего байта, содержащего 0 (чтобы длина псевдозаголовка была кратна 16 битам). Применение псевдозаголовка при вычислении контрольной суммы позволяет получателю перепроверять тот факт, что входящий сегмент дошел туда, куда нужно (то есть IP-клиент не принял по ошибке датаграмму, направленную другому сетевому узлу, или TCP-пакет, который должен был перейти на более высокий уровень). Вычисление контрольных сумм в пакетных заголовках протокола UDP выполняется похожим образом и по аналогичным причинам. Больше подробностей о псевдозаголовках можно найти в книге [Stevens, 1994].

Указатель важности — если установлен управляющий бит URG, то это поле указывает на положение так называемых важных данных, которые в рамках потока передаются от отправителя к получателю. Мы еще коснемся настоящей темы в подразделе 57.13.1.

Параметры — поле переменной длины, содержащее параметры, влияющие на работу TCP-соединения.

Данные — поле содержит пользовательские данные, передаваемые в текущем сегменте. Оно может иметь нулевую длину, если не содержит никакой информации (например, если это всего лишь сегмент ACK).

57.6.2. Порядковые номера и подтверждения в протоколе TCP

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

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных