Базовые знания UDP, над которыми я работал неделю, наконец-то вышли

задняя часть внешний интерфейс
Базовые знания UDP, над которыми я работал неделю, наконец-то вышли

Я скомпилировал свои предыдущие статьи на Github, приветствую всех в звездахGitHub.com/Next Day Picks/Не голоден…Отправила эту статью

运输层Расположенный между прикладным и сетевым уровнями, он является четвертым уровнем многоуровневой системы OSI и важной частью сетевой архитектуры. Транспортный уровень в первую очередь отвечает за сквозную связь в сети.

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

Обзор транспортного уровня

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

В процессе транспортировки пакетов на транспортном уровне соблюдаются определенные спецификации протокола, такие как лимит данных для одной передачи и выбор транспортного протокола. Транспортный уровень позволяет двум несвязанным узлам逻辑通信Похоже, он соединяет два хоста.

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

Как TCP определяет, какой это порт?

Помните структуру пакета данных, вот обзор

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

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

На стороне отправителя транспортный уровень переводит пакеты, полученные от прикладного процесса-отправителя, на транспортный уровень.分组, группировка также называется в компьютерной сети报文段(segment). Транспортный уровень обычно делит сегмент на более мелкие фрагменты, добавляет заголовок транспортного уровня к каждому фрагменту и отправляет его в пункт назначения.

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

Предварительные требования TCP и UDP

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

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

UDP называется用户数据报协议(UDP,User Datagram Protocol), как видно из названия, UDP фокусируется на дейтаграммах, что предоставляет прикладному уровню способ отправлять дейтаграммы напрямую, без установления соединения.

Почему термины в компьютерной сети описывают так много данных?

В компьютерной сети существуют разные описания между разными уровнями. Выше мы упоминали, что группировка транспортного уровня называется сегментом.Кроме того, группировка в TCP также называется сегментом.Однако группировка UDP называется дейтаграммой, а сетевой уровень также называется сегментом. называются дейтаграммами

Но для унификации, как правило, в компьютерной сети мы собирательно называем пакеты TCP и UDP как报文段, это эквивалентно соглашению, и не нужно слишком беспокоиться о том, как его вызывать.

разъем

Прежде чем TCP или UDP отправит определенную информацию о сообщении, он должен пройти через вентилятор., дверь есть套接字(socket), сокет подключен к прикладному уровню и к сетевому уровню. В операционной системе операционная система предоставляет приложения и оборудование соответственно.接口(Application Programming Interface). В компьютерной сети сокет также является интерфейсом, и он также имеет API интерфейса.

При использовании связи TCP или UDP широко используется API сокетов, и этот API используется для установки IP-адреса и номера порта для отправки и получения данных.

Теперь мы знаем, что между Socket и TCP/IP нет необходимой связи, появление Socket просто для облегчения использования TCP/IP, как им удобно пользоваться? Вы можете напрямую использовать эти методы Socket API ниже.

метод описывать
create() создать сокет
bind() Идентификатор сокета, обычно используемый для привязки номера порта
listen() готовы принимать соединения
connect() готов выступить в качестве отправителя
accept() готов стать получателем
write() отправить данные
read() Получить данные
close() закрыть соединение

тип розетки

Существует три основных типа сокетов, давайте представим их отдельно.

  • 数据报套接字(Datagram sockets): сокеты дейтаграмм обеспечивают无连接службы, и надежность передачи данных не может быть гарантирована. Данные могут быть потеряны или продублированы во время передачи, и нет гарантии, что данные будут получены в порядке. Использование сокета дейтаграммыUDP( User DatagramProtocol)协议Осуществить передачу данных. Поскольку дейтаграммный сокет не может гарантировать надежность передачи данных, необходимо бороться с возможной потерей данных в программе.
  • 流套接字(Stream sockets): Потоковые сокеты используются для предоставления ориентированных на соединение надежных услуг передачи данных. Это может обеспечить надежность и порядок данных. Причина, по которой потоковые сокеты могут предоставлять надежные услуги передачи данных, заключается в том, что они используют протокол управления передачей, которыйTCP(The Transmission Control Protocol)协议
  • 原始套接字(Raw sockets): необработанные сокеты позволяют отправлять и получать IP-пакеты напрямую без какого-либо формата транспортного уровня, специфичного для протокола, необработанные сокеты могут читать и записывать IP-пакеты, которые не были обработаны ядром.

обработка сокетов

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

  1. API в сокете используется для создания конечной точки в канале связи.После завершения создания он возвращает описание сокета.套接字描述符.

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

  1. Когда приложение имеет дескриптор сокета, оно может привязать к сокету уникальное имя, сервер должен привязать имя, чтобы быть доступным в сети.
  2. API прослушивания будет вызываться после того, как серверу будет назначен сокет, и имя будет привязано к сокету.listenУказывает на готовность клиента ждать соединения, перед принятием API необходимо вызвать listen.
  3. Клиентское приложение вызывает потоковый сокет (на основе TCP)connectИнициировать запрос на подключение к серверу.
  4. использование серверного приложенияacceptAPI принимает запросы на подключение от клиентов. Сервер должен успешно вызвать привязку и прослушивание перед вызовом accept api.
  5. Как только соединение между потоковыми сокетами установлено, клиент и сервер могут инициировать вызовы API чтения/записи.
  6. Когда сервер или клиент хочет остановить операцию, она вызываетсяcloseAPI освобождает все системные ресурсы, полученные сокетом.

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

Прежде чем продолжить общение, давайте разыграем небольшой эпизод и кратко поговорим об IP.

болтать об IP

IPдаInternet Protocol(网际互连协议)Аббревиатура для системы TCP/IP网络层протокол. Первоначальная цель разработки IP в основном состоит в том, чтобы решить два типа проблем.

  • Улучшите масштабируемость сети: обеспечьте крупномасштабное сетевое взаимодействие
  • Разделение прикладного уровня и уровня ссылок, чтобы позволить им развиваться независимо.

IP является ядром всего набора протоколов TCP/IP и основой Интернета. Чтобы реализовать взаимосвязь крупномасштабных сетей, IP уделяет больше внимания адаптируемости, простоте и работоспособности и приносит определенные жертвы в плане надежности. IP не гарантирует пакетСроки доставки и надежность, передаваемый пакет может появитьсяУтеряны, дублированы, задержаны или вышли из строяИ другие вопросы.

Мы знаем, что следующим уровнем протокола TCP является уровень протокола IP.Поскольку IP ненадежен, как гарантировать, что данные будут поступать точно и без ошибок?

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

Номер порта

Прежде чем говорить о номере порта, давайте поговорим об описании файла и связи между сокетом и номером порта.

Чтобы облегчить использование ресурсов, улучшить производительность, использование и стабильность машины и т. д., наш компьютер имеет слой программного обеспечения, называемого операционной системой, который помогает нам управлять ресурсами, которые может использовать компьютер. Когда наша программа хочет использовать Когда требуются ресурсы, мы можем обратиться к операционной системе, и тогда операционная система выделяет ресурсы для наших программ и управляет ими. Обычно, когда мы хотим получить доступ к устройству или файлу ядра, программа может вызвать системную функцию, система откроет для нас устройство или файл, а затем вернет дескриптор файла fd (или идентификатор, который является целым числом), который мы хотим для доступа к устройству или файлу только через этот файловый дескриптор. Это число можно рассматривать как соответствующее открытому файлу или устройству.

Когда наша программа хочет использовать сеть, ей необходимо использовать соответствующую операцию ядра операционной системы и устройство сетевой карты, чтобы мы могли обратиться к операционной системе, а затем система создаст для нас сокет и вернет идентификатор сокета. , в дальнейшем, если наша программа захочет использовать сетевые ресурсы, нам нужно оперировать только ID этого Socket. И каждый из наших сетевых коммуникационных процессов соответствует хотя бы одному сокету. Запись данных в Socket ID эквивалентна отправке данных в сеть, а чтение данных в Socket эквивалентно получению данных. И эти сокеты имеют уникальный идентификатор — файловый дескриптор fd.

номер порта16Неотрицательное целое число битов в диапазоне от 0 до 65535, которое разделено на три разных диапазона номеров портов, назначенных Управлением по присвоению номеров в Интернете IANA.

  • Общеизвестный/стандартный номер порта, он находится в диапазоне от 0 до 1023.
  • Зарегистрируйте номер порта, диапазон 1024 - 49151
  • Номер частного порта в диапазоне 49152 - 6553

На компьютере может работать несколько приложений Когда сегмент поступает на хост, какому приложению его следует передать? Откуда вы знаете, что этот сегмент передается на HTTP-сервер, а не на SSH-сервер?

Это по номеру порта? Когда сообщение поступает на сервер, это номер порта, чтобы различать разные приложения, поэтому его следует различать по номеру порта.

Например, чтобы опровергнуть cxuan, как отличить два данных, поступающих на сервер с 80-го порта? Другими словами, два порта данных, поступающих на сервер, одинаковы, но протоколы разные, как их отличить?

Поэтому явно недостаточно определить конкретный пакет только по номеру порта.

Общее использование в ИнтернетеIP-адрес источника, IP-адрес назначения, номер порта источника, номер порта назначенияотличить. Если один из них отличается, он считается другим сегментом. это тоже多路分解和多路复用Основы.

Определяем номер порта

Перед фактической связью вам необходимо сначала определить номер порта.Есть два способа определить номер порта:

  • Стандартный установленный номер порта

Стандартный установленный номер порта назначается статически, каждая программа будет иметь свой собственный номер порта, и каждый номер порта имеет свое назначение. Номер порта представляет собой 16-битное число размером от 0 до 65535. Номера портов в диапазоне от 0 до 1023 — это динамически назначаемые номера портов.Например, HTTP использует для идентификации порт 80, а FTP использует для идентификации порт 21. SSH использует 22 для идентификации. Эти номера портов имеют специальное имя, называемое周知端口号(Well-Known Port Number).

  • Номер порта, назначенный по времени

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

Мультиплексирование и демультиплексирование

Выше мы говорили, что каждому сокету на хосте присваивается номер порта.Когда сегмент приходит на хост, транспортный уровень проверяет номер порта назначения в сегменте и направляет его в соответствующий сокет., а затем данные в сегменте входит в процесс, к которому он подключен через сокет. Поговорим о понятиях мультиплексирования и демультиплексирования.

Существует два типа мультиплексирования и демультиплексирования, а именно:无连接Мультиплексирование (демультиплексирование) и面向连接мультиплексирование (демультиплексирование)

Мультиплексирование и демультиплексирование без установления соединения

Разработчик пишет код, чтобы определить, является ли номер порта общеизвестным номером порта или номером порта, назначенным временным рядом. Если порт 10637 на узле A хочет отправить данные на порт 45438 на узле B, транспортный уровень используетUDPпротокол, после того, как данные сгенерированы на прикладном уровне, они будут обработаны на транспортном уровне, а затем данные будут инкапсулированы на сетевом уровне для получения IP-датаграмм.Номер порта в сегменте сообщения определяет, к какому сокету он принадлежит. , Эта серия процессов выглядит следующим образом

Сокет UDP представляет собой двойку, содержащую IP-адрес назначения и номер порта назначения.

Таким образом, если два сегмента UDP имеют разные IP-адреса источника и/или один и тот же номер порта источника, но одинаковые IP-адрес назначения и номер порта назначения, то два пакета будут адресованы одному и тому же через процесс назначения сокета.

Вот вопрос для рассмотрения, хост A отправляет сообщение хосту B, зачем вам знать номер исходного порта? Например, если я передаю девушке сообщение о том, что ты мне интересен, нужно ли девушке еще знать, какой мой орган посылает это сообщение? Разве ты не знаешь, что это я интересуюсь тобой? На самом деле это необходимо, потому что если девушка хочет выразить, что вы ей интересны, она, скорее всего, поцелует вас, поэтому она должна знать, куда целовать?

То есть в сегменте от A до B номер исходного порта будет использоваться как返回地址часть , то есть, когда B должен отправить сегмент обратно в A, B должен получить значение из номера исходного порта в A в B, как показано на следующем рисунке.

Мультиплексирование и демультиплексирование с установлением соединения

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

На приведенном выше рисунке показан процесс мультиплексирования и демультиплексирования с установлением соединения.На этом рисунке узел C инициирует два HTTP-запроса к узлу B, а узел A инициирует HTTP-запрос к узлу C. У него есть собственный уникальный IP-адрес. отправляет HTTP-запрос, хост B может разложить два HTTP-соединения, потому что два исходных номера порта запроса, отправленного хостом C, различны, поэтому для хоста B это два запроса, хост B может разложить. Для хоста A и хоста C два хоста имеют разные IP-адреса, поэтому для хоста B это также может быть разрешено.

UDP

Наконец-то мы начали обсуждать протокол UDP, поехали!

Полное название UDP用户数据报协议(UDP,User Datagram Protocol), UDP предоставляет приложениям无需建立连接способ отправки инкапсулированных IP-пакетов. Если разработчик приложения выбирает UDP вместо TCP, то приложение имеет дело непосредственно с IP.

Данные, переданные из приложения, будут дополнены полями номера порта источника и получателя для мультиплексирования/демультиплексирования, а также другими полями, а затем результирующее сообщение будет передано на сетевой уровень, который отправит сегмент транспортного уровня. инкапсулируется в дейтаграмму IP и доставляется целевому хосту по мере возможности. Наиболее важным моментом является то, что когда дейтаграмма доставляется на целевой хост с использованием протокола UDP, связь между объектами транспортного уровня отправителя и получателя отсутствует.握手из. Из-за этого UDP известен как无连接соглашение.

Возможности UDP

Протокол UDP обычно используется в качестве протокола транспортного уровня для приложений потокового мультимедиа, голосовой связи и видеоконференций.Все мы знаем, что нижний уровень протокола DNS также использует протокол UDP.Эти приложения или протоколы выбирают UDP в основном из-за следующие пункты

  • 速度快, При использовании протокола UDP, пока процесс приложения передает данные в UDP, UDP упаковывает данные в сегмент UDP и немедленно передает их на сетевой уровень, а затем TCP имеет функцию контроля перегрузки, он оценивает Интернет до Перегрузка, если Интернет сильно перегружен, то TCP-отправитель тормозится. Цель использования UDP — надеяться на работу в реальном времени.
  • 无须建立连接, TCP должен пройти операцию трехэтапного установления связи перед передачей данных, в то время как UDP может выполнять передачу данных без какой-либо подготовки. Таким образом, UDP не имеет задержки для установления соединения. Если использовать TCP и UDP как метафору для разработчиков: TCP — это такой инженер, которому нужно все хорошо спроектировать, а без дизайна он не может развиваться, ему нужно учесть все факторы перед началом! так очень靠谱; а UDP - это такая непосредственная работа, которая возникает, и начинает работу сразу после получения требований к проекту, независимо от дизайна или технического выбора, просто работа, такой тип разработчика очень不靠谱, но подходит для быстрой итеративной разработки, потому что можно сразу приступить к работе!
  • 无连接状态, TCP необходимо поддерживать в конечной системе连接状态, состояние соединения включает буферы приема и отправки, параметры управления перегрузкой и параметры порядковых номеров и номеров подтверждения, которые недоступны в UDP, а также буферы отправки и приема. Таким образом, некоторые серверы, предназначенные для определенного приложения, обычно могут поддерживать более активных пользователей, когда приложение работает по протоколу UDP.
  • 分组首部开销小, каждый сегмент TCP имеет 20 байтов служебных данных заголовка, в то время как UDP имеет только 8 байтов служебных данных.

Здесь следует отметить, что не все прикладные уровни, использующие протокол UDP,不可靠Да, приложения могут сами реализовать надежную передачу данных, добавив механизмы подтверждения и повторной передачи. Поэтому самой большой особенностью использования протокола UDP является скорость.

Структура UDP-пакета

Давайте посмотрим на структуру пакета UDP.Каждый пакет UDP делится на две части: заголовок UDP и область данных UDP. Заголовок состоит из четырех 16-битных (2 байта) полей, которые соответственно описывают исходный порт, порт назначения, длину пакета и контрольное значение пакета.

  • 源端口号(Source Port): это поле занимает первые 16 бит заголовка пакета UDP и обычно содержит порт UDP, используемый приложением, отправляющим дейтаграмму. Принимающее приложение использует значение этого поля в качестве адреса назначения для отправки ответа. Это поле является необязательным, и иногда номер исходного порта не указывается. По умолчанию используется значение 0 без номера исходного порта, обычно используемое при обмене данными, не требующем ответного сообщения.
  • 目标端口号(Destination Port): указывает принимающий порт, длина поля 16 бит.
  • 长度(Length): Это поле занимает 16 бит и указывает длину дейтаграммы UDP, включая заголовок UDP и длину дейтаграммы UDP. Поскольку длина заголовка пакета UDP составляет 8 байт, минимальное значение — 8, а максимальная длина — 65 535 байт.
  • 校验和(Checksum): UDP использует контрольную сумму для обеспечения безопасности данных, контрольная сумма UDP также обеспечивает функцию обнаружения ошибок, обнаружение ошибок используется для проверки того, изменилась ли целостность данных в процессе передачи сегмента сообщения от источника к целевому хосту. UDP отправителя выполняет операцию дополнения к сумме 16-битных слов в сегменте сообщения, и переполнение битов, обнаруженное во время суммирования, будет игнорироваться.Например, в следующем примере добавляются три 16-битных числа.

Первые две суммы этих 16 бит равны

Затем добавьте приведенный выше результат к третьему 16-битному числу.

Последний добавленный бит будет переполнен, бит переполнения 1 будет отброшен, а затем будет выполнена операция дополнения, которая заменяет все 1 на 0 и 0 на 1. следовательно1000 0100 1001 0101Обратный код0111 1011 0110 1010, это и есть контрольная сумма.Если в данных на приемнике нет ошибки, то вычисляются все четыре 16-битных значения, включая контрольную сумму.Если окончательный результат не 1111 1111 1111 1111, то Указывает, что есть ошибка в данных при передаче.

Давайте подумаем над вопросом, почему в UDP предусмотрена функция обнаружения ошибок?

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

файл с хостаAхозяинуB, то естьABЧтобы хост общался, ему нужно пройти по трем ссылкам: первая — это хостAЧтение файлов с диска и группировка данных в пакетыpacket,, то пакет проходит через подключающийся хостAи хозяинBпередача по сети на хостB, и, наконец, хозяинBПолучите пакет и запишите его на диск. В этом, казалось бы, простом, но сложном процессе нормальная коммуникация может быть нарушена по некоторым причинам. Например, ошибки чтения и записи файлов на диск, переполнение буфера, ошибки памяти, перегрузка сети и т. д. могут вызвать ошибки или потерю пакетов данных, что свидетельствует о ненадежности используемой для связи сети.

Так как для реализации связи нужно пройти только по трем вышеуказанным ссылкам, то мы хотим добавить к одной из ссылок механизм обнаружения и исправления ошибок для проверки информации?

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

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

Кроме того, cxuan сохранил шесть PDF-файлов, и официальный аккаунт отвечает cxuan, чтобы получить все PDF-файлы автора..

Вы также можете получить его по ссылке ниже

Ссылка на сайт:disk.baidu.com/is/1my AES9Hi…Пароль: p9rs