Анимация: объясните интервьюеру процесс трехстороннего рукопожатия TCP с помощью анимации.

опрос

在这里插入图片描述
Автор | Сяолу

Источник | Официальный аккаунт: Xiaolu Animation Learning Programming

написать впереди

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

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

карта обучения

在这里插入图片描述

1. Что такое TCP?

TCP(Transmission Control Protocol 传输控制协议)Это ориентированный на соединение, надежный протокол связи транспортного уровня на основе потока байтов.

мы знаем вышеTCPОпределение, с точки зрения непрофессионала,TCPЭто стандарт (протокол) для связи между двумя сторонами.

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

2. Сообщение заголовка TCP

在这里插入图片描述

2.1 source portа такжеdistination port

Это «номер порта источника» и «номер порта назначения» соответственно. Номер исходного порта относится к локальному порту, а порт назначения относится к удаленному порту.

пакет (pocket) Декапсулированный сегмент данных (segment), это будет включать подключение порта к протоколу верхнего уровня.

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

在这里插入图片描述

Расширение: номер порта приложения и IP-адрес хоста, на котором находится приложение, вместе называются сокетом (сокетом), IP: номер порта, сокет однозначно идентифицирует каждое приложение в Интернете, исходный порт + исходный IP + порт назначения + IP-адрес назначения Называется «пара сокетов». Пара сокетов представляет собой соединение, соединение между клиентом и сервером.

2.2 Sequence Numbe

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

在这里插入图片描述
Проще говоря, каждое поле использует порядковый номер для обозначения своей позиции во время передачи, и это поле используется для обеспечения того, чтобы исходная позиция поля находилась в порядке передачи при передаче обеих сторон. (Отправитель определяет, в каком порядке находятся данные, и получатель должен убедиться, что они именно в этом порядке)

PS: Начальный порядковый номер определяется вами, а порядковый номер последующего потока определяется ACK противоположного конца: SN_x = ACK_y (порядковый номер x = ACK, отправленный y к x), который будет быть упомянуты позже.

2.3 Acknowledgment Numbe

Он называется «Серийный номер подтверждения». Порядковый номер подтверждения — это следующий порядковый номер, который ожидает получить получатель подтверждения. Порядковый номер подтверждения должен быть порядковым номером последнего успешно принятого байта данных плюс 1, а поле порядкового номера подтверждения допустимо только тогда, когда флаг ACK в бите флага равен 1. В основном используется для решения проблемы отсутствия потери пакетов.

Если номер подтверждения=N, это означает, что все данные до серийного номера N-1 были получены правильно.

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

2.4 TCP Flag

TCPВ заголовке есть 6 флаговых битов, несколько из которых могут быть установлены в1В основном используется для управленияTCPГосударственная машина, а затемURG,ACK,PSH,RST,SYN,FIN.

Новичкам не обязательно осваивать их все, но вот только три важных признака:

2.4.1 ACK

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

在这里插入图片描述

Этот флаг означает «поле ответа действительно», что означает, что указанный выше номер ответа TCP будет включен в пакет данных TCP; есть два значения: 0 и 1, когда это 1, это означает, что поле ответа допустимо, иначе 0;

2.4.2 SYN

Указывает «порядковый номер синхронизации», который является первым пакетом, отправленным при установлении связи TCP.

Используется для установления TCP-соединения. Флаг SYN используется вместе с флагом ACK При запросе соединения SYN=1, ACK=0 При ответе на соединение SYN=1, ACK=1 Пакеты с этим флагом часто используются для сканирования портов . Сканер отправляет пакет только с SYN.Если другой хост отвечает пакетом, это означает, что хост существует на этом порту. Посмотрите анимацию ниже:

在这里插入图片描述

2.4.3 FIN

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

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

在这里插入图片描述

2.5 Window size

называется размером скользящего окна. Для управления потоком используется так называемое скользящее окно.

3. Почему выполняется трехстороннее рукопожатие TCP?

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

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

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

Если вы знаете UDP, появление TCP официально компенсирует недостатки ненадежной передачи UDP. Но рождение TCP неизбежно увеличит сложность соединения.

4. Что такое трехсторонний процесс установления связи TCP?

Процесс трех рукопожатий TCP является наиболее важной вещью, это изменение состояния клиента и сервера.Другой является изменение информации о логотипе процесса трех рукопожатий, затем три рукопожатия мастера TCP просты. Ниже мы разложим три рукопожатия в анимацию.

在这里插入图片描述

  • начальное состояние: клиент находится вclosed(关闭)состояние, сервер находится вlisten(监听)условие.
    在这里插入图片描述
  • первое рукопожатие: клиент отправляет запрос наSYN = j(1)Порядковый номер инициализации отправляется клиенту, и клиент находится вSYN_Sendусловие.
    在这里插入图片描述
  • второе рукопожатие: сервер получаетSYNПосле запроса сообщения, если вы согласны с подключением, вы будете использовать свой собственныйSYN(服务端) = K(0)а такжеack(1) = SYN(客户端) + 1(ACK = 1)сообщение в качестве ответа, серверSYN_Receiveусловие.
    在这里插入图片描述
  • третье рукопожатие: клиент получает серверSYN + ACK, затем отправитьack = SYN(服务端) + 1(ACK = 1)Пакет подтверждения в качестве ответа, клиент конвертируется вestablishedусловие.
    第三次握手

5. Почему не одно, а два рукопожатия?

Это предотвращает трату ресурсов сервером на постоянное ожидание.

Чтобы предотвратить повторную отправку сегмента неудачного запроса на соединение на сервер, что приведет к ошибке. Если сервер получает информацию об отложенном рукопожатии, отправленную клиентом в это время, а затем сервер отвечает, думая, что клиент хочет установить с ним соединение, клиент не имеет в виду это в это время, аserverДумали, что новое транспортное сообщение установлено, и ждалиclientотправить данные. так,serverМногие ресурсы тратятся впустую.


❤️ Не забывайте оставлять свои следы[Нравится + Избранное + Комментарий]

После прочтения статьи почему бы не поставить лайк? Хи-хи, тогда это показывает, что вы очень эгоистичны и боитесь, что такую ​​хорошую статью увидят другие. Просто шучу.

На самом деле, я эгоистична, я ставлю свой настойчивость на первоначальном общественном номере: «Программа школьной программы Fawnation Animation» тайно дает вам, внутри приносит оленей, объясняющую оленя в анимационных структурах и алгоритмах, сетевой теории, веб и другие технические статьи.

在这里插入图片描述

Информация об авторе:

【Автор】:Сяолу

[Исходный публичный аккаунт] Программирование обучения анимации Xiaolu

[Введение]: вместе с Xiaolu мы изучим программирование с нуля с помощью анимации и представим нашим друзьям внешний веб-домен, структуру данных и алгоритм, сетевые принципы и т. д. в простой для понимания форме.Официальный аккаунт отвечает на «данные», чтобы получить множество материалов для самостоятельного изучения с нуля!

【Инструкции по перепечатке】: Пожалуйста, укажите источник перепечатки, спасибо за сотрудничество! ~