В интервью был задан вопрос: Как использовать UDP для реализации TCP?

задняя часть
В интервью был задан вопрос: Как использовать UDP для реализации TCP?

задний план

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

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

Легко заметить разницу или две между TCP и UDP, если вы хорошо выглядите, но что, если вы можете сказать это так, чтобы ваша девушка могла понять?

Подруга: Я не хочу слушать, что написано в учебнике! я не понимаю~

Ниже я отвечу на поставленные выше вопросы в народной форме.

Особенности УДП

UDP напоминает мне о времени, когда я только что закончил работать, выпускник-новичок.

  • простое общение

Задача, поставленная руководителем, выполняется непосредственно.

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

  • доверчивый

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

UDP тоже есть, он не установит соединение, есть номер порта, любой может прослушать этот номер порта и отправить на него данные. Данные также могут быть переданы кому угодно с этого номера порта. Во всяком случае, я просто публикую это.

  • не буду торговаться

Менеджер по продукту вчера сказал, что корпус телефона должен менять цвет в зависимости от настроения, а тестер сказал, что эту ошибку нужно исправить вместе с двумя связанными ошибками. Тогда делай, как они говорят!

UDP тоже не понимает настойчивости и уступок. То есть управление перегрузкой выполняется в соответствии с условиями сети. Неважно, насколько серьезна потеря сетевого пакета, я все равно его отправляю~

Сценарии использования UDP

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

  • Внутренняя система имеет простые задачи и один модуль, и ей не нужно учитывать связанное с этим влияние кода, даже если он выйдет из строя, это не имеет значения.

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

  • Существует сильная поддержка команды, все из которых — средние и старшие разработчики и тестировщики, члены команды имеют дело друг с другом на протяжении многих лет и доверяют друг другу. Если есть какие-либо проблемы, просто кричите!

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

  • Новый проект требует страсти.Для новичков, которые только что закончили, у них есть сильная самостоятельность и инициатива, и они не будут шалить, прятаться в туалете, играть с мобильными телефонами и получать деньги? Даже если проект не загружен, я тоже спешу его сделать. Проект загружен, продолжайте в том же духе!

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

В приведенных выше трех сценариях UDP обычно используется в соревновательных играх в реальном времени, IoT и мобильной связи.

Характеристики ПТС?

  • ориентированный на соединение

TCP и UDP — два важных протокола на транспортном уровне. В большинстве интервью спросят о разнице между ними. Большинство из них состоят из двух предложений, например, TCP подключается первым, а UDP не подключается.

Так что же такое ориентированное на соединение?

Трехстороннее рукопожатие TCP — это то, о чем мы часто говорим и повторяем. После успешного трехэтапного рукопожатия соединение устанавливается успешно.

как это называетсяориентированныйШерстяная ткань?

Мы также часто слышим об объектно-ориентированном программировании, аспектно-ориентированном программировании и сервис-ориентированном программировании. Так что же такое ориентация?

На мой взгляд, ориентирование — это следовать определенному протоколу, спецификации, структуре данных и т. д., чтобы выполнять ряд действий.

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

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

Что делает TCP, ориентированный на соединение?

TCP обеспечивает надежную доставку, при которой данные, передаваемые по TCP-соединению, поступают без ошибок, без потерь, без дублирования и по порядку. UDP, с другой стороны, наследует характеристики IP-пакетов и не гарантирует, что они не будут потеряны или будут доставлены по порядку.

  • байтовый поток

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

UDP основан на дейтаграммах IP, которые отправляются одна за другой и принимаются одна за другой.

  • контроль перегрузки

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

UDP уже не такой умный.Вы дайте мне его отправить, и я его отправлю.В любом случае, вы попросили меня отправить его, а остальное будет проигнорировано~

  • служба с отслеживанием состояния

TCP — stateful сервис, состояние можно понимать так: я записал, какие отправлены, какие не отправлены, какие получены, какие не получены, какие должны быть получены, и ошибки вообще не было. . Есть так много вещей, которые делает TCP!

UDP не stateful сервис, я его просто отправляю, а остальное оставляю принимающей стороне Это немного капризно, правда?

Как заставить UDP реализовать функцию TCP?

Установление соединения было упомянуто выше, трехстороннее рукопожатие и четырехстороннее рукопожатие, UDP также может быть смоделирован.

Тогда есть еще несколько вопросов:

  • проблема последовательности
  • проблема с потерей пакетов
  • управление потоком
  • контроль перегрузки

Структура данных TCP выглядит следующим образом: 在这里插入图片描述

На самом деле, если вы можете ясно объяснить эти структуры, вы уже поняли основные функции TCP.

Ниже я буду использовать народный способ, чтобы объяснить вышеупомянутые четыре вопроса.

проблема последовательностиа такжепроблема с потерей пакетовМожет использоваться механизм подтверждения и повторной передачи.

Если пакет получен, вы можете сделать подтверждение и отправить ACK отправителю, чтобы сообщить ему, что я его получил. Если некоторые пакеты приходят раньше, они кэшируются. Если пакет потерян, он может повторить попытку через какое-то время. Повторная попытка тайм-аута не должна быть слишком короткой, и это время должно быть больше, чем время приема-передачи RTT, иначе это вызовет ненужную повторную передачу. Он не должен быть слишком длинным, если время ожидания слишком велико, доступ будет медленнее. Затем, как определить это время, вы можете выполнить средневзвешенное значение, замерив время RTT. Он также должен динамически изменяться в соответствии с условиями сети. Узнайте об адаптивном алгоритме повторной передачи.

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

ПТСконтроль перегрузкиЭто в основном используется для предотвращения потери пакетов и повторной передачи по тайм-ауту.Если происходят эти два явления, это означает, что скорость отправки слишком высока. Так как же узнать скорость отправки? Фактически вначале отправляются данные только одного сегмента, если получено подтверждение, то сегмент удваивается и т.д. Когда обнаруживается, что тайм-аут передается повторно, он возвращается к ситуации, когда отправляется только один сегмент, что является медленным стартом, и этот метод не подходит. На самом деле есть еще и алгоритм быстрой ретрансляции, говоря простым языком, окно перегрузки уменьшается вдвое и достигается последующий линейный рост скорости. Что касается того, как реализован алгоритм, то здесь описывать его не будем.在这里插入图片描述 在这里插入图片描述

До сих пор я объяснял разницу между UDP и TCP на просторечии, а также то, какой функции не хватает UDP, и как это компенсировать, чтобы реализовать функцию TCP. Я считаю, что идея ответить таким образом может заставить интервьюера почувствовать, что что-то еще есть.

Плечи великанов:

«Интересный сетевой протокол»

"компьютерная сеть"