Номера Ack и Seq в протоколе TCP

Номера Ack и Seq в протоколе TCP

1. Основные понятия

seq: Указывает смещение данных, отправленных на этот раз, то есть с чего начать отправку данных.

len: указывает длину данных, передаваемых этим tcp.

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

Во-вторых, захват пакетов Wireshark

61.135.185.32Это запрашивается локально ip, и захват пакета этого процесса выглядит следующим образом.

три рукопожатия

(Клиент) 1Бао: Могу я установить с вами связь?

  • seq=0, указывая на то, что это новое начало
  • Нет ack, поскольку соединение не установлено, невозможно сказать, сколько данных я получил от другой стороны
  • Len=0, что указывает на то, что я не передаю данные, это просто пакет, который хочет установить соединение tcp.

(Сервер) 2пакет с номером: Получил, можно подключаться, поиграем.

  • seq=0
  • ack=1Это подразумевает два пункта. Первый означает, что я получил seq=0запрос на подключение от того, который вы только что сделали. Кроме того, скажите другой стороне, чтобы она seq=1передавала мне данные с самого начала.
  • Len=0, указывая на то, что данные не передаются.

(Клиент) 3Нет. Бао: Хорошо, тогда давайте подключимся.

  • seq=1, в ответ на вышеуказанный пакет я действительно seq=1начал передавать
  • ack=1, а это значит, что я получил ваше согласие на подключение, пожалуйста, также передайте мне данные seq=0нижеseq=1
  • Len=0

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

Кратко опишите процесс трехстороннего рукопожатия:

  • Стартовый пакет seqравен0
  • в трехстороннем рукопожатииack=对方上一个的seq+1
  • seqackРавно последнему числу противника

процесс передачи данных

(Клиент) 4номер пакета: мне нужна информация о вашей домашней странице

Клиент отправляет httpзапрос, httpзапрос нужно tcpпроконтролировать, потом передать на ipслой, а потом отправить сетевой картой...

Обратите внимание на содержимое пакета 4кадраtcp

  • seq=1, т.к. в прошлый раз данные не передавались, seqномер остается неизменным, то есть 3номер пакетаseq=1,len=0
  • ack=1, сообщите серверу, что если вы отправляете данные, вы должны начать с seq=1самого начала
  • len=77, указывающее количество байтов данных, которые я передал на этот раз

(Сервер) 5Нет. Бао: Хорошо, я получил ваш запрос.

  • seq=1, как того требует 4пакет номеровack
  • ack=78, ack=4номер пакета seq+4号包的len = 1+77=78означает клиент, если будете отправлять повторно, то seq=78отправляйте с начала
  • len=0

(Сервер)` 6`Номерной пакет: Nuo, данные для вас

5、6Цифры - это все пакеты, отправленные сервером, и за это время пакеты не получены, как и должно быть, 5、6количество пакетов seq、ackодинаковое.

  • seq=1
  • ack=78
  • len=1440, длина данных

(Клиент) 7номер пакета: получен

  • seq=78, ты позволишь мне начать с 78волос, я начну с 78волос
  • ack=1441, номер 1441=6пакета , значит я его получилseq+6len=1+1440=1441
  • len=0

Подведем итог

Пакет отправителя, включая seqи len, как получатель информирует другую сторону о том, что данные получены?

Ответ лежит на получателе ack=发送方的seq+发送方的len.

В целом так и есть.

Особым случаем является то, что во время трехэтапного рукопожатия, когда клиент и сервер обмениваются рукопожатиями, len=0другая сторона не ack=seq+0, а ack=seq+1.

Supongo que te gusta

Origin blog.csdn.net/juruiyuan111/article/details/128917280
Recomendado
Clasificación