Привет. Не понимаю, что значит SYN и ACK при установке соединения по протоколу TCP. Кучу видео пересмотрел и не понял. Кто разобрался в этом? Какой смысл в этих SYN и ACK (зачем их вообще придумали)? Какими-то непонятными числами компьютеры обмениваются, какие-то приращения SYN на единицу... Нужен какой-то просто пример, понятный для того, кто вообще в сетях не разбирается.
Ответ
Придумали их с той важной целью, что пакеты, передющиеся по TCP, могут прийти не в той же последовательности что были отправлены и не в том же составе. Нужен механизм, который позволит собрать набор полученных пакетов в правильной последовательности. И заодно проверить все ли пакеты присутствуют или кто-то на пол пути сошёл с дистанции и потерялся.
Эту задачу и решают при помощи номеров очереди и номеров подтверждений. Номера очереди (номера последовательности) - просто нумеруют отправляемые пакеты. Это число увеличивается в зависимости от длины поля данных. Каждый октет данных (т. е. каждый байт) одного пакета имеет свой номер очереди. Номер очереди первого октета данных и передаётся в заголовке TCP пакета, он же и считается номером очереди для пакета. Номера подтверждений - сообщают другой стороне номер очереди который ожидается получить от неё следующим. Они говорят, что пакеты со всеми предыдущими номерами очередей (но не включая этот) уже были получены.
Первоначальный номер очереди высылается клиентом при установлении соединения вместе с флагом SYN. Сервер в ответ высылает номер подтверждения (полученный номер очереди + 1) и свой номер очереди (в целом любой, но при использовании механизма SYN coockie построенному по определённому алгоритму). Сервер в данный момент сообщает клиенту что ожидает от него пакет, который будет иметь номер очереди равный отправленному номеру подтверждения. От этого номера клиент в дальнейшем и отталкивается.
Далее всё происходит таким образом - одна сторона (сторона А) отправляет другой (стороне Б) пакеты, пронумерованные номерами очередей. Вторая сторона принимает их и сообщает номер очереди, которая она ожидает получить от А со следующим пакетом. Это говорит о том, что сторона Б получила все пакеты, у которых номер очереди был ниже переданного номера подтверждения (но не равен ему) и что сторона Б ожидает, что в следующей партии переданных данных нумерация начнётся как раз с этого номера.
На всякий случай ещё раз - поле TCP Номер очереди (Порядковый номер) означает просто номер пакета, нужен для того, что бы пакеты правильно собрать и обнаружить пропажу (или дубликат). Поле Номер подтверждения служит для информирования второй стороны о том какие пакеты были от неё уже получены (с какими порядковыми номерами) и содержит число, которое ожидается увидеть в поле Номер очереди следующего полученного пакета от этого же источника.
P. S. SYN и ACK это всё же флаги, а не числа. Они говорят о том, что задействованы соответствующие поля заголовка (флаги TCP)
Комментариев нет:
Отправить комментарий