syn sent что означает

Отслеживание состояния сети в Linux – команда netstat

Для получения сведений об активности и статистике сетевых соединений (интерфейсов) существует масса удобных мониторинговых приложений с графическим пользовательским интерфейсом, всевозможных виджетов и т. д. Однако, все эти решения построены на основе стандартных утилит, входящих в состав практически любой Linux- или UNIX-ориентированной системы. Для администрирования серверов на базе системы Linux такие стандартные утилиты являются достаточно исчерпывающим инструментом для получения информации о работе сети. Одной из таких является команда netstat. С помощью неё можно получить вывод с информацией о состоянии сетевого программного обеспечения, статистику сети, сведения о маршрутизации и т.д.

Синтаксис и опции netstat

Ключи можно комбинировать. Самая распространенная команда использования netstat это:

Эта команда выводит довольно большой список. Поэтому для получения нужной информации используйте grep. Например для получения всех портов которые слушаются в системе.

Контроль сетевых соединений

В данном выводе видно, как ведёт себя интерфейс eno1, через который осуществляется соединение в сеть, а также что происходит с интерфейсом обратной связи lo. В столбцах RX/TX приводится статистика по трафику с указанием количества пакетов, в том числе и пакетов с ошибками. В частности, показатель RX свидетельствует о количестве пакетов, полученных интерфейсом, TX – о количестве пропущенных через этот интерфейс пакетов с момента загрузки системы или первичной активации (задействования) интерфейса.

Количество ошибок (RX-ERR, TX-ERR) как правило, не должно быть больше 1% (в некоторых случаях 5%) от общего числа пакетов. Если ошибок больше, то следует проанализировать этот параметр на других компьютерах. Большое количество ошибок в сети (на других компьютерах) свидетельствует о неполадках в окружении сети. На отдельном компьютере излишнее их (ошибок) количество говорит о неполадках с сетевым интерфейсом (сетевая карта) или с самим соединением (кабели, совместимость оборудования).

Посмотреть сетевые соединения

Если дать команду netstat без параметров, то будет выведен список процессов (демонов), для которых установлены сетевые соединения. Если нужно также получить информацию о процессах, которые активных соединений не имеют, но слушают порты, нужно использовать ключ -a:

Данный вывод включает в себя также и информацию о системных сокетах UNIX и UDP. Как видно, в представленном отчёте зафиксировано входящее SSH-соединение, два входящих соединения IMAPS, одно входящее HTTP-соединение, а также несколько портов, которые «слушают» (LISTEN) другие соединения. Адреса в данном выводе представлены в формате имя_хоста:служба, где в качестве службы может выступать порт. В колонках Recv-Q и Send-Q отображается количество запросов в очередях на приём и отправку на данном узле/компьютере. Следует также отметить, что факт установки соединения проверяется только для протокола TCP. Кроме описанных состояний соединений имеются также и некоторые другие:

Идентификация сетевых процессов

Получение статистики для различных сетевых протоколов

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

ИТ База знаний

Полезно

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Установление и прекращение TCP соединения

3 часть. СИН-АК-СИНАК

Онлайн курс по Кибербезопасности

Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии

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

TCP сообщает об установлении соединения, используя 2 бита в полях флагов заголовка TCP. Эти биты, называемые флагами SYN и ACK, имеют особенно интересное значение. SYN означает «синхронизировать порядковые номера», что является одним из необходимых компонентов при инициализации TCP.

Восстановление после ошибок и надежность

TCP обеспечивает надежную передачу данных, что также называется reliability or error recovery. Для обеспечения надежности TCP нумерует байты данных, используя поля «Sequence» и «Acknowledgment» в заголовке TCP. TCP обеспечивает надежность в обоих направлениях, используя поле Sequence Number одного направления в сочетании с полем Acknowledgment в противоположном направлении.

Однако этот пример не исправляет никаких ошибок; он просто показывает основы того, как хост-отправитель использует поле порядкового номера для идентификации данных, а хост-получатель использует прямые подтверждения для подтверждения данных. Более интересное обсуждение вращается вокруг того, как использовать эти же инструменты для восстановления ошибок. TCP использует поля «Sequence» и «Acknowledgment«, чтобы принимающий хост мог заметить потерю данных, попросить отправляющий хост повторно отправить, а затем подтвердить, что повторно отправленные данные прибыли.

Существует множество вариантов того, как TCP выполняет исправление ошибок. На рисунке 8 показан только один такой пример, детализация которого аналогична предыдущему. Веб-браузер снова отправляет три сегмента TCP, снова по 1000 байт каждый, снова с легко запоминающимися порядковыми номерами. Однако в этом примере второй сегмент TCP не может пройти через сеть.

Рисунок указывает на три набора идей, лежащих в основе того, как думают два хозяина. Во-первых, справа сервер понимает, что он не получил все данные. Два полученных сегмента TCP содержат байты с номерами 10001999 и 30003999. Очевидно, сервер не получил байты, пронумерованные между ними. Затем сервер решает подтвердить все данные вплоть до потерянных, то есть отправить обратно сегмент с полем подтверждения, равным 2000.

Наконец, обратите внимание, что сервер может подтверждать не только повторно отправленные данные, но и любые предыдущие данные, которые были получены правильно. В этом случае сервер получил повторно отправленный второй сегмент TCP (данные с порядковыми номерами 20002999), и сервер уже получил третий сегмент TCP (данные с номерами 30003999). Следующее поле подтверждения сервера подтверждает данные в обоих этих сегментах с полем подтверждения, равным 4000.

Управление потоком с использованием окон

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

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

Начнем с первого сегмента, отправленного сервером на ПК. Поле Acknowledgment должно быть вам знакомо: оно сообщает ПК, что сервер ожидает следующий сегмент с порядковым номером 1000. Новое поле, поле окна, установлено на 3000. Поскольку сегмент передается на ПК, это значение сообщает ПК, что ПК может послать не более 3000 байтов по этому соединению до получения подтверждения. Итак, как показано слева, ПК понимает, что может отправлять только 3000 байтов, и прекращает отправку, ожидая подтверждения, после отправки трех 1000-байтовых сегментов TCP.

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

Читайте также:  Что такое кочующие птицы

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

Онлайн курс по Кибербезопасности

Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии

Источник

Syn sent что означает

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-01

Всем привет ранее я начал рассказ про сетевые утилиты системного администратора в статье «Утилита pathping или как диагностировать проблему на маршруте до сайта. Сетевые утилиты 3 часть», движемся дальше и разбираем еще одну утилиту netstat или, как определить какие порты слушает ваш компьютер. Данная программка, будет не заменимым инструментом в багаже софта, любого системного инженера, поможет ему провести быструю диагностику ситуации и обнаружить ряд всевозможных проблем с сервисами и их доступностью.

Команды netstat

Представим ситуацию вы установили например MSM LSI утилиту для просмотра параметров RAID контроллера, запускаете утилиту, но ничего она не находит, потому что закрыт порт а какой вы не в курсе, и не всегда в инете можно быстро найти информацию об этом, для этого вы и может запустить netstat и посмотреть какой порт слушает ваш сервер с MSM процессом.

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-02

Отображение статистики протокола и текущих сетевых подключений TCP/IP.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p протокол] [-r] [-s] [-x] [-t]
[интервал]

Давайте посмотрим интересные ключи утилиты netstat. Первое что вводим

и у нас на экране появится статистика сетевых пакетов ethernet.

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-03

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-04

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-05

Очень полезно посмотреть все что слушает ваш хост для этого пишем

Вывод команды содержит Тип протокола либо TCP либо UDP, локальный адрес с портом который слушается и внешний адрес с портом и состояние действия.

Для полного понимания информации, предоставляемой этой командой, необходимо понять принципы установки соединения в протоколе TCP/IP. Вот основные этапы процесса установки соединения TCP/IP:

1. При попытке установить соединение клиент отправляет сообщение SYN серверу.

2. Сервер отвечает собственным сообщением SYN и подтверждением (ACK).

Процесс разрыва соединения состоит из следующих этапов:

1. Клиент сообщает «Я закончил», отправляя сообщение FIN серверу. На этом этапе клиент только принимает данные от сервера, но сам ничего не отправляет.

2. После этого сервер отправляет сообщение ACK и отправляет собственное сообщение FIN клиенту.

3. После этого клиент отправляет сообщение ACK серверу, подтверждая запрос сервера FIN.

4. При получении сообщения ACK от клиента сервер закрывает соединение.

Понимание этапов процесса установки и разрыва соединения позволяет более прозрачно интерпретировать состояния соединений в выводе команды netstat. Соединения в списке могут находиться в следующих состояниях.

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-06

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-07

также можно вывести только TCP порты

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-08

Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть-09

Вот такая вот полезная утилиты с которой вы всегда будите знать по каким портам общаются службы на хосте. Читайте далее Утилита TCPView. Как определить какие порты слушает ваш компьютер. Сетевые утилиты 5 часть

Популярные Похожие записи:

6 Responses to Утилита netstat или как определить какие порты слушает ваш компьютер. Сетевые утилиты 4 часть

thank you very much, would you weird area for any designers to hide this setting up. i had been possessing a number of difficulties with a new Dreamhost machine and i had not been guaranteed the reason why works out which they modify demonstrating invisible documents automagically, whereas different hosting space we connect to together with Filezilla appear to indicate invisible documents automagically. your own personal article allowed me to figure it available, i really appreciate it.

Уважаемый Иван, большое спасибо, это отличная получилась статья! У меня все получилось.

Очень рад, что смог вам помочь!

Добрый день. А как узнать какая программа занимает 80 порт?

Очень просто вы через netstat или tcpView смотрите PID процесса, который висит на порту, далее по PID вычисляете исполняемый файл.

>Добрый день. А как узнать какая программа занимает 80 порт?

Источник

3.9 Обработка событий

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

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

Модель интерфейса TCP и клиента состоит в том, что команды клиента выполняются немедленно, а вероятный отложенный отчет предоставляется через механизм событий или псевдопрерываний. В дальнейшем описании понятие «сигнал» может обозначать некое основание для посылки отложенного отчета.

Сообщение об ошибках предоставляется в виде текстовых строк. Например, команды клиента, адресованные к несуществующим соединениям, получат сообщение «error: connection not open».

Пожалуйста учтите, что в дальнейшем вся арифметика для номеров очереди, номеров подтверждения, окон и т.д. осуществляется по модулю 2**32, что соответствует размеру множества номеров очередей.

Если сделавший запрос клиент не получил доступа к указанному в запросе сокету, то вернуть сообщение «error: connection illegal for this process». Если для создания нового соединения нет места в памяти компьютера, то вернуть сообщение «error: insufficient resources».

Если происходит активизация и указан чужой сокет, то сменить состояние соединения с пассивного на активный, выбрать ISS. Послать сегмент с сигналом SYN, занести в SND.UNA значение ISS, а в SND.NXT ISS+1. Перейти в SYN-SEND состояние.

Данные, указанные в команде SEND, могут быть посланы в том же сегменте с сигналом SYN, или же могут быть помещены в очередь на передачу, которая может быть осуществлена после перехода в ESTABLISHED состояние. Если в команде сделан запрос на применение бита срочности, то в результате ее выполнения должны быть посланы сегменты данных. Если в очереди заказов на пересылку нет места, то в результате будет получен ответ «error: insufficient resources». Если чужой сокет не указан, то вернуть сообщение «error: foreign socket unspecified»

Состояния

SYN-SENT
SYN-RECEIVED
ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
CLOSE-WAIT
CLOSING
LAST-ACK
TIME-WAIT

возвращают в ответ на команду открытия сообщение «error: connection already exist»

Состояние CLOSED (например, нет блока TCB)
Если клиент не имеет доступа к такому соединению, то вернуть сообщение «error: connection illegal for this process». В противном случае вернуть «error: connection does not exist».

Состояние LISTEN
Если указан чужой сокет, то сменить состояние соединения с пассивного на активный, выбрать номер ISS. Послать сегмент с сигналом SYN, установить SND.UNA в ISS, а SND.NXT в ISS+1. Установить новое состояние SYN-SENT. Данные из вызова SEND могут быть посланы вместе с сигналом SYN, а могут быть помещены в очередь и отправлены уже после установления ESTABLISHED состояния.

Если в команде дан запрос на применение бита срочности, то он должен быть передан вместе с сегментом данных, возникающим при выполнении этой команды. Если в очереди нет места для запроса, то вернуть сообщение «error: insufficient resources». Если чужой сокет не указан, то вернуть «error: foreign socket unspecified».

Состояние SYN-SENT
Состояние SYN-RECEIVED
Поместить данные в очередь с тем, чтобы отправить после установления ESTABLISHED состояния. Если в очереди нет места, то вернуть сообщение «error: insufficient resources».

Состояние ESTABLISHED
Состояние CLOSE-WAIT
Сегментировать буфер данных и переслать его с ответным подтверждением (значение подтверждения = RCV.NXT). Если для размещения этого буфера недостаточно места в памяти, то просто вернуть сообщение «error: insufficient resources».

Если установлен флаг срочности, то занести в SND.UP значение SND.NXT-1 и установить указатель срочности на уходящие сегменты.

Состояния

FIN-WAIT-1
FIN-WAIT-2
CLOSING
LAST-ACK
TIME-WAIT

Вернуть сообщение «error: connection closing» и не выполнять запрос клиента.

Состояние CLOSED (например, отсутствует блок TCB)
Если клиент не имеет доступа к такому соединению, вернуть сообщение «error: connection illegal for this process». В противном случае вернуть сообщение «error: connection does not exist».

Состояния

LISTEN
SYN-SENT
SYN-RECEIVED

Поместить запрос в очередь на обслуживание после установления ESTABISHED состояния. Если в очереди для этого нет места, вернуть сообщение «error: insufficient resources».

Состояния

ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2

Если в пришедших сегментах недостаточно данных для выполнения данного запроса, поместить последний в очередь на обслуживание. Если же в очереди нет места для размещения запроса RECEIVE, вернуть сообщение «error: insufficient resources».

Собрать данные из приходящих сегментов в буфере получения, а затем передать их клиенту. Установить флаг «обнаружено проталкивание» (PUSH), если это имеет место.

Если данным, передаваемым в настоящий момент клиенту, предшествовал RCV.UP, то оповестить клиента о присутствии срочных данных. Когда протокол TCP берет на себя ответственность за получение клиентом данных, то это фактически означает обмен информацией с отправителем в виде подтверждений. Формирование такого подтверждения обсуждается ниже при рассмотрении алгоритма обработки приходящего сегмента.

Состояние CLOSE-WAIT
Поскольку партнер на другом конце соединения уже послал сигнал FIN, то команды RECEIVE должны получать данные, уже имеющиеся в системе, а не только те, которые уже переданы клиенту. Если в системе больше нет текста, ждущего своего запроса RECIVE, то передать клиенту сообщение «error connection closing». В противном случае использовать для удовлетворения запроса RECEIVE любую имеющуюся информацию.

Состояния

CLOSING
LAST-ACK
TIME-WAIT

Вернуть сообщение «error connection closing».

Состояние CLOSED (например, нет блока TCB)
Если клиент не имеет доступа к такому соединению, вернуть сообщение «error: connection illegal for this process». В противном случае вернуть сообщение «error: connection does not exist».

Состояние LISTEN
Любые остающиеся неудовлетворенными запросы RECEIVE будут завершены с сообщением «error: closing». Стереть блок TCB, перейти в CLOSED состояние и вернуть управление клиенту.

Стереть блок TCB и вернуть сообщение «error closing» для любых еще остающихся в очередях запросов SEND или RECEIVE. Состояние SYN-RECEIVED

Если не сделано каких-либо запросов SEND и нет данных, ожидающих отправки, то сформировать FIN сегмент и послать его, а затем перейти в FIN-WAIT-1 состояние. В противном случае поместить данные в очередь для рассмотрения после установления ESTABLISHED состояния.

Состояние ESTABLISHED
Поместить запрос в очередь в ожидании, когда все данные предшествующих команд будут сегментированы. Тогда сформировать FIN сегмент и отправить его партнеру. В любом случае перейти в FIN-WAIT-1 состояние.

Состояние FIN-WAIT-1
Cостояние FIN-WAIT-2

Строго говоря, такая ситуация является ошибочной и должна привести к получению клиентом сообщения «error: connection closing». Однако может быть приемлемым также ответ «Ok», пока не отправлен второй FIN (хотя первый FIN может быть отправлен повторно).

Состояние CLOSE-WAIT
Поместить этот запрос в очередь, пока все предшествующие запросы SEND не будут помещены в сегменты. Затем послать сегмент с сигналом FIN, перейти в CLOSING состояние.

Состояния

CLOSING
LAST-ACK
TIME-WAIT

Возвратить сообщение «error: connection closing».

Состояние CLOSED (например, нет блока TCB)
Если клиент не имеет доступа к такому соединению, вернуть сообщение «error: connection illegal for this process». В противном случае вернуть сообщение «error: connection does not exist».

Состояние LISTEN
Любые остающиеся запросы RECEIVED должны завершиться с возвратом сообщения «error: connection reset». Стереть блок TCB, перейти в состояние CLOSED, вернуть управление программе клиента.

Состояние SYN-SENT
Все находящиеся в очереди запросы SEND и RECEIVE должны получить сообщение «connection reset», стереть блок TCB, перейти в состояние CLOSED, вернуть управление клиенту.

Состояния

SYN-RECEIVED
ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
CLOSE-WAIT

Послать сегмент перезагрузки

Все находящиеся в очереди запросы SEND и RECEIVED должны получить сообщение «connection reset». Все сегменты, находящиеся в очереди на передачу (за исключением только что сформированного сигнала RST) и в очереди на повторную пересылку должны быть ликвидированы. Стереть блок TCB, перейти в CLOSED состояние, вернуть управление клиенту.

Состояния

CLOSING
LAST-ACK
TIME-WAIT

Вернуть сообщение «ok» и стереть блок TCB, перейти в состояние CLOSED, вернуть управление клиенту.

Состояние CLOSED (например, нет блока TCB)
Если клиент не имеет доступа у такому соединению, то возвратить сообщение «error: connection illegal for this process». В противном случае вернуть «error: connection does not exist».

Состояние LISTEN
Вернуть сообщение «state=LISTEN» и указатель на блок TCB.

Состояние SYN-SENT
Вернуть сообщение «state=SYN-SENT» и указатель на блок TCB.

Состояние SYN-RECEIVED
Вернуть сообщение «state=SYNRECEIVED» и указатель на блок TCB.

Состояние ESTABLISHED
Вернуть сообщение «state=ESTABLISHED» и указатель на блок TCB.

Состояние FIN-WAIT-1
Вернуть сообщение «state=FIN-WAIT-1» и указатель на блок TCB.

Состояние FIN-WAIT-2
Вернуть сообщение «state=FIN-WAIT-2» и указатель на блок TCB.

Состояние CLOSE-WAIT
Вернуть сообщение «state=CLOSE-WAIT» и указатель на блок TCB.

Состояние CLOSING
Вернуть сообщение «state=CLOSING» и указатель на блок TCB.

Состояние LAST-ACK
Вернуть сообщение «state=LAST-ACK» и указатель на блок TCB.

Состояние TIME-WAIT
Вернуть сообщение «state=TIME-WAIT» и указатель на блок TCB.

Приход сегментов

Если состояние соединения CLOSED (например, нет блока TCB), то все данные из указанного сегмента будут выброшены. Сегмент, пришедший с сигналом RST, будет ликвидирован. Сегмент же, не содержащий сигнала RST, вызовет посылку сигнала RST в ответ. Подтверждение и номер очереди будут выбраны таким образом, чтобы сделать последовательность перезагрузки приемлемой для программы TCP, отправившей сегмент, который и вызвал такую реакцию.

Если бит ACK сброшен, то используется номер очереди нуль:

Если же ACK установлен, то

Вернуть управление прерванной программе.

Если состояние соединения LISTEN, то
Сперва проверить присутствие сигнала RST.
Сигнал RST, пришедший вместе с сегментом, должен игнорироваться, а управление должно быть возвращено прерванной программе.

Во-вторых, проверить на присутствие ACK.
Любое подтверждение является ошибкой, если оно пришло на конец соединения, все еще находящийся в состоянии LISTEN. В ответ на любой сегмент, пришедший с ACK, должен быть сформирован приемлемый сегмент с сигналом перезагрузки. Сигнал RST должен быть сформирован следующим образом:

Вернуть управление прерванной программе.

В-третьих, проверить на присутствие сигнала SYN
Если установлен бит SYN, то проверить безопасность. Если значение параметра безопасность/закрытость в пришедшем сегменте не совпадает в точности со значением безопасность/ закрытость в блоке TCB, то послать сигнал перезагрузки и вернуть управление прерванной программе:

Если значение SEQ.PRC меньше, чем TCB.PRC, то перейти к следующему пункту.

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

Если состояние соединения SYN-SENT

Во-первых, проверить бит ACK Если бит ACK выставлен, то
В случае, если SEG.ACK = SND.NXT,
послать сигнал перезагрузки

(Если не выставлен бит RST. Если он все же выставлен, то, ничего не делая выкинуть пришедший сегмент и вернуть управление прерванной программе.) Ликвидировать сегмент, вернуть управление.
Если SND.UNA =
в противном случае послать

Если имеется значение ACK, то
приоритет в пришедшем сегменте должен совпадать с приоритетом, указанным в блоке TCB. Если это не так, то послать сигнал перезагрузки

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

Если бит SYN установлен и параметры безопасности/ закрытости приоритета являются приемлемыми, то в переменную SEG.NXT записать значение SEG.SEQ+1, а IRS установить равным SEG.SEQ.

SND.UNA должно быть повышено до SEG.ACK (если имеется ACK), а любые сегменты в очереди на повторную посылку, получившие таким образом подтверждение, должны быть удалены.

В-пятых, если установлены биты SYN или RST, то выкинуть пришедший сегмент и вернуть управление прерванной программе. Если во время прихода сегмента соединение находилось в состоянии, не описанном выше, то

Во-первых, проверить номер очереди

Состояния

SYN-RECEIVED
ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
CLOSE-WAIT
CLOSING
LAST-ACK
TIME-WAIT

Сегменты обрабатываются по очереди. По получении сегмента сперва осуществляется тест для удаления старых дубликатов, но дальнейшая обработка осуществляется в порядке номеров SEG.SEQ. Если содержимое сегмента перекрывает границу между старой и пока новой информацией, то должны обрабатываться только новые данные.

Тест на приемлемость приходящего сегмента рассматривает четыре варианта:

Длина сегмента Окно получения Текст
0 0 SEG.SEQ = RCV.NXT
0 >0 RCV.NXT = 0 0 сегмент неприемлем
>0 >0 RCV.NXT =

Если RCV.WND нулевой, никакие сегменты не будут приемлемы, однако должна быть специально оговорена приемлемость получения правильных сигналов ACK, URG и RST.

После посылки подтверждения ликвидировать не принятый сегмент и вернуть управление прерванной программе.

В дальнейшем рекомендации строятся на предположении, что пришедший сегмент является идеализированным и начинается с RSV.NXT, не выходящим за окно. Реальные же сегменты можно подгонять под такое предположение, отбрасывая любые их части, выходящие за пределы окна (включая даже сигналы SYN и FIN), и осуществляя дальнейшую их обработку только если сегмент после этого начинается с номера RCV.NXT. Сегменты с большими номерами в очереди сохраняются для обработки в дальнейшем.

Во-вторых, проверить бит RST.

Состояние SYN-RECEIVED
Если бит RST установлен, то выполнить следующие действия:
Если данное соединение было инициировано командой пассивного открытия OPEN (например, был осуществлен переход из состояния LISTEN), то возвратить данное соединение в состояние LISTEN, а управление вернуть прерванной программе. Нет нужды информировать об этом пользователя. Если данное соединение инициируется командой активного открытия OEPN (например, был переход из состояние SYN-SENT), то происходит отказ от этого соединения, а клиенту посылается сообщение «connection refused». В любом случае должны быть удалены все сегменты из очереди на повторную посылку. Кроме того, в случае активного открытия перейти в состояние CLOSED, удалить блок TCB и вернуть управление прерванной программе.

Состояния

ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
CLOSE-WAIT

Если установлен бит RST, то все ждущие обработки запросы RECEIVE и SEND должны получить ответ «reset».

Убрать все сегменты из очередей. Клиенты должны получить необязательное сообщение общего назначения «connection reset». Перейти в состояние CLOSED, стереть блок TCB и вернуть управление прерванной программе.

Состояния

CLOSING
LAST-ACK
TIME-WAIT

Если выставлен бит RST, то перейти в состояние CLOSED, удалить блок TCB и вернуть управление прерванной программе.

В-третьих, проверить значение безопасности и приоритета у пришедшего сегмента

Состояние SYN-RECIEVED
Если безопасность/закрытость и приоритет в пришедшем сегменте не совпадают с безопасностью/закрытостью и приоритетом, указанными в блоке TCB, то послать сигнал перезагрузки и возвратить управление прерванной программе.

Состояние ESTABLISHED
Если безопасность/закрытость и приоритет в пришедшем сегменте не совпадают в точности с безопасностью/ закрытостью и приоритетом, указанными в блоке TCB, то послать сигнал перезагрузки, все еще остающиеся не обслуженными запросы RECEIVED и SEND должны получить ответ «reset». Все сегменты из очередей должны быть удалены. Клиенты должны тоже получить необязательный общий сигнал «connection reset». Перейти в состояние CLOSED, удалить блок TCB и вернуть управление прерванной программе.

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

В-четвертых, проверить бит SYN

Состояния

SYN-RECEIVED
ESTABLISHED
FIN-WAIT-1
FIN-WAIT-2
CLOSE-WAIT
CLOSING
LAST-ACK
TIME-WAIT

Если SYN находится в пределах окна, то послать сигнал перезагрузки. Любые ждущие обработки команды RECEIVE и SEND должны получить ответ «reset», убрать из очередей все сегменты, а клиент должен получить необязательное общее сообщение «connection reset». Перейти в состояние CLOSED, убрать блок TCB, вернуть управление прерванной программе.

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

Если бит ACK установлен

Состояние SYN-RECEIVED.
Если SND.UNA =
и послать его.

Состояние ESTABLISHED
Если SND.UNA SND.NXT), то послать ACK, ликвидировать сегмент и вернуть управление прерванной программе.

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

Состояния

CLOSE-WAIT
CLOSING
LAST-ACK
TIME-WAIT

Такого не должно случаться, поскольку был получен си гнал FIN с другого конца соединения. Игнорировать текст в сегменте.

В-восьмых, проверить бит FIN

Не обрабатывать сигнала FIN, если состояние CLOSED, LISTEN или SYN-SENT, поскольку нет возможности проверить SEG.SEQ, выкинуть пришедший сегмент и возвратить управление прерванной программе.

Если бит FIN установлен, то дать клиенту сигнал «connection closing», с тем же сообщением завершить все ждущие решения запросы RECEIVED, установить RCV.NXT перед местом в очереди сигнала FIN, послать для последнего подтверждение. Заметим, что сигнал FIN подразумевает проталкивание (PUSH) текстов во всех сегментах, еще не полученных клиентом.

Состояния

SYN-RECEIVED
ESTABLISHED

Перейти в состояние CLOSE-WAIT

Состояние FIN-WAIT-1
Если наш сигнал FIN получил подтверждение (возможно в этом же сегменте), то перейти в состояние TIME-WAIT, за пустить контрольный таймер, отключить все иные таймеры. Если подтверждения не было, перейти в состояние CLOSING.

Состояние FIN-WAIT-2
Перейти в состояние TIME-WAIT. Запустить контрольный таймер, отключить все контрольные таймеры.

Состояние CLOSE-WAIT
Остаться в состоянии CLOSE-WAIT

Состояние CLOSING
Остаться в состоянии CLOSING

Состояние LAST-ACK
Остаться в состоянии LAST-ACK

Состояние TIME-WAIT
Остаться в состоянии TIME-WAIT. По истечении контрольного времени 2MSL стартовать повторно. Вернуть управление прерванной программе.

Истечение контрольного времени для клиента
Если истекло контрольного время, то в каком бы состоянии не находилась программа, убрать все очереди, дать клиенту общий сигнал «error: connection aborted due to user timeout», такой же сигнал дать всем ждущим обработки запросам, ликвидировать блок TCB, перейти в состояние CLOSED, вернуть управление прерванной программе.

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

Истечение контрольного времени для состояния TIME-WAIT
Если истекло контрольное время для состояния TIME-WAIT, то ликвидировать соединение и блок TCB, перейти в состояние CLOSED, вернуть управление прерванной программе.

Источник

Читайте также:  какие телефоны поддерживают magsafe
Информ портал о технике и не только