введение
Сетевые протоколы — это знание, которым должен овладеть каждый фронтенд-инженер.В TCP/IP есть два репрезентативных протокола транспортного уровня, а именно TCP и UDP.Эта статья познакомит вас с ними и различиями между ними.
Чтобы прочитать больше качественных статей, нажмитеБлог GitHub
1. Модель сети TCP/IP
Чтобы компьютеры и сетевые устройства могли взаимодействовать друг с другом, они должны быть основаны на одном и том же методе. Например, такие правила, как определение цели коммуникации, какая сторона инициирует коммуникацию первой, какой язык используется для коммуникации и как завершить коммуникацию, должны быть определены заранее. Связь между разным оборудованием, операционными системами, все это требует дисциплины. И мы называем это правило протоколом.
TCP/IP — это общий термин для различных семейств протоколов, связанных с Интернетом, таких как: TCP, UDP, IP, FTP, HTTP, ICMP, SMTP и т. д., которые принадлежат к семейству протоколов TCP/IP.
Модель TCP/IP является основой Интернета и представляет собой общий термин для ряда сетевых протоколов. Эти протоколы можно разделить на четыре уровня, а именно канальный уровень, сетевой уровень, транспортный уровень и прикладной уровень.
- Канальный уровень: отвечает за инкапсуляцию и декапсуляцию IP-пакетов, отправку и получение пакетов ARP/RARP и т. д.
- Сетевой уровень: отвечает за маршрутизацию и отправку пакетов в целевую сеть или хост.
- Транспортный уровень: отвечает за группировку и повторную сборку сообщений, а также за инкапсуляцию сообщений в формате протокола TCP или UDP.
- Уровень приложений: отвечает за предоставление пользователям приложений, таких как HTTP, FTP, Telnet, DNS, SMTP и т. д.
2. УДП
Полное название протокола UDP — протокол пользовательских дейтаграмм.Он используется для обработки пакетов данных в той же сети, что и протокол TCP, и является протоколом без установления соединения. В модели OSI четвертый уровень, транспортный уровень, является верхним уровнем протокола IP. Недостаток UDP заключается в том, что он не обеспечивает группировку, сборку и сортировку пакетов, то есть когда пакет отправляется, невозможно узнать, дошел ли он безопасно и полностью.
Он имеет следующие особенности:
1. К тем, у кого нет связи
Прежде всего, UDP не нужно выполнять трехэтапное рукопожатие, чтобы установить соединение, как TCP, перед отправкой данных.Если вы хотите отправить данные, вы можете начать отправку. И это только портер пакетов данных, и он не будет выполнять какие-либо операции разделения и объединения пакетов данных.
Конкретно:
- На стороне отправителя прикладной уровень передает данные протоколу UDP транспортного уровня. UDP только добавит заголовок UDP к данным для идентификации протокола UDP, а затем передаст его на сетевой уровень.
- На принимающей стороне сетевой уровень передает данные на транспортный уровень, а UDP только удаляет заголовок IP и передает его на прикладной уровень без какой-либо операции сплайсинга.
2. Существуют функции одноадресной, многоадресной и широковещательной передачи.
UDP поддерживает не только режим передачи «один к одному», но также поддерживает режимы «один ко многим», «многие ко многим» и «многие к одному», то есть UDP обеспечивает функции одноадресной, многоадресной и широковещательной передачи.
3. UDP ориентирован на сообщения
UDP отправителя отправляет сообщение приложению, а затем доставляет его на уровень IP после добавления заголовка. UDP не объединяет и не разделяет пакеты, доставленные прикладным уровнем, а сохраняет границы этих пакетов. Поэтому приложение должно выбрать подходящий размер сообщения
4. Ненадежность
В первую очередь ненадежность выражается в отсутствии соединения.Сообщению не нужно устанавливать соединение, и оно может быть отправлено, как только захочет.Эта ситуация определенно ненадежна.
И полученные данные будут переданы, и данные не будут скопированы, и данные не будут отправлены другой стороне, не заботясь о том, правильно ли другая сторона получила данные.
Кроме того, сетевое окружение бывает хорошим и плохим, но UDP всегда будет отправлять данные с постоянной скоростью, потому что контроль перегрузки отсутствует. Даже если сетевые условия плохие, скорость отправки не будет скорректирована. Недостатком этой реализации является то, что это может привести к потере пакетов в случае плохих условий сети, но преимущества также очевидны.В некоторых сценариях с высокими требованиями к реальному времени (например, телеконференциях) необходимо использовать UDP вместо TCP. использовал.
Как видно из приведенной выше динамической диаграммы, UDP будет отбрасывать только те пакеты данных, которые он хочет отправить другой стороне, и ему все равно, будут ли данные доставлены в целости и сохранности.5. Заголовок невелик, и передача пакетов данных очень эффективна.
Заголовок UDP содержит следующие данные:- Два шестнадцатизначных номера порта, которые являются исходным портом (необязательное поле) и портом назначения.
- Длина всей дейтаграммы
- Контрольная сумма всей дейтаграммы (необязательное поле IPv4), используемая для обнаружения ошибок в информации заголовка и данных.
Таким образом, заголовок заголовка UDP невелик, всего восемь байтов, что намного меньше, чем по крайней мере двадцать байтов TCP, и он очень эффективен при передаче пакетов данных.
3. ПТС
Когда один компьютер хочет связаться с другим компьютером, связь между двумя компьютерами должна быть гладкой и надежной, чтобы обеспечить правильную отправку и получение данных. Например, когда вы хотите просмотреть веб-страницу или проверить электронную почту, вы хотите увидеть веб-страницу целиком и по порядку без потери содержимого. Когда вы загружаете файл, вы хотите получить полный файл, а не только часть файла, потому что, если данные потеряны или не в порядке, это не то, что вам нужно, поэтому используется TCP.
Полное имя протокола TCP — протокол управления передачей, который представляет собой ориентированный на соединение, надежный протокол связи на транспортном уровне на основе потока байтов, определенный в RFC 793 IETF. TCP — это надежный протокол потоковой передачи, ориентированный на соединение. Поток — это непрерывная структура данных, и вы можете думать о нем как о потоке воды в канализацию.
Процесс подключения 1.TCP
Как показано на рисунке ниже, вы можете видеть, что процесс установления TCP-соединения (процесс трехэтапного рукопожатия):
первое рукопожатие
Клиент отправляет сегмент запроса на соединение на сервер. Этот сегмент содержит свой собственный начальный порядковый номер для передачи данных. После отправки запроса клиент переходит в состояние SYN-SENT.
второе рукопожатие
После того, как сервер получит сегмент запроса на соединение, если он согласится на соединение, он отправит ответ, и ответ также будет содержать свой собственный начальный порядковый номер передачи данных.После завершения передачи он войдет в состояние SYN-RECEIVED.
третье рукопожатие
Когда клиент получает ответ о согласии на подключение, он также отправляет подтверждающее сообщение на сервер. После того, как клиент отправляет этот сегмент, он переходит в состояние ESTABLISHED, в состояние ESTABLISHED входит и сервер после получения ответа, в это время соединение успешно установлено.
Здесь у нас может возникнуть больше сомнений: почему для установления TCP-соединения требуется трехстороннее рукопожатие, а не двукратное? Это связано с тем, что он подключен для предотвращения случая, когда сбой в сообщении запроса, полученном сегментом сервера, должен генерировать ошибку.
2. Отключение TCP
TCP является полнодуплексным, и оба конца должны отправлять FIN и ACK при отключении.первое рукопожатие
Если клиент А считает, что передача данных завершена, ему необходимо отправить запрос на освобождение соединения на сервер Б.
второе рукопожатие
После того, как B получит запрос на освобождение соединения, он сообщит прикладному уровню о необходимости освободить TCP-соединение. Затем он отправит пакет ACK и войдет в состояние CLOSE_WAIT, которое указывает на то, что соединение между A и B было разорвано, и данные, отправленные A, больше не принимаются. Но поскольку TCP-соединение является двунаправленным, B все равно может отправлять данные в A.
третье рукопожатие
Если в это время у B все еще есть незаконченные данные, он продолжит отправку, а после завершения отправит запрос на освобождение соединения на A, а затем B войдет в состояние LAST-ACK.
четвертое рукопожатие
После получения запроса на освобождение A отправляет ответ с подтверждением B, и в это время A переходит в состояние TIME-WAIT. Это состояние будет длиться 2MSL (максимальное время жизни сегмента, которое относится к времени, в течение которого сегмент сообщения сохраняется в сети, и тайм-аут будет отброшен). ЗАКРЫТОЕ состояние. Когда B получает подтверждение, он также переходит в состояние CLOSED.
3. Характеристики протокола TCP
- ориентированный на соединение
Ориентированность на соединение означает, что соединение должно быть установлено на обоих концах перед отправкой данных. Способ установления соединения — «трехстороннее рукопожатие», позволяющее установить надежное соединение. Установление соединения закладывает основу для надежной передачи данных.
- Поддерживает только одноадресную передачу
Каждое соединение передачи TCP может иметь только две конечные точки, только передачу данных «точка-точка» и не поддерживает методы многоадресной и широковещательной передачи.
- байтовый поток
В отличие от UDP, TCP не передает пакеты самостоятельно, а передает их потоком байтов без сохранения границ пакета.
- надежная передача
Для надежной передачи оценка потери пакетов и битовых ошибок зависит от номера сегмента TCP и номера подтверждения. Чтобы обеспечить надежность передачи сообщений, TCP присваивает каждому пакету порядковый номер, а порядковый номер также обеспечивает упорядоченный прием пакетов, передаваемых принимающему объекту. Затем объект-получатель отправляет обратно соответствующее подтверждение (ACK) для успешно полученных байтов; если объект-отправитель не получает подтверждение в течение разумной задержки приема-передачи (RTT), то соответствующие данные (при условии, что они потеряны) будут переданы повторно.
- Обеспечить контроль заторов
Когда сеть перегружена, TCP может снизить скорость и объем данных, вводимых в сеть, и уменьшить перегрузку.
- TCP обеспечивает полнодуплексную связь
TCP позволяет приложениям на обеих сторонах связи отправлять данные в любое время, поскольку обе стороны TCP-соединения имеют буферы для временного хранения данных для двунаправленной связи. Конечно, TCP может отправить сегмент немедленно или буферизовать его на некоторое время, чтобы отправить больше сегментов одновременно (максимальный размер сегмента зависит от MSS).
В-четвертых, сравнение TCP и UDP
1. Контраст
UDP | TCP | |
---|---|---|
подключаться ли | Нет соединения | ориентированный на соединение |
Это надежно | Ненадежная передача, не используются управление потоком и контроль перегрузки | Надежная передача с использованием управления потоком и контролем перегрузки |
Количество объектов подключения | Поддержка интерактивного общения «один к одному», «один ко многим», «многие к одному» и «многие ко многим». | общение только один на один |
способ передачи | ориентированный на сообщение | байтовый поток |
Сначала над головой | Заголовок небольшой, всего 8 байт. | Заголовок минимум 20 байт, максимум 60 байт |
Применимая сцена | Идеально подходит для приложений реального времени (IP-телефония, видеоконференции, прямые трансляции и т. д.) | Идеально подходит для приложений, требующих надежной передачи, таких как передача файлов |
2. Резюме
- TCP предоставляет надежные услуги с установлением соединения для верхних уровней, а UDP предоставляет ненадежные службы без установления соединения для верхних уровней.
- Хотя UDP не так точен, как TCP, он также может иметь значение во многих местах с высокими требованиями к реальному времени.
- Для высоких требований к точности данных скорость может быть относительно низкой, вы можете выбрать TCP
Порекомендуйте полезный инструмент мониторинга ошибок для всехFundebug, добро пожаловать, чтобы попробовать это бесплатно!
Добро пожаловать в публичный аккаунт:Мастер по фронтенду, мы будем свидетелями вашего роста вместе! Если вы чувствуете, что что-то приобрели, пожалуйста, дайте мне вознаграждение, чтобы мотивировать меня выпускать больше высококачественного контента с открытым исходным кодом.