Прежде всего, давайте познакомимся с классической моделью tcp/ip.
Для удобства использования модель tcp/ip делит семиуровневую модель osi на четыре уровня, а именно уровень сетевого интерфейса, сетевой уровень, транспортный уровень и прикладной уровень.Их функции:
1) Уровень сетевого интерфейса: основная функция состоит в том, чтобы связать IP-адрес и физический адрес компьютера друг с другом, а также реализовать преобразование двоичного потока и высокий и низкий потенциал компьютерного оборудования.
2) Сетевой уровень: основная функция состоит в том, чтобы связать две физические машины через IP-адреса для реализации передачи пакетов IP-данных;
3) Транспортный уровень: позволяет одноранговым объектам на исходном хосте и целевом хосте вести диалог. На транспортном уровне определены два протокола с разным качеством обслуживания. А именно: протокол управления передачей TCP (протокол управления передачей) и протокол пользовательских дейтаграмм UDP (протокол пользовательских дейтаграмм). ;
4) Прикладной уровень: он отвечает за передачу данных в различных окончательных формах и является уровнем, который непосредственно взаимодействует с пользователями.Типичные протоколы: HTTP, FTP и т. д.
Сегодня мы в основном рассмотрим основные протоколы tcp в модели tcp.
В компьютерной связи для обеспечения надежной сетевой связи протокол TCP является неотъемлемой частью. Так как же протокол tcp обеспечивает надежную связь? Это начинается с классического трехстороннего рукопожатия.
Трехстороннее рукопожатие означает, что клиент и сервер должны отправить не менее трех пакетов для установления TCP-соединения (более трех, если время ожидания сети истекло).
Первое рукопожатие: клиент отправляет пакет установления соединения.После отправки статус становится SYN_SENT.Флаг SYN в содержимом пакета равен 1 и случайному порядковому номеру seq, при условии, что значение равно j.Второе рукопожатие: после того, как сервер получил запрос, он отправляет пакет данных клиенту.Статус сервера меняется на SYN_RECV.Содержимое пакета данных содержит флаги SYN и ACK, и оба значения равны 1. Подтвердите, что серийный номер ack равен j+1, случайный серийный номер seq и предполагаемое значение равно i.
Третье рукопожатие: клиент получает пакет данных от сервера, и после проверки того, что ACK и SYN равны 1, он отправляет пакет подтверждения, и клиент входит в состояние ESTABLISHED.Пакет данных включает флаговый бит ACK и значение 1. Подтвердите подтверждение серийного номера, значение равно i+1. Порядковый номер seq, значение равно j+1.
Дополнительное пояснение: Порядковый номер подтверждения ack указывает последовательность следующего полученного пакета.Получатель использует seq и len для подтверждения того, является ли пакет данных действительным, следует ли отбросить пакет данных, поместить его в обычную последовательность пакетов данных или поставить это не по порядку.последовательность пакетов.
Итак, давайте посмотрим, почему tcp — это трехстороннее рукопожатие, а не два, один или четыре раза.
Первое рукопожатие:
a посылает пакет b. Установить связь, пожав руку только один раз, заведомо невозможно, так как а даже не знает подлинности б.
Второе рукопожатие:
b После получения запроса на подключение отправьте запрос на подтверждение подключения. Если соединение успешно установлено после двух рукопожатий, будет проблема:
a отправляет пакет запроса на подключение к b. По причинам, связанным с сетью, b не получает пакет до тех пор, пока не пройдет много времени. После того, как b его получит, он возвращает пакет данных в a. В это время из-за тайм-аута пакет отбрасывается. Если это двустороннее рукопожатие, то в это время состояние b — успешное установление соединения, и он всегда будет ожидать передачи данных от a. Это приведет к потере ресурсов сервера.
Третье рукопожатие:
После того, как a получает запрос подтверждения соединения от b, после проверки правильности данных, он отправляет запрос подтверждения на a, а b проверяет правильность данных после их получения. Если он правильный, соединение устанавливается успешно.
Трехстороннее рукопожатие позволяет избежать потери пакетов, вызванной тайм-аутом сети. Сервер и клиент должны получить правильный ACK, чтобы указать, что соединение установлено. В противном случае будет включен механизм повторной передачи тайм-аута. Конечно, если сеть действительно плохая, то соединение не может быть установлено, и невозможно все время ретранслировать. В операционной системе будет поле для установки количества повторных передач, чтобы избежать недействительных повторных передач.
Почему бы вам не четыре рукопожатия:
В начале это было изначально четырехстороннее рукопожатие.В случае четырехэтапного рукопожатия SYN и ACK, отправленные сервером, отправлялись отдельно, поэтому это было четыре раза, и позже оно было оптимизировано, поэтому оно стало трехстороннее рукопожатие.
волна.
Когда клиент и сервер устанавливают TCP-соединение через трехстороннее рукопожатие, может осуществляться передача данных.После завершения связи обе стороны могут отключиться.Отключение будет включать наши четыре взмаха рук. Давайте кратко рассмотрим четыре волны tcp.
Первая волна:
Клиент отправляет пакет данных с флаговым битом FIN, равным 1, и последовательностью m;
Вторая волна:
Сервер получает сегмент FIN, отправленный клиентом, и возвращает сегмент ACK клиенту. Значение подтверждения равно m+1. Сервер сообщает клиенту, что я «согласен» с вашим запросом на завершение работы. В настоящее время клиент не может отправить данные, а сервер не может. После получения данных сервер также может отправить данные клиенту;
Третья волна:
Сервер отправляет клиенту сегмент FIN с просьбой закрыть соединение, и сервер переходит в состояние LAST_ACK;
Четвертая волна:
Клиент получает отправленный сервером сегмент FIN, отправляет на сервер сегмент ACK, после чего клиент переходит в состояние TIME_WAIT; после получения сервером сегмента клиента он закрывает соединение, в это время клиент ждет 2MSL и до сих пор не получает Если вы отвечаете, это доказывает, что серверная часть была закрыта нормально.Ну, клиент также может закрыть соединение.
Что касается того, почему он передается четыре раза, основная причина заключается в том, что наше TCP-соединение является полнодуплексным и должно быть закрыто в обоих направлениях, поэтому в обоих направлениях необходимо отправить запрос на закрытие и запрос на подтверждение.
Ниже приводится важный механизм надежности TCP, повторное время ожидания.
Повторная передача тайм-аута является важным механизмом для протокола TCP для обеспечения надежности данных.Принцип заключается в запуске таймера после отправки определенных данных.Если сообщение ACK отправленной дейтаграммы не получено в течение определенного периода времени, оно будет отправлено повторно ., пока они не будут успешно отправлены. Трехстороннее рукопожатие, обычная передача данных, и если в процессе четырехэтапного рукопожатия есть тайм-аут, будет запущена повторная передача.
Так как же tcp определяет время ожидания?В настоящее время вводятся две новые вещи. Один RTT, другой RTO. Заинтересованные студенты могут спуститься вниз, чтобы понять, и здесь мы не будем вдаваться в подробности.
Резюме:Протокол tcp — очень сложный протокол.Эта статья лишь вкратце представляет небольшую часть знаний из-за недостатка места и не представляет tcp подробно.Если у вас есть дополнительные сомнения, пожалуйста, оставьте сообщение для обсуждения.