6. Протокол UDP
UDP является одним из 2 основных протоколов, используемых поверх IP. Этот протокол предоставляет свой сервис пользовательским сетевым программам. Примерами сетевых приложений на базе протокола UDP являются NFS (Network File System — сетевая файловая система) и SNMP (Simple Network Management Protocol — простой протокол управления сетью).
UDP обеспечивает сервис по доставке дейтаграмм (datagram) без организации соединений (connectionless) и гарантий доставки. Протокол UDP не организует сквозных (end-to-end) соединений с удаленными модулями UDP, он просто передает дейтаграммы в сеть и принимает их из сети.
UDP добавляет две новых услуги к тем, что предоставляются протоколом IP. Первой является мультиплексирование информации между приложениями по номерам портов, а второй — поддержка проверки целостности пакетов с помощью контрольных сумм.
6.1. Порты
Как клиентская программа на одном компьютере может связаться с сервером на другом компьютере?
Связь между приложениями и UDP осуществляется через порты UDP, задаваемые номерами (с нуля). Программа, которая предлагает свои услуги (сервер), ждет сообщений, адресованных в порт, выделенный для этого сервиса. Серверы терпеливо ждут любых запросов от клиентов.
Например, сервер SNMP (их называют агентами SNMP) всегда слушает порт 161. На компьютере может использоваться только один агент SNMP, поскольку для такого сервиса выделяется единственный порт UDP. Номер этого порта известен другим приложениям (well known) и клиенты SNMP, желающие прибегнуть к услугам агента, адресуют свои запросы в порт 161 по протоколу UDP на интересующем их компьютере.
Когда приложение передает данные с помощью UDP, эти данные приходят удаленному адресату в едином блоке. Например, если программа делает 5 записей в порт UDP, программа на удаленной стороне будет 5 раз выполнять операцию чтения из порта UDP. Размеры записываемых в порт блоков данных также совпадают с размерами читаемых из порта блоков.
UDP сохраняет границы сообщений, заданные приложениями, протокол никогда не объединяет сообщения и не делит их на части.
6.2. Контрольная сумма
Когда принимаемый пакет IP содержит в поле типа значение UDP, такой пакет передается модулю UDP. Когда UDP-модуль получает дейтаграмму UDP от модуля IP, он проверяет контрольную сумму UDP. Если поле контрольной суммы имеет нулевое значение, это говорит о том, что контрольная сумма не была задана отправителем и не должна приниматься во внимание. Модуль UDP на компьютере отправителя может указывать контрольную сумму или опускать ее. Если между двумя модулями UDP находятся только сети Ethernet, контрольная сумма может и не потребоваться. Однако, рекомендуется использовать контрольные суммы, поскольку данные могут передаваться и через менее надежные среды.
Если контрольная сумма имеет корректное значение или равна 0, проверяется порт назначения и (при наличии связи между этим портом и приложением) пакет помещается в очередь приложения для последующего прочтения. В противном случае дейтаграмма UDP просто отбрасывается. Если дейтаграммы UDP приходят из сети быстрее, чем приложение может их читать и очередь переполняется, протокол UDP также будет отбрасывать дейтаграммы, не помещающиеся в очередь.