Перейти к содержимому

Fin wait 2 что это

  • автор:

Fin wait 2 что это

Протокол TCP (Transmission Control Protocol, Протокол контроля передачи) обеспечивает сквозную доставку данных между прикладными процессами, запущенными на узлах, взаимодействующих по сети. Стандартное описание TCP содержится в RFC-793.

TCP — надежный байт-ориентированный (byte-stream) протокол с установлением соединения . TCP находится на транспортном уровне стека TCP/IP, между протоколом IP и собственно приложением. Протокол IP занимается пересылкой дейтаграмм по сети, никак не гарантируя доставку, целостность, порядок прибытия информации и готовность получателя к приему данных; все эти задачи возложены на протокол TCP.

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

Ниже основные функции протокола TCP и их реализация рассмотрены более подробно.

3.1.1. Базовая передача данных

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

Протокол TCP рассматривает данные клиента как непрерывный неинтерпретируемый поток октетов. TCP разделяет этот поток на части для пересылки на другой узел в TCP-сегментах некоторого размера. Для отправки или получения сегмента модуль TCP вызывает модуль IP.

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

3.1.2. Обеспечение достоверности

Модуль TCP обеспечивает защиту от повреждения, потери, дублирования и нарушения очередности получения данных.

Для выполнения этих задач все октеты в потоке данных сквозным образом пронумерованы в возрастающем порядке. Заголовок каждого сегмента содержит число октетов данных в сегменте и порядковый номер первого октета той части потока данных, которая пересылается в данном сегменте. Например, если в сегменте пересылаются октеты с номерами от 2001 до 3000, то номер первого октета в данном сегменте равен 2001, а число октетов равно 1000.

Номер первого байта в потоке определяется на этапе установления соединения и обозначается ISN+1 (подробнее см. п. 3.1.4). Например, ISN+1=1.

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

При удачном приеме октета данных принимающий модуль посылает отправителю подтверждение о приеме — номер удачно принятого октета. Если в течение некоторого времени отправитель не получит подтверждения, считается, что октет не дошел или был поврежден, и он посылается снова. Этот механизм контроля надежности называется PAR (Positive Acknowledgment with Retransmission). В действительности подтверждение посылается не для одного октета, а для некоторого числа последовательных октетов (подробнее см. п. 3.1.5).

Нумерация октетов используется также для упорядочения данных в порядке очередности и обнаружения дубликатов (которые могут быть посланы из-за большой задержки при передаче подтверждения или потери подтверждения).

3.1.3. Разделение каналов

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

Все распространенные сервисы Интернет имеют стандартизованные номера портов. Например, номер порта сервера электронной почты — 25, сервера FTP — 21. Список стандартных номеров портов можно найти в файле /etc/services (Unix).

Совокупность IP-адреса и номера порта называется сокетом . Сокет уникально идентифицирует прикладной процесс в Интернет. Например, сокет сервера электронной почты на хосте 194.84.124.4 обозначается как 194.84.124.4.25; часто номер порта отделяется двоеточием.

3.1.4. Управление соединениями

Соединение — это совокупность информации о состоянии потока данных, включающая сокеты, номера посланных, принятых и подтвержденных октетов, размеры окон.

Каждое соединение уникально идентифицируется в Интернет парой сокетов.

Соединение характеризуется для клиента именем, которое является указателем на структуру TCB (Transmission Control Block), содержащую информацию о соединении.

Открытие соединения клиентом осуществляется вызовом функции OPEN, которой передается сокет, с которым требуется установить соединение. Функция возвращает имя соединения. Различают два типа открытия соединения: активное и пассивное.

При активном открытии TCP-модуль начинает процедуру установления соединения с указанным сокетом, при пассивном — ожидает, что удаленный TCP-модуль начнет процедуру установления соединения с указанного сокета. Указание 0.0.0.0:0 в качестве сокета при пассивном открытии означает, что ожидается соединение с любого сокета. Такой способ применяется в демонах — серверах Интернет, которые ждут установления соединения от клиента. Клиент же применяет процедуру активного открытия; сокет при этом формируется из IP-адреса сервера и стандартного номера порта для данного сервиса.

Закрытие соединения клиентом производится с помощью функции CLOSE, которой передается имя соединения.

Процедура установления соединения происходит следующим образом.

Предположим, узел А желает установить соединение с узлом В. Первый отправляемый из А в В TCP-сегмент не содержит полезных данных, а служит для установления соединения. В его заголовке (в поле Flags, см. п. 3.2) установлен бит SYN, означающий запрос связи, и содержится ISN (Initial Sequence Number — начальный номер последовательности) — число, начиная с которого узел А будет нумеровать отправляемые октеты (например, 0). В ответ на получение такого сегмента узел В откликается посылкой TCP-сегмента, в заголовке которого установлен бит ACK, подтверждающий установление соединения для получения данных от узла А. Так как протокол TCP обеспечивает полнодуплексную передачу данных, то узел В в этом же сегменте устанавливает бит SYN, означающий запрос связи для передачи данных от В к А, и передает свой ISN (например, 0). Полезных данных этот сегмент также не содержит. Третий TCP-сегмент в сеансе посылается из А в В в ответ на сегмент, полученный из В. Так как соединение А -> В можно считать установленным (получено подтверждение от В), то узел А включает в свой сегмент полезные данные, нумерация которых начинается с номера ISN(A)+1. Данные нумеруются по количеству отправленных октетов. В заголовке этого же сегмента узел А устанавливает бит ACK, подтверждающий установление связи B -> A, что позволяет хосту В включить в свой следующий сегмент полезные данные для А.

Рис. 3.1.1. Установка TCP-соединения

Сеанс обмена данными заканчивается процедурой разрыва соединения, которая аналогична процедуре установки, с той разницей, что вместо SYN для разрыва используется служебный бит FIN (“данных для отправки больше не имею”), который устанавливается в заголовке последнего сегмента с данными, отправляемого узлом.

3.1.5. Управление потоком

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

Протокол TCP формирует подтверждения не для каждого конкретного успешно полученного пакета, а для всех данных от начала посылки до некоторого порядкового номера ACK SN (Acknowledge Sequence Number) исключительно. В качестве подтверждения успешного приема, например, первых 2000 байт, высылается ACK SN = 2001: это означает, что все данные в байтовом потоке под номерами от ISN+1=1 до данного ACK SN -1 (2000) успешно получены (см. рис. 3.1.2).

Рис. 3.1.2. Метод скользящего окна

Вместе с посылкой отправителю ACK SN получатель объявляет также “размер окна”, например — 6000. Это значит, что отправитель может посылать данные с порядковыми номерами от текущего ACK SN = 2001 до (ACK SN + размер окна -1) = 8000, не дожидаясь подтверждения со стороны получателя. Допустим, в данный момент отправитель посылает тысячеоктетный сегмент с порядковым номером данных SN=4001. Если не будет получено новое подтверждение (новый ACK SN), отправитель будет посылать данные, пока он остается в пределах объявленного окна, то есть до номера 8001. После этого посылка данных будет прекращена до получения очередного подтверждения и (возможно) нового размера окна. Однако размер окна выбирается таким образом, чтобы подтверждения успевали приходить вовремя и остановки передачи не происходило — для этого и предназначен метод скользящего окна. Размер окна может динамически изменяться получателем.

Для временной остановки посылки данных достаточно объявить нулевое окно. Но даже и в этом случае через определенные промежутки времени будут отправляться сегменты с одним октетом данных. Это делается для того, чтобы отправитель гарантированно узнал о том, что получатель вновь объявил ненулевое окно, поскольку получатель обязан подтвердить получение “пробных” сегментов, а в этих подтверждениях он укажет также и текущий размер своего окна.

Как уже было сказано выше, протокол TCP позволяет вести полнодуплексную передачу. Один и тот же сегмент, высылаемый, например, из В в А, может содержать в заголовке служебную информацию по подтверждению получения данных от А, а в поле данных — полезные данные для А.

Модуль TCP может оптимизировать максимальный размер сегмента исходя из значений MTU на разных участках маршрута (см. также п. 2.4.2, «Path MTU Discovery») и других характеристик соединения.

Модуль TCP может использовать алгоритм «медленного старта», формируя при установлении соединения окно перегрузки, размер которого изначально равен размеру одного сегмента. Это окно показывает, сколько сегментов TCP-модуль, с его собственной точки зрения, может отправить без получения подтверждения. Скользящее же окно, рассмотренное выше, показывает, какой объем неподтвержденных данных модулю разрешено отправить с точки зрения удаленного модуля, получателя его данных. После прихода подтверждения от получателя окно перегрузки увеличивается на 1 сегмент, и отправитель может выслать уже два сегмента, не дожидаясь подтверждения. Такой подход позволяет постепенно увеличивать нагрузку на сеть. Если окно перегрузки становится больше скользящего окна, объявляемого получателем, ограничение на передачу неподтвержденных данных устанавливает уже скользящее окно получателя.

В случае, если никакие данные приложениями не передаются, а соединение открыто, модуль TCP может периодически посылать сегменты-зонды для выяснения того, не отключилась ли другая сторона без уведомления партнера (например, в результате обрыва линии или другим некорректным образом). Такое зондирование проводится примерно каждые два часа неактивности.

3.2. Заголовок TCP-сегмента

TCP-сегмент состоит из заголовка и данных.

Заголовок сегмента состоит из 32-разрядных слов и имеет переменную длину, зависящую от размера поля Options, но всегда кратную 32 битам. За заголовком непосредственно следуют данные — часть потока данных пользователя, передаваемая в данном сегменте.

Значения полей заголовка следующие.

Source Port (16 бит), Destination Port (16 бит) — номера портов процесса-отправителя и процесса-получателя соответственно.

Sequence Number (SN) (32 бита) — порядковый номер первого октета в поле данных сегмента среди всех октетов потока данных для текущего соединения, то есть если в сегменте пересылаются октеты с 2001-го по 3000-й, то SN=2001. Если в заголовке сегмента установлен бит SYN (фаза установления соединения), то в поле SN записывается начальный номер (ISN), например, 0. Номер первого октета данных, посылаемых после завершения фазы установления соединения, равен ISN+1. Acknowledgment Number (ACK) (32 бита) — если установлен бит ACK, то это поле содержит порядковый номер октета, который отправитель данного сегмента желает получить. Это означает, что все предыдущие октеты (с номерами от ISN+1 до ACK-1 включительно) были успешно получены.

Data Offset (4 бита) — длина TCP-заголовка в 32-битных словах.

Reserved (6 бит) — зарезервировано; заполняется нулями.

Control Bits (6 бит) — управляющие биты; активным является положение “бит установлен”.

URG — поле срочного указателя (Urgent Pointer) задействовано;

ACK — поле номера подтверждения (Acknowledgment Number) задействовано;

PSH — осуществить “проталкивание” — если модуль TCP получает сегмент с установленным флагом PSH, то он немедленно передает все данные из буфера приема процессу-получателю для обработки, даже если буфер не был заполнен;

RST — перезагрузка текущего соединения;

SYN — запрос на установление соединения;

FIN — нет больше данных для передачи.

Window (16 бит) — размер окна в октетах (см. выше п. 3.1.5).

Checksum (16 бит) — контрольная сумма, представляет собой 16 бит, дополняющие биты в сумме всех 16-битовых слов сегмента (само поле контрольной суммы перед вычислением обнуляется). Контрольная сумма, кроме заголовка сегмента и поля данных, учитывает 96 бит псевдозаголовка, который для внутреннего употребления ставится перед TCP-заголовком. Этот псевдозаголовок содержит IP-адрес отправителя (4 октета), IP-адрес получателя (4 октета), нулевой октет, 8-битное поле «Протокол», аналогичное полю в IP-заголовке, и 16 бит длины TCP сегмента, измеренной в октетах. Такой подход обеспечивает защиту протокола TCP от ошибшихся в маршруте сегментов. Информация для псевдозаголовка передается через интерфейс «Протокол TCP/межсетевой уровень» в качестве аргументов или результатов запросов от протокола TCP к протоколу IP.

Urgent Pointer (16 бит) — используется для указания длины срочных данных, которые размещаются в начале поля данных сегмента. Указывает смещение октета, следующего за срочными данными, относительно первого октета в сегменте. Например, в сегменте передаются октеты с 2001-го по 3000-й, при этом первые 100 октетов являются срочными данными, тогда Urgent Pointer = 100. Протокол TCP не определяет, как именно должны обрабатываться срочные денные, но предполагает, что прикладной процесс будет предпринимать усилия для их быстрой обработки. Поле Urgent Pointer задействовано, если установлен флаг URG.

Options — поле переменной длины; может отсутствовать или содержать одну опцию или список опций, реализующих дополнительные услуги протокола TCP. Опция состоит из октета «Тип опции», за которым могут следовать октет «Длина опции в октетах» и октеты с данными для опции.

Стандарт протокола TCP определяет три опции (типы 0,1,2).

Опции типов 0 и 1 («Конец списка опций» и «Нет операции» соответственно) состоят из одного октета, содержащего значение типа опции. При обнаружении в списке опции «Конец списка опций» разбор опций прекращается, даже если длина заголовка сегмента (Data Offset) еще не исчерпана. Опция «Нет операции» может использоваться для выравнивания между опциями по границе 32 бит.

Опция типа 2 «Максимальный размер сегмента» состоит из 4 октетов: одного октета типа опции (значение равно 2), одного октета длины (значение равно 4) и двух октетов, содержащих максимальный размер сегмента, который способен получать TCP-модуль, отправивший сегмент с данной опцией. Опцию следует использовать только в SYN-сегментах на этапе установки соединения.

Padding — выравнивание заголовка по границе 32-битного слова, если список опций занимает нецелое число 32-битных слов. Поле Padding заполняется нулями.

3.3. Промежуточные состояния соединения

TCP-соединение во время функционирования проходит через ряд промежуточных состояний. Это состояния LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT, а также фиктивное состояние CLOSED. (Состояние CLOSED является фиктивным, поскольку оно представляет отсутствие соединения.) Переход из одного состояния в другое происходит в ответ на события, как то: запросы клиента, приход сегментов, истечение контрольного времени.

Определены следующие запросы процесса-клиента модулю TCP (с каждым запросом, кроме OPEN, передается имя соединения):

ACTIVE-OPEN — активное открытие соединения;

PASSIVE-OPEN — пассивное открытие соединения (см. выше п. 3.1.4);

SEND — отправка данных (передается указатель на буфер данных, размер буфера, значения флагов URG и PSH);

RECEIVE — получение данных (передается указатель на буфер данных, размер буфера; возвращается счетчик полученных октетов, значения флагов URG и PSH);

STATUS — запрос состояния соединения;

CLOSE — закрытие соединения (производится досылка всех неотправленных данных и обмен сегментами с битом FIN);

ABORT — ликвидация соединения (уничтожаются блок TCB и все неотправленные данные, посылается сегмент с битом RST).

Деятельность программы протокола TCP можно рассматривать как реагирование на события в зависимости от состояния соединения.

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

LISTEN — процесс пассивно ждет запроса со стороны чужих сокетов.

SYN-SENT — процесс отправил свой SYN и ждет чужого SYN.

SYN-RECEIVED — процесс получил чужой SYN, отправил (раньше или только что) свой SYN и ждет ACK на свой SYN.

ESTABLISHED — процесс отправил ACK на чужой SYN, получил ACK на свой SYN; соединение установлено.

FIN-WAIT-1 — процесс первый отправил свой FIN и ждет реакцию той стороны; при этом он, возможно, продолжает получать данные.

FIN-WAIT-2 — процесс получил ACK на свой ранее отправленный FIN, но не получил чужой FIN; ждет чужой FIN; при этом, возможно, продолжает получать данные.

CLOSE-WAIT — процесс, не отправив свой FIN (возможно, не собираясь прекращать соединение), получает чужой FIN; он отправляет ACK на чужой FIN, но при этом, возможно, продолжает отправлять данные.

LAST-ACK — процесс отправил свой FIN, но ранее он уже получил FIN с той стороны и отправил на него ACK; поэтому процесс ожидает чужой ACK на свой FIN для окончательного закрытия соединения.

CLOSING — процесс ранее отправил свой FIN и еще не получил не него подтверждение, но получил чужой FIN (и отправил на него ACK); ждет ACK на свой FIN.

TIME-WAIT — процесс ранее отправил свой FIN и получил на него подтверждение, получил чужой FIN и только что отправил на него ACK; теперь процесс ждет некоторое время (два времени жизни сегмента, обычно 4 минуты) для гарантии того, что та сторона получит его ACK на свой FIN, после чего соединение будет окончательно закрыто.

CLOSED — соединение отсутствует.

В диаграммах пп. 3.3.1 и 3.3.2 состояния соединения заключены в прямоугольники, переходы между ними показаны стрелками, с каждой стрелкой соотносится овал, поясняющий причину перехода. В овале над горизонтальной чертой указывается событие, вызвавшее переход (курсивом обозначено поступление запросов от локального процесса-клиента); под горизонтальной чертой — действие, сопутствующее переходу.

3.3.1. Фаза установления соединения
3.3.2. Фаза закрытия соединения

Проблемы возникновения некорректных ситуаций, например, наполовину открытое соединение, получение заблудившихся в сети старых SYN-сегментов, неожиданный крах программ и т.п., решаются путем детектирования ошибки (несоответствие или бессмысленные значения ACK или SN), после чего посылается сигнал RST (сегмент с установленным битом RST) и соединение ликвидируется.

forum.lissyara.su

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

Первое новое сообщение • 4 сообщения • Страница 1 из 1

weec лейтенант Сообщения: 948 Зарегистрирован: 2007-07-24 11:17:35 Откуда: Afghanistan Контактная информация:

sysctl FIN-WAIT-2

FreeBSD
смотрю следующий параметр

# sysctl net.inet.tcp.finwait2_timeout net.inet.tcp.finwait2_timeout: 60000

в чем измеряются эти 60000 ?

weec

Хостинг HostFood.ru

Услуги хостинговой компании Host-Food.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Alex Keda стреляли. Сообщения: 35444 Зарегистрирован: 2004-10-18 14:25:19 Откуда: Made in USSR Контактная информация:

Re: sysctl FIN-WAIT-2

млисекундах.
а фиг вот знает )
Убей их всех! Бог потом рассортирует.

Alex Keda

dikens3 подполковник Сообщения: 4856 Зарегистрирован: 2006-09-06 16:24:08 Откуда: Нижний Новгород Контактная информация:

Re: sysctl FIN-WAIT-2

sysctl net.inet.tcp.msl=30000 После того как соединение закрывается сокет переходит в состояние TIME_WAIT В этом состоянии он может находится по умолчанию в течение 60 секунд. Время можно изменить через sysctl (в миллисекундах деленных на 2, 2 x 30000 MSL = 60 секунд):

Скорее всего тоже в миллисекундах. А вот делиться/умножается хз.
Лучше установить FreeBSD , чем потратить 30 лет на Linux’ы и выяснить какой из них хуже.

dikens3

paix лейтенант Сообщения: 863 Зарегистрирован: 2007-09-24 12:41:05 Откуда: dn.ua Контактная информация:

Re: sysctl FIN-WAIT-2

тут к гадалке не ходи Конечно и так уже все ясно, но

man tcp:
finwait2_timeout Timeout to use for fast recycling of TCP FIN_WAIT_2
connections. Defaults to 60 seconds

соотвественно это милисикунды.
net.inet.tcp.finwait2_timeout: 60000

Гораздо более интересный момент, как эти таймауты тюнить Особенно когда используются фаервольные стате-лимиты.

With best wishes, Sergej Kandyla

paix

4 сообщения • Страница 1 из 1

  • Операционные системы
  • ↳ FreeBSD/UNIX для начинающих
  • ↳ FreeBSD
  • ↳ OpenBSD
  • ↳ SunOS
  • ↳ Linux
  • ↳ Windows
  • ↳ DOS, OS/2, MeOS, BeOS, PalmOS.
  • Проблемы
  • ↳ MTA — Mail Transfer Agent
  • ↳ Железо
  • ↳ Софт
  • ↳ Networks
  • ↳ Базы данных
  • ↳ Активное сетевое оборудование
  • ↳ Виртуализация
  • ↳ UNIX as Desktop
  • ↳ Игры
  • Программирование
  • ↳ SHELL
  • ↳ PHP, PERL, JS, HTML.
  • ↳ Delphi, Lazarus, Free Pascal
  • ↳ C/C++
  • ↳ Visual Basic
  • Разное
  • ↳ Новости
  • ↳ Про сайт
  • ↳ Работа
  • ↳ Юридические документы
  • ↳ Барахолка
  • ↳ /dev/null
  • На главнуюСписок форумов
  • Часовой пояс: UTC+03:00
  • Удалить cookies конференции
  • Наша команда

Приложение N 7. Требования к параметрам протоколов IP, UDP, TCP

Приложение N 7
к Правилам применения оборудования
коммутации сетей подвижной
радиотелефонной связи. Часть VI.
Правила применения узлов связи с
территориально распределенной архитектурой
стандартов UMTS и/или GSM 900/1800

Требования к параметрам протоколов IP, UDP, TCP

1. Требования к параметрам по реализации протокола IP.

1.1. Формат заголовка пакета IP версии 4 (далее — IPv4) и перечень поддерживаемых полей приведен в таблице N 1:

1) минимальная длина заголовка пакета составляет 20 байт, а максимальная длина — 60 байт при максимальной длине пакета в 65 535 байт;

2) поле «Версия» содержит номер версии протокола IP;

3) поле «Длина заголовка» содержит значение длины заголовка пакета в словах;

4) поле «Тип обслуживания» содержит код набора параметров качества обслуживания:

в) пропускная способность;

Таблица N 1. Формат заголовка пакета IPv4

Длина пакета IP

Идентификатор пакета IP

Счетчик допустимого времени пребывания пакета в сети

Тип протокола следующего уровня

Контрольная последовательность заголовка

Адрес источника пакета

Адрес получателя пакета

Режим обработки пакета

Поле дополнения до границы заголовка

5) кодирование поля «Тип обслуживания» приведено в таблице N 2;

Таблица N 2. Кодирование поля «Тип обслуживания»

Значение «0» — нормальная задержка, значение «1» — малая задержка

Значение «0» — нормальная пропускная способность, значение «1» — низкая пропускная способность

Значение «0» — нормальная надежность, значение «1» — высокая надежность

Значения разрядов 0 — 2 игнорируется # , если оборудование не поддерживает управление приоритетом при передаче пакетов.

6) поле «Длина пакета IP» содержит значение длины пакета IP в байтах, включая заголовок и данные. Возможность обрабатывать пакеты длиной менее 576 байт является обязательным требованием. В отдельных случаях допускается длина пакета до 65 535 байт;

7) поле «Идентификатор пакета IP» используется процедурой фрагментации при сборке или разборке пакета для определения последовательности передаваемых фрагментов;

8) поле «Флаги» используется процедурой фрагментации для управления последовательностью сборки фрагментов пакета. Кодирование разрядов поля «Флаги» приведено в таблице N 3.

Таблица N 3. Кодирование разрядов поля «Флаги»

Зарезервировано, устанавливается в «0»

Пакет можно фрагментировать

Пакет нельзя фрагментировать

9) поле «Смещение фрагмента» используется для указания смещения данного фрагмента относительно первого фрагмента в блоках фрагментации (8 байт). Для первого фрагмента смещение устанавливается в «0»;

10) поле «Счетчик допустимого времени пребывания пакета в сети» содержит текущее значение счетчика максимально допустимого времени пребывания пакета в сети в секундах. Если в поле находится значение «0», пакет удаляется;

11) поле «Тип протокола следующего уровня» содержит стандартизированный код протокола следующего уровня;

12) поле «Контрольная последовательность заголовка» (далее — КПЗ) содержит контрольную последовательность заголовка. При любом изменении содержания заголовка КПЗ пересчитывается;

13) в поле «Адрес источника пакета» указывается IP-адрес источника пакета;

14) в поле «Адрес получателя пакета» указывается IP-адрес получателя пакета;

15) поддерживаются два способа кодирования поля «Режим обработки пакета»:

а) поле длиной 1 байт,

б) комбинация трех подполей: тип режима (1 байт), счетчик длины поля режима (1 байт), данные режима (переменная длина).

Подполе типа режима включает: флаг (1 бит), класс режима (2 бита), номер режима (5 бит).

При установке бита флага в значение «1» оборудование копирует данное поле при фрагментации во все фрагменты, в значение «0» — не копирует;

16) для выравнивания границы заголовка по длине, кратной 32 битам используется «Поле дополнения до границы заголовка». Свободные позиции заполняются нулевыми битами.

1.2. Формат заголовка пакета IP версии 6 (далее — IPv6) и перечень поддерживаемых полей приведен в таблице N 4. Минимальная длина заголовка пакета составляет 40 байт, длина пакета составляет до 1 280 байт или выше (до 1 500 байт) без фрагментации:

Таблица N 4. Формат заголовка пакета IPv6

Длина полезной нагрузки

1) поле «Версия» содержит номер версии протокола IP;

2) поле «Класс трафика» эквивалентно по назначению полю «Тип обслуживания» протокола IPv4 и используется для назначения и различия разных классов или приоритетов передачи пакетов;

3) поле «Метка потока» используется для выделения последовательностей пакетов, для которых запрашивается специальная обработка пакетов IP, например, предоставление качества обслуживания, отличающегося от принятого, или обслуживание в реальном времени. Оборудование, не поддерживающее функции поля «Метка потока», устанавливает значение данного поля в нуль при отправке пакета, передает дальше данное поле без изменений при пересылке пакета и игнорирует данное поле при получении пакета;

4) поле «Длина полезной нагрузки» содержит значение длины полезной нагрузки пакета IPv6 в байтах;

5) поле «Следующий заголовок» определяет тип заголовка, следующего непосредственно за основным, и использует те же значения разрядов, что и поле «Тип протокола следующего уровня» протокола IPv4;

6) в протоколе IPv6 информация уровня Интернет сети передачи данных кодируется в отдельных дополнительных заголовках, которые размещаются между заголовком IPv6 и заголовком следующего уровня в пакете;

7) каждый дополнительный заголовок является целым числом и имеет длину, кратную 8 байтам;

8) в рамках протокола IPv6 определены следующие шесть дополнительных заголовков:

«Специальные параметры обработки пакетов»;

«Дополнительные параметры для пункта назначения»;

«Информация для обеспечения конфиденциальности данных путем шифрования».

9) значение поля «Лимит переходов» основного заголовка IPv6 уменьшается на единицу в каждом пункте, который участвует в пересылке пакета. Пакет удаляется, если значение этого поля уменьшается до нуля;

10) в поле «Адрес отправителя» основного заголовка IPv6 указывается IP-адрес отправителя пакета.

1) номер протокола UDP в стеке протоколов IP — 17;

2) формат заголовка пакета протокола UDP приведен в таблице N 5.

Таблица N 5. Формат заголовка пакета протокола UDP

Далее следуют октеты пользовательских данных;

3) поле Source Port (порт отправителя) является необязательным и (когда используется) показывает номер порта передающего процесса. При наличии данного поля отклики адресуются на тот же порт. Если номер порта не задан, значение поля равно «0»;

4) поле Destination Port имеет значение в контексте адресации отдельного соединения;

5) поле Length указывает размер (в октетах) пользовательской дейтаграммы с учетом заголовка и данных. Минимальное значение поля длины составляет 8 (длина заголовка в октетах);

6) поле Checksum содержит контрольную сумму, вычисляемую как поразрядное дополнение до единицы суммы поразрядных дополнений до единицы всех 16-битовых слов псевдозаголовка из заголовка IP, заголовка UDP и данных, дополненных при необходимости справа нулями для выравнивания по 2-октетной границе. Псевдозаголовок, предшествующий заголовку UDP, содержит адреса отправителя и получателя, а также размер пакета UDP. Если рассчитанное значение контрольной суммы равно нулю, все биты поля заполняются единицами (эквивалент нуля в арифметике с дополнением до 1). Передача нулевого значения контрольной суммы означает, что на передающей стороне контрольная сумма не была рассчитана (используется для отладки или для протоколов вышележащих уровней, которые не используют контрольную сумму).

1) номер протокола TCP в стеке протоколов IP — 6;

2) формат заголовка пакета протокола TCP приведен в таблице N 6.

Таблица N 6. Формат заголовка пакета протокола TCP

Далее следуют октеты пользовательских данных;

3) Source Port — номер порта отправителя;

4) Destination Port — номер порта назначения;

5) Sequence Number — порядковый номер. Порядковый номер первого октета данных в сегменте при отсутствии флага SYN. Если в сегменте присутствует бит SYN, поле номера содержит значение начального порядкового номера (ISN), а первый октет данных имеет номер ISN+1;

6) Acknowledgment Number — номер подтверждения. Если бит ACK установлен, это поле содержит значение следующего порядкового номера, который отправитель сегмента ожидает получить. После организации соединения это значение передается всегда;

7) Data Offset — смещение данных. Число 32-битовых слов в заголовке TCP. Это значение указывает начало данных в сегменте. Заголовок TCP (даже при наличии опций) имеет длину, кратную 32 битам;

8) Reserved — резервное поле. Зарезервировано для использования в будущем и имеет нулевое значение;

9) Control Bits — биты управления:

URG — указывает на значимость поля Urgent Pointer;

ACK — указывает на значимость поля Acknowledgment Number;

PSH — функция Push;

RST — сброс (Reset) соединения;

SYN — синхронизация порядковых номеров;

FIN — у отправителя больше нет данных;

10) Window — окно. Число октетов данных, начиная с указанного в поле подтверждения, которые отправитель данного сегмента ожидает принять;

11) Checksum — контрольная сумма. Контрольная сумма представляет собой число единиц в заголовке и данных, просуммированное по модулю 16 с добавлением 1. Если сегмент содержит в заголовке и данных нечетное число октетов, справа добавляется октет нулей для выравнивания по 16-битовой границе. Биты заполнения не передаются как часть сегмента и используются только для расчета контрольной суммы. При расчете контрольной суммы значение поля Checksum принимается нулевым. Контрольная сумма учитывает также 96-битовый псевдозаголовок, предшествующий заголовку TCP. Этот псевдозаголовок содержит адреса отправителя и получателя, тип протокола и длину опций TCP. Перечисленные поля помогают защитить TCP против сегментов с ошибочной маршрутизацией. Эта информация транспортируется протоколом IP и передается через интерфейс TCP-сетевой уровень в качестве аргументов или результатов вызовов из TCP на уровень IP. Поле «длина опций TCP» содержит размер заголовка TCP и поля данных в октетах (это не явно передаваемое, а расчетное значение); 12-октетный псевдозаголовок при расчете длины не учитывается;

12) Urgent Pointer — указатель срочности. Это поле содержит указатель на срочные данные — позитивное смещение начала таких данных от порядкового номера данного сегмента. Это поле имеет смысл только для сегментов с установленным флагом URG;

13) Options — опции.

Опции размещаются в конце заголовка TCP и могут занимать целое число октетов. Все опции учитываются при расчете контрольной суммы. Опции начинаются на любой границе октета. Существует два варианта форматирования опций:

1) однооктетное поле признака опций;

2) однооктетное поле признака опций, поле размера опций (1 октет) и собственно опции.

Поле размера опций учитывает и 2 октета полей признака опций и самого поля длины, а также размер опций, как таковых. Поле опций может быть короче, чем указывает поле смещения данных. Неиспользуемые биты поля опций заполняются нулями. В протоколе TCP используются следующие опции: End of Option List, No-Operation, Maximum Segment Size.

End of Option List (0). Этот код означает завершение списка опций. Конец списка опций может не совпадать с концом заголовка TCP, заданным полем Data Offset. Код используется как индикатор завершения всех опций, а не какой-то конкретной и использование его требуется лишь в тех случаях, когда конец опций не совпадает с концом заголовка TCP.

No-Operation (1). Этот код может использоваться между опциями (например, для их выравнивания по границе слова). Не существует гарантий использования этой опции отправителем, поэтому получатель должен быть готов к обработке опций, начало которых не совпадает с границей слова.

Maximum Segment Size (2) — максимальный размер сегмента. Эта опция имеет длину 16 битов. Если эта опция присутствует, она задает максимальный размер принимаемого сегмента для той стороны TCP, которая передает данный сегмент. Это поле передается только с начальным запросом организации соединения (сегмент с флагом SYN). Если эта опция не задана, допускается использование сегментов любого размера;

14) Padding — заполнение. Поле имеет переменную длину. Заполнение заголовка TCP используется для выравнивания размера заголовка по 32-битовой границе. Для заполнения неиспользуемых битов служит 0;

15) Состояния соединения — LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT и фиктивное состояние CLOSED.

LISTEN — ожидание запроса на соединение от любого удаленного TCP порта.

SYN-SENT — ожидание соответствующего запроса на соединение после передачи своего запроса.

SYN-RECEIVED — ожидание подтверждения соединения после передачи и приема запросов на организацию соединения.

ESTABLISHED — соединение действует и принятые данные могут быть доставлены пользователю. Это нормальное состояние для процесса обмена данными через соединение.

FIN-WAIT-1 — ожидание запроса на разрыв соединения от удаленного TCP или подтверждения для ранее переданного запроса на разрыв соединения.

FIN-WAIT-2 — ожидание запроса на разрыв соединения от удаленного TCP.

CLOSE-WAIT — ожидание запроса на разрыв соединения от локального пользователя.

CLOSING — ожидание подтверждения от удаленного TCP для запроса на разрыв соединения.

LAST-ACK — ожидание подтверждения для запроса на разрыв соединения, переданного удаленному TCP (это подтверждение включается в запрос на разрыв соединения от удаленной стороны).

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

CLOSED — соединения уже нет (разорвано).

Соединение TCP переходит от одного состояния к другому в ответ на события, к числу которых относятся пользовательские вызовы, входящие сегменты и тайм-ауты;

16) пользовательские команды протокола TCP приведены в таблице N 7.

Таблица N 7. Пользовательские команды протокола TCP

Sysadminium

Протокол TCP является одним из важнейших протоколов связи в компьютерных сетях. В этой статье познакомимся с ним поближе.

Оглавление скрыть

Что такое транспортные протоколы

Транспортные протоколы (TCP и UDP) используются для передачи информации. Информация передаётся маленькими частями — сетевыми пакетами. То есть поток информации разбивается на много маленьких пакетов.

Каждый пакет состоит из заголовка и самих данных. Заголовок содержит служебную информацию, например порт источника и назначения.

Спецификация доступна здесь, но мне кажется мало кто осилит это чтение.

Протокол TCP и его особенности

Протокол TCP находится на 4 уровне модели OSI.

Главной особенностью TCP (Transmission Control Protocol) является то, что этот протокол гарантирует доставку всех отправленных пакетов. При этом проверяется целостность пакетов и их порядок. Если пакет потерялся или испортился, то получатель запросит эти пакеты у отправителя снова. Если пакеты пришли не в том порядке, то они на принимающей стороне всё равно обработаются в правильном. Этот механизм контроля доставки накладывает дополнительную нагрузку в виде увеличения служебной информации, которую нужно передать вместе с полезными данными.

Протокол TCP делит поток информации на сегменты. В одном сегменте может быть несколько пакетов. Каждый сегмент проверяется на целостность, и если все хорошо, отправляется подтверждение передающей стороне. Таким образом подтверждается не каждый пакет, а каждый сегмент, но в сегменте может оказаться и всего лишь один пакет.

Поверх протокола TCP работают многие прикладные протоколы:

  • сайты (http, https);
  • электронная почта (imap, pop, smtp);
  • передача файлов (cifs, nfs, ftp);
  • удаленные подключения (rdp, ssh).

TCP пакеты передаются не просто так, а в рамках установленного соединения — которое называют TCP сессией.

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

Алгоритм работы TCP

Алгоритм работы TCP следующий:

  1. Используя трехкратное рукопожатие, между двумя узлами создаётся сеанс связи.
  2. При отправке пакетов узлы последовательно нумеруют их и рассчитывают контрольную сумму.
  3. Поскольку все пакеты имеют последовательные номера, то становится видно если какие-то из них отсутствуют. В этом случае отправляется запрос на повторную отправку пакета.
  4. Если для какого-то пакета не совпала контрольная сумма, то отправляется запрос на повторную отправку пакета.

При открытии даже одной веб странички создаются несколько TCP соединений для:

  • html страницы;
  • каждого CSS и JavaScript файлов;
  • каждого изображения.

И для каждого такого соединения вначале устанавливается сеанс, что замедляет передачу данных.

Заголовок TCP пакета

Заголовок TCP пакета состоит из следующих полей:

Заголовок TCP

  • Порт отправителя.
  • Порт получателя.
  • Порядковый номер в сегменте (sequence number). В целях безопасности номер первого пакета в сегменте генерируется случайным образом и может быть равно от 0 до 4294967295. Следующие пакеты, в отправляемом сегменте, просто увеличиваю свой порядковый номер;
  • Номер подтверждения (acknowledgment number). Когда мы подтверждаем определённый пакет, в нем записывается sequence number подтверждаемого пакета.
  • Длина заголовка (data offset). В этом поле указывается длина заголовка TCP пакета и где начинаются фактические данные.
  • Зарезервированное поле. Эти биты зарезервированы для будущего использования.
  • Флаги. Необходимы для дополнительной функциональности. Например, позволяют установить или разорвать соединение, включить или выключить защиту от перегрузки сети и тому подобное.
  • Размер окна (Window Size). Указывается количество байт, считая от последнего номера подтверждения, которые готов принять отправитель данного пакета. То есть, какой у него в данный момент времени размер буфера.
  • Контрольная сумма (Checksum). Используется для проверки на наличие ошибок при приеме или передачи пакетов. Рассчитывается с учетом заголовка (кроме контрольной суммы) и самих данных.
  • Указатель срочности (Urgent pointer). Используется, если стоит флаг URG. По этому значению определяются срочные данные и они сразу же передаются приложению. Остальные данные попадают в буфер.
  • Дополнительные опции. Необязательно, но используются почти всегда.
  • Заполнение (Padding). Дополняет заголовок, пока он не закончится на 32-разрядной границе. Всегда состоит только из нулей.

Флаги в заголовке TCP

  • NS (Nonce Sum). Защита от случайного или злонамеренного изменения флагов. Используется для улучшения работы механизма явного уведомления о перегрузке ECN (Explicit Congestion Notification).
  • CWR (Congestion Window Reduced). Подтверждение получения пакета с флагом ECE и включением механизма уменьшения перегрузки (Congestion Control). Этот механизм позволяет оптимизировать отправку пакетов в перегруженных сетях.
  • ECE (ECN-Echo). Выполняет две функции. Если соединение только устанавливается, то означает что отправитель поддерживает ECN. В другом случае, это означает перегрузку сети (или предстоящую перегрузку) для отправителя.
  • URG (Urgent). Указатель важности. 0 если не используется, 1 — используется.
  • ACK. Устанавливается, когда принимающая сторона подтверждает полученный пакет. Чтобы отправитель знал, какие пакеты уже были доставлены получателю. При этом в поле acknowledgment number записывается номер подтверждаемого пакета.
  • PSH (Push). Обычно получатель не подтверждает каждый пакет при получении. Вместо этого пакеты накапливаются в буфере, пока не передадутся приложению. Данный флаг сообщает получателю, что нужно немедленно передать всё из буфера приложению и сразу же отправить подтверждение.
  • RST. Сообщает о немедленном разрыве соединения. При этом соединение обрывается, а буфер очищается. Самые распространенные причины отправки пакета с таким флагом:
    • ответ на пакет, полученный для закрытого сокета;
    • пользователь сам прервал соединение (например, закрыв браузер, не дожидаясь ответа);
    • соединение не было нормально закрыто, но находится в неактивном состоянии некоторое время.

    Создание TCP сессии

    Для установления соединения использует трехкратное рукопожатие.

    Трёхкратное рукопожатие TCP

    Первый этап. Клиент отправляет на сервер пакет с флагом SYN. При этом клиент устанавливает порядковый номер сегмента на случайное значение A.

    Второй этап. В ответ сервер отвечает пакетом с флагами SYN и ACK. Номер подтверждения установлен на единицу больше принятого (A+1). Поскольку сервер также будет отправлять данные, то для себя он тоже выбирает номер первого пакета, который будет другим случайным числом B.

    Третий этап. Клиент отправляет ACK на сервер. Порядковый номер устанавливается равным A+1, а номер подтверждения устанавливается на B+1.

    На этом этапе клиент и сервер получили подтверждение соединения и образовали двухстороннюю связь.

    Передача данных в TCP

    Теперь разберём пример передачи данных в уже установленном сеансе.

    Обмен данными TCP

    Клиент отравляет запрос к серверу. Поскольку данные поместились в один пакет TCP, то этот запрос (пакет) получил флаг PSH, чтобы сервер не ждал продолжение получения данных. При этом пакет получил 2 флага: ACK (подтвердил предыдущею передачу пакетов от сервера) и PSH.

    В ответ на это сервер отправляет пакет ACK с номером успешно полученных данных.

    Далее сервер обработал запрос и отправляет данные клиенту. Эти данные делятся на пакеты и отправляются сегментами.

    Далее клиент подтверждает, что данные получены отправляя пакеты с флагом ACK.

    Завершение сеанса TCP

    Завершение сеанса использует четырёхкратное рукопожатие, причём каждая сторона завершает своё соединение независимо.

    Завершение сеанса TCP

    Когда одна из сторон хочет остановить свою половину соединения, она передаёт пакет FIN, который другая сторона подтверждает пакетом с ACK.

    После того, как сторона, отправившая первый FIN, ответила с последним ACK, она ожидает некоторое время прежде чем окончательно закрыть соединение. В течение этого времени локальный порт недоступен для новых соединений.

    Соединение может быть «полуоткрытым», и в этом случае одна сторона завершила свою часть, а другая — нет. Завершившая сторона больше не может отправлять какие-либо данные, но другая сторона может. Завершающая сторона должна продолжить чтение данных, пока другая сторона также не завершит свою работу.

    Также возможно разорвать соединение трёхкратным рукопожатием, когда первая сторона отправляет FIN, а вторая отвечает FIN и ACK (просто объединяет 2 шага в один). Дальше первая сторона подтверждает завершение сеанса с помощью ACK.

    Состояния сеанса TCP

    Сеанс TCP может находится в следующих состояниях:

    • CLOSED — начальное состояние;
    • LISTEN — сервер ожидает запросы от клиента;
    • SYN-SENT — клиент хочет установить соединение с сервером и ожидает подтверждение;
    • SYN-RECEIVED — сервер получил запрос на создание сеанса, отправил ответный запрос и ожидает подтверждение;
    • ESTABLISHED — соединение установлено, идёт передача данных;
    • FIN-WAIT-1 — одна из сторон завершает соединение, отправив флаг FIN;
    • CLOSE-WAIT — другая сторона переходит в это состояние, отправив подтверждение на FIN, но продолжает передачу;
    • FIN-WAIT-2 — первый узел получил ACK, разорвал свое соединение, но еще читает данные;
    • LAST-ACK — второй узел заканчивает передачу и отправляет флаг FIN;
    • TIME-WAIT — сервер получил пакет с флагом FIN, отправил флаг ACK и ждёт некоторое время, перед окончательным закрытием соединения;
    • CLOSING — обе стороны инициировали закрытие соединения одновременно.

    Итог

    Вот мы и познакомились с одним из самых важных протоколов сети Интернет. Протокол TCP действительно очень важен в компьютерных сетях. Разобрались с его особенностями, алгоритмом работы. Узнали про сеансы TCP, пакеты и сегменты.

    Я также описывал ещё один важный протокол компьютерной сети, а именно протокол UDP. Статья доступна здесь.

    Транспортный протокол TCP

    Имя статьи
    Транспортный протокол TCP

    Протокол TCP является одним из важнейших протоколов связи в компьютерных сетях. В этой статье познакомимся с ним поближе.

    3 Replies to “Транспортный протокол TCP”

    Благодарю за отличное — краткое, но понятное описание протокола TCP. Для большей ясности, возможно, следует немного перефразировать пару предложений: >> Порядковый номер в сегменте (sequence number). В целях безопасности это значение генерируется случайным образом и может быть равно от 0 до 4294967295; Тут, наверное, стоит уточнить, что речь идёт о случайной генерации только номера ПЕРВОГО пакета в сегменте, потому что иначе трудно понимается: как порядковый номер может генериться случайно ? Он либо порядковый, либо случайный. >> Клиент отравляет запрос к серверу. Поскольку данные поместились в один пакет TCP, он получил флаг PSH, чтобы сервер не ждал продолжение получения данных. «Он», в данном случае кто? Клиент или запрос? Ну прочитав несколько раз абзац, можно, конечно, понять, что это уже речь про запрос (пакет), а не про клиента, но для ясности понимания, возможно стоит разрешить эту коллизию �� Ещё раз благодарю! Удачи,
    Роман.

    Спасибо за комментарий! Да, действительно, можно применить ваши правки, чуть позже это сделаю:)
    Алексей :

    Много статей читал про протокол TCP, но настолько лаконичный и доступный для понимания текст встречаю впервые. Спасибо автор.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *