какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.

Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента;

В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED;

2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.

Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED;

Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться;

Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.

3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.

В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.

Процесс называется «трёхэтапным рукопожатием» (англ. three way handshake), так как несмотря на то что возможен процесс установления соединения с использованием четырёх сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется три сегмента.

Источник

Разъяснение трех способов рукопожатия с помощью TCP/IP

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

Применяется к: Windows Server 2012 R2
Исходный номер КБ: 172983

Сводка

Эта статья предназначена для аудиторий, знакомых с протоколом управления передачей и протоколом Интернета (TCP/IP). В нем обсуждается процесс трехшагового рукопожатия TCP между клиентом и сервером при запуске или завершении подключения к TCP.

Дополнительная информация

Уровень TCP транспортного протокола TCP/IP ориентирован на подключение. Подключение означает, что перед передачей любых данных необходимо получить надежное подключение и получить подтверждение. Передачи данных уровня TCP, создание подключения и прекращение подключения поддерживают определенные параметры управления, которые управляют всем процессом. Биты управления перечислены следующим образом:

URG. Важное поле срочных указателей
ACK: важное поле подтверждения
PSH: Push Function
RST: сброс подключения
SYN: Синхронизация номеров последовательности
FIN. Больше данных от отправитель не будет

Существует два сценария, в которых будет происходить трехшаговое рукопожатие:

Создание подключения (активное открытие)

Завершение подключения (активное завершение)

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

Создание подключения

В следующей последовательности показан процесс создания соединения TCP:

Прекращение подключения

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

В этом кадре вы не видите ничего особенного, за исключением сервера, признаваемого FIN, который был передан от клиента.

Клиент отвечает в том же формате, что и сервер, путем acKing fin сервера и приумножения номера последовательности на 1.

Клиент acKing уведомление FIN с сервера определяет изящное закрыть подключение TCP.

Ссылки

RFCs можно получить через Интернет следующим образом:

Источник

Какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Процесс начала сеанса TCP (также называемый «рукопожатие», состоит из трёх шагов.

1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.

2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.

3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.

Процесс называется «трёхэтапным согласованием», так как несмотря на то что возможен процесс установления соединения с использованием четырёх сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется три сегмента.

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

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

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

Домены коллизий

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Режимы работы VTP на коммутаторах

VTP — VLAN Trunking Protocol, позволяет облегчить администрирование коммутаторов, а именно управление VLAN-ами на коммутаторах Cisco. С VTP можно создавать, изменять или удалять VLAN-ы на VTP сервере и все эти изменения автоматически перенесутся на все коммутаторы в одном домене VTP. Что избавляет администратора от конфигурирования VLAN на каждом коммутаторе.
Существует три режима работы VTP (VTP mode):

1. VTP Server — серверный режим.В этом режиме можно создавать, удалять и изменять VLAN-ы, а так же задавать различные параметры, такие как версию протокола (vtp version), vtp фильтрацию (vtp pruning) для всего VTP домена. VTP сервер извещает о своей конфигурации VLAN-ов другие коммутаторы, находящиеся в том же VTP домене, и синхронизирует их конфигурацию VLAN. Так же VTP сервер может синхронизировать свою конфигурацию с конфигурацией VTP клиента, если у клиента выше номер ревизии конфигурации. Обмен VTP информацией проиcходит через ТРАНКВЫЕ порты.

2. VTP Client — режим клиента. На коммутаторе с режимом VTP Client нельзя создавать, удалять или изменять VLAN-ы. Всю настройку VLAN-ов коммутатор берёт от VTP сервера.

3. VTP Transparent — прозрачный режим. В этом режиме коммутатор не применяет себе конфигурацию VLAN от VTP сервера и не извещает о своей конфигурации другие коммутаторы, но позволяет пропускать через свои транковые порты VTP извещения от других коммутаторов.

Квитирование

Источник

Протокол TCP: что нужно знать специалисту по анализу сетевого трафика!

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

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

В каких случаях нам нужен анализ TCP пакетов?

Как показывает практика, современные системы анализа сетевого трафика имеют большую базу протоколов и готовых шаблонов для программного обеспечения. Это позволяет без труда разбивать транзакции на логические части. К сожалению, далеко не для всех задач бизнеса удаётся найти готовые продукты и в каждой компании обязательно найдётся парочка «самописных» или кастомизированных приложений. Как же анализировать трафик от таких приложений?

База анализатора трафика не имеет информации, в каком бите содержится код реквеста, какой код соответствует респонсу и т.д. В таких ситуациях приходится прибегать к самым азам сетевой науки – TCP анализу. Давайте рассмотрим, что прячет внутри себя этот протокол.

По своей сути TCP является протоколом транспортного уровня. Он позволяет осуществить соединение одного сокета (IP-адрес + порт) хоста источника с сокетом хоста назначения. Заголовок IP будет содержать информацию, связанную с IP-адресами, а заголовок TCP — информацию о порте.

Заголовок TCP

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

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Рисунок 1. Заголовок TCP

В заголовке TCP содержаться следующие поля:

Механизм передачи сообщений TCP

Перед тем, как данные могут быть переданы между двумя узлами, в TCP, в отличие от UDP, предусмотрена стадия установки соединения. Также, после того, как все данные были переданы, наступает стадия завершения соединения. Таким образом, осуществление каждого TCP-соединения можно условно разделить на три фазы:

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

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Рисунок 2. Трехстороннее рукопожатие TCP

(Пакет №1). Клиент отправляет пакет с установленным флагом SYN и случайным числом («R1»), включенным в поле порядкового номера (sequence number).

(Пакет №2). При получении пакета №1 сервер в ответ отправляет пакет с установленным флагом SYN, а также с установленным флагом ACK. Поле порядкового номера будет содержать новое случайное число («R2»), а поле номера подтверждения будет содержать значение порядкового номера клиента, увеличенного на единицу (то есть «R1 + 1»). Таким образом, он будет соответствовать следующему порядковому номеру, который сервер ожидает получить от клиента.

(Пакет №3). В ответ на пакет SYN от сервера (пакет №2) клиент отправляет пакет с установленным флагом ACK и полем номера подтверждения с числом «R2 + 1». По аналогии, это число будет соответствовать следующему порядковому номеру, который клиент ожидает получить от сервера.

После инициализации соединения полезная нагрузка будет перемещаться в обоих направлениях TCP-соединения. Все пакеты в обязательном порядке будут содержать установленный флаг ACK. Другие флаги, такие как, например, PSH или URG, могут быть, а могут и не быть установленными.

При нормальном завершении TCP-соединения в большинстве случаев инициализируется процедура, называемая двухсторонним рукопожатием, в ходе которой каждая сторона закрывает свой конец виртуального канала и освобождает все задействованные ресурсы. Обычно эта фаза начинается с того, что один из задействованных процессов приложения сигнализирует своему уровню TCP, что сеанс связи больше не нужен. Со стороны этого устройства отправляется сообщение с установленным флагом FIN (отметим, что этот пакет не обязательно должен быть пустым, он также может содержать полезную нагрузку), чтобы сообщить другому устройству о своем желании завершить открытое соединение. Затем получение этого сообщения подтверждается (сообщение от отвечающего устройства с установленным флагом ACK, говорящем о получении сообщения FIN). Когда отвечающее устройство готово, оно также отправляет сообщение с установленным флагом FIN, и, после получения в ответ подтверждающего получение сообщения с установленным флагом ACK или ожидания определенного периода времени, предусмотренного для получения ACK, сеанс полностью закрывается. Состояния, через которые проходят два соединенных устройства во время обычного завершения соединения, отличаются, потому что устройство, инициирующее завершение сеанса, ведет себя несколько иначе, чем устройство, которое получает запрос на завершение. В частности, TCP на устройстве, получающем начальный запрос на завершение, должен сразу информировать об этом процесс своего приложения и дождаться от него сигнала о том, что приложение готово к этой процедуре. Инициирующему устройству не нужно это делать, поскольку именно приложение и выступило инициатором. Более подробно завершении TCP-соединения смотрите здесь (http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm).

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Рисунок 3. Завершение TCP-соединения

На уровне TCP нет сообщений типа «keep-alive», и поэтому, даже если сеанс соединения в какой-то момент времени становится неактивным, он все равно будет продолжаться до тех пор, пока не будет отправлен следующий пакет.

Когда мы отправляем HTTP-запрос по сети, нам сразу нужно создать TCP-соединение. Однако в HTTP 1.0 возможность повторного использования соединения по умолчанию закрыта (если заголовок «keep-alive = close» дополнительно не включен в заголовок HTTP), то есть TCP-соединение автоматически закрывается после получения запроса и отправки ответа. Так как процесс создания TCP-соединения относительно затратный (он требует дополнительных затрат процессорных ресурсов и памяти, а также увеличивает сетевой обмен между сервером и клиентом, что особенно становится актуальным при создании защищенных соединений), то все это увеличивает количество лагов и повышает вероятность перегрузки сети. Поэтому для HTTP 1.1 было решено оставлять TCP-соединение открытым до тех пор, пока одна из сторон не решит прекратить его.

С другой стороны, если соединения не будут закрываться после того, как клиенты получат все необходимые им данные, задействованные ресурсы сервера для поддержания этих соединений не будут доступны другим клиентам. Поэтому HTTP-серверы, чтобы обеспечить больший контроль над потоком данных, используют временные интервалы (таймауты) для поддержки функциональности «keep-alive» для неактивных соединений (длящихся по умолчанию, в зависимости от архитектуры и конфигурации сервера, не более нескольких десятков секунд, а то и просто нескольких секунд), а также максимальное число отправляемых запросов «keep-alive», прежде чем сеанс без активного соединения будет остановлен. Более подробно о функциональности «keep-alive» вы можете узнать здесь (https://blog.stackpath.com/glossary/keep-alive/).

Подписывайтесь на рассылку, делитесь статьями в соцсетях и задавайте вопросы в комментариях!

Источник

Русские Блоги

Трехстороннее рукопожатие по протоколу TCP / IP и четыре взмах руки

Формат сообщения TCP

какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Подробное объяснение каждого поля

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

Порядковый номер (порядковый номер)
Серийный номер относится к номеру первого байта части «данных» (за исключением части «заголовка сегмента данных») в сегменте данных TCP, который занимает 32 бита. В TCP-соединении каждый байт данных передаваемого потока байтов данных должен быть пронумерован последовательно. В «заголовке сегмента данных» указывается только номер первого байта данных каждого сегмента данных. Начальный порядковый номер всего передаваемого байтового потока должен быть установлен при установке соединения. Например, значение поля «Порядковый номер» сегмента данных равно 101, а в числовом сегменте 100 байтов, что указывает на то, что номер последнего байта сегмента данных равен 200. Таким образом, следующий сегмент данных. Таким образом, значение поля «Порядковый номер» следующего сегмента данных должно быть 201 вместо 102. Обратите на это внимание.

Номер подтверждения
Номер подтверждения относится к первому байтовому порядковому номеру части «данных» в следующем сегменте данных, который, как ожидается, будет получен от другой стороны, и занимает 32 бита. Обратите внимание, что «номер подтверждения» не представляет порядковый номер последнего байта, который был принят правильно. Например, хост B получил сегмент данных от хоста A, его серийный номер равен 101, а длина сегмента данных составляет 100 байтов. Это указывает на то, что хост B получил первые 200 байтов хоста A, и порядковый номер первого байта следующего сегмента данных, который, как ожидается, должен быть получен, должен быть 201, поэтому хост B должен отправить сегмент данных подтверждения хосту A. «Номер подтверждения» установлен на 201.
Два поля «Серийный номер» и «Номер подтверждения» используются вместе для контроля ошибок в службах TCP, чтобы гарантировать надежность передачи данных TCP.

Смещение данных
Смещение данных относится к байтовому смещению от начала части «данных» сегмента данных до начала сегмента данных TCP, который занимает 4 бита. Фактически, «смещение данных» здесь также определяет длину заголовка сегмента данных TCP, поскольку часть «данные» следует сразу за заголовком сегмента данных. Поскольку в заголовке сегмента данных TCP присутствует неопределенное «необязательное» поле, поле смещения данных очень необходимо. Но обратите внимание, что смещение данных рассчитывается в единицах по 32 бита (т. Е. 4 байта), а не в одном байте. Поскольку максимальное число, которое может быть представлено 4 битами, равно 15, максимальное смещение данных составляет 60 байтов, что также является максимальной длиной заголовка сегмента данных TCP.

Хранить
Это 6 битов, зарезервированных для будущих приложений, и в настоящее время они должны быть установлены в 0.

ACK
Управляющий бит подтверждения, указывающий, действительно ли поле «номер подтверждения» в сегменте данных TCP, и занимает ли он один бит. Только когда бит ACK установлен в 1, это означает, что поле «Номер подтверждения» допустимо, в противном случае это означает, что поле «Номер подтверждения» недействительно, и объект уровня приложения может игнорировать поле «Номер подтверждения» при чтении данных.

PSH
Бит управления Push указывает, нужно ли немедленно отправлять полученный сегмент данных процессу приложения. Если он установлен в 0, такое требование отсутствует, и его можно сначала кэшировать.

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

SYN
Управляющий бит синхронизации (синхронизации), используемый для синхронизации порядкового номера соединения передачи, когда соединение передачи установлено, занимает 1 бит. Когда бит SYN равен 1, это означает, что это запрос на соединение или сообщение с подтверждением соединения. Когда SYN = 1 и ACK = 0, это указывает, что это сегмент данных запроса соединения. Если другая сторона соглашается установить соединение, другая сторона вернет подтверждение SYN = 1, ACK = 1.

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

Размер окна
указывает размер окна, используемого для хранения сегмента входящих данных на хосте, отправляющем этот сегмент данных TCP, то есть максимальное количество байтов, которое отправитель может принять в настоящее время, занимающее 16 бит. Поле «размер окна» TCP использует протокол скользящего окна переменного размера для управления потоком, такой как CDT. Значение поля «размер окна» сообщает хосту, который получает этот сегмент данных. Начиная со значения «номера подтверждения», установленного в этом сегменте данных, количество байтов, которое локальный конец в настоящее время позволяет отправлять противоположному концу, используется в качестве настройки для другого Основа размера окна. Предполагая, что значение поля «номер подтверждения» сегмента данных, отправленного на этот раз, равно 501, а значение поля «размер окна» равно 100, начиная с 501, локальный конец также может принимать 100 байтов (номера байтов 501

Контрольная сумма
Контрольная сумма предназначена для проверки трех частей «заголовка сегмента данных», «данных» и «псевдозаголовка», занимающих 16 бит. «Псевдозаголовок» включает 32-битный IP-адрес хоста-источника и хоста-получателя, номер протокола TCP (6) и длину сегмента данных TCP. Если вы хотите узнать, как выполнить проверку, обратитесь к другой статье о методе расчета контрольной суммы в формате заголовка датаграммы IPV4, в которой есть подробные примеры.

Аварийный указатель
имеет смысл, только когда передняя позиция управления URG равна 1, она указывает количество байтов срочных данных в этом сегменте данных, который занимает 16 бит. Поле «указатель срочности» указывает положение конца срочных данных в сегменте данных. Когда все срочные данные будут обработаны, TCP сообщит приложению о возобновлении нормальной работы. Следует отметить, что даже если текущий размер окна равен 0, срочные данные могут быть отправлены, потому что срочные данные не нужно кэшировать.

Необязательный
Поле «Необязательное» является необязательным, а длина может изменяться до 40 байт. Когда это поле не используется, длина заголовка TCP составляет 20 байтов. Он может включать параметры масштабирования окна (Windows Scale Option, WSopt), MSS (максимальный размер сегмента данных), параметры SACK (выборочное подтверждение), параметры временной метки (Timestamp) и т. Д.

данные
Это данные, отправленные прикладным процессом с прикладным уровнем в качестве «данных» (полезной нагрузки) сегмента данных TCP.

Краткое описание:

(1) Порядковый номер: порядковый номер Seq, занимает 32 бита, используется для идентификации потока байтов, отправляемого из источника TCP в пункт назначения, и инициатор отмечает это при отправке данных.
(2) Порядковый номер подтверждения: порядковый номер подтверждения, занимает 32 бита, только когда флаг ACK равен 1, поле номера последовательности подтверждения является допустимым, Ack = Seq + 1.
(3) Флаговые биты: всего 6, а именно URG, ACK, PSH, RST, SYN, FIN и т. д. Конкретные значения следующие:
(A) URG: Срочный указатель действителен.
(B) ACK: убедитесь, что серийный номер действителен.
(C) PSH: получатель должен доставить это сообщение на уровень приложения как можно скорее.
(D) RST: сбросить соединение.
(E) SYN: инициировать новое соединение.
(F) FIN: разорвать соединение.

нужно знать:
(A) Не путайте серийный номер подтверждения Ack с ACK в бите флага.
(B) Подтверждающая сторона Ack = инициирующая сторона Req + 1, оба конца соединены.

Два или три рукопожатия

(1) Первое рукопожатие: клиент устанавливает бит флага SYN в 1, случайным образом генерирует значение seq = J и отправляет пакет данных на сервер.Клиент входит в состояние SYN_SENT и ждет подтверждения от сервера.
(2) Второе рукопожатие: после того, как сервер получит пакет данных, бит флага SYN = 1 знает, что клиент запрашивает установление соединения, и сервер устанавливает биты флага SYN и ACK в 1, ack = J + 1, случайным образом генерируют значение seq = K и отправляют пакет данных Клиенту для подтверждения запроса на соединение, и Сервер переходит в состояние SYN_RCVD.
(3) Третье рукопожатие: после получения подтверждения Клиент проверяет, равно ли подтверждение J + 1 и равно ли ACK 1, и, если это правильно, бит флага ACK устанавливается в 1, ack = K + 1 и отправьте пакет данных на сервер, сервер проверяет, является ли подтверждение K + 1 и ACK равно 1, если это правильно, соединение установлено успешно, клиент и сервер входят в состояние ESTABLISHED, завершают трехстороннее рукопожатие, а затем клиент и сервер Данные могут передаваться между.

Помашите три или четыре раза

** Four-Way Wavehand ** предназначен для разрыва TCP-соединения, что означает, что при отключении TCP-соединения клиент и сервер должны отправить в общей сложности 4 пакета для подтверждения отключения. В программировании сокетов этот процесс запускается либо клиентом, либо сервером, выполняющим close.

(1) Первая волна: клиент отправляет FIN, чтобы завершить передачу данных от клиента к серверу, и клиент переходит в состояние FIN_WAIT_1.
(2) Вторая волна: после получения FIN сервер отправляет ACK клиенту, подтверждая, что серийный номер является полученным серийным номером +1 (так же, как SYN, один FIN занимает один серийный номер), Сервер переходит в состояние CLOSE_WAIT.
(3) Третья волна: сервер отправляет FIN, чтобы завершить передачу данных от сервера к клиенту, и сервер переходит в состояние LAST_ACK.
(4) Четвертая волна: после того, как Клиент получает FIN, Клиент переходит в состояние TIME_WAIT, а затем отправляет ACK на Сервер, подтверждая, что серийный номер является полученным серийным номером +1, и Сервер переходит в состояние ЗАКРЫТО. Завершите четыре волны.

2. Одновременно инициируйте активное выключение.

Конкретный процесс выглядит следующим образом:
какое поле в заголовке tcp указывает состояние трехстороннего процесса рукопожатия

Четыре, примечания

Источник

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

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