news 2026/6/12 9:22:01

12. UDP协议概述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12. UDP协议概述

二.UDP协议报文


一、UDP 报文整体结构

UDP报文分为两部分,整体结构非常清晰:

  1. 首部(固定8字节):包含寻址和校验信息,没有可变部分/选项字段
  2. 数据部分:应用层数据,长度可变(可以为0字节,即只有首部)。

和TCP报文相比,UDP首部没有任何复杂的控制字段(如seq/ack、标志位、窗口),是为了追求低延迟、低开销而设计的。


二、首部4个字段详解(按顺序)

每个字段都是16位(2字节),4个字段加起来正好是8字节:

字段名长度核心作用关键细节
源端口号16位发送方进程的端口标识可选字段:如果不需要对方回复,可以设为0;需要回复时,对方会用这个端口作为目的端口
目的端口号16位接收方进程的端口标识必须字段:用来把UDP报文交付给主机上对应的应用进程(比如DNS用53,TFTP用69)
UDP长度16位整个UDP报文的总长度(首部+数据)单位:字节;最小值为8(仅首部,无数据);最大值为65535字节;和IP首部的“总长度”区分:IP总长度是IP包的长度,UDP长度是UDP包的长度
UDP检验和16位校验UDP报文的完整性可选字段:部分实现支持不校验(设为0),但实际网络中通常会校验;计算时会包含IP层的伪首部,防止报文发错主机

三、UDP 与 TCP 的核心区别(结合你之前学的内容)

结合你之前学的TCP报文、三次握手/四次挥手,两者的差异一目了然:

特性UDPTCP
连接性无连接:不建立三次握手,直接发包面向连接:必须三次握手建立连接后再传输
可靠性不保证可靠:不重传、不排序、不确认可靠传输:通过seq/ack、重传、窗口机制保证数据按序不丢
数据模型面向报文:每个UDP包是一条完整消息,无粘包问题面向字节流:数据是连续字节流,存在粘包/拆包问题
首部开销固定8字节,极小可变20-60字节,控制字段多,开销大
适用场景实时性要求高、丢包不敏感的场景(如DNS、视频通话、游戏、直播)可靠性要求高的场景(如网页、文件传输、数据库)

四、补充:UDP 检验和的伪首部(关键细节)

UDP检验和计算时,会额外加上IP层的伪首部,包含:

  • 源IP地址
  • 目的IP地址
  • 协议号(UDP为17)
  • UDP长度

这样做的目的是:

  1. 防止UDP报文被错误转发到其他主机;
  2. 确保UDP报文的IP地址信息没有被篡改;
  3. 虽然UDP本身不可靠,但伪首部校验能减少错误交付的概率。

五、代码层面的UDP首部定义(和C语言结构体对应)

在网络编程中,UDP首部的结构体定义和图里的格式1:1对应:

structudphdr{uint16_tsource;// 源端口号uint16_tdest;// 目的端口号uint16_tlen;// UDP长度(首部+数据)uint16_tcheck;// UDP检验和};

结构体的每个成员正好对应图中的4个字段,总大小固定为8字节,和UDP首部的设计完全一致。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 9:19:57

从零到一:TDengine服务端部署与远程访问全攻略

1. 环境准备与安装包获取 第一次接触TDengine的朋友可能会被各种术语吓到,但其实部署过程就像组装乐高积木一样简单。我们先从最基础的准备工作开始。我建议使用一台干净的CentOS 7或Ubuntu 18.04以上版本的Linux服务器作为部署环境,这是经过大量项目验证…

作者头像 李华
网站建设 2026/6/12 9:19:52

别光看公式了!用Python+LTspice快速搞定串联RLC电路仿真与参数分析

实战指南:用PythonLTspice玩转串联RLC电路仿真与优化 当你在实验室里面对一块布满元件的电路板时,理论公式往往显得苍白无力。作为一名电子工程师,我经常遇到需要快速验证电路特性的场景——比如上周调试的射频滤波器模块,理论计算…

作者头像 李华
网站建设 2026/6/12 9:17:34

Android滑动布局终极指南:SwipeRevealLayout让你的应用交互更流畅

Android滑动布局终极指南:SwipeRevealLayout让你的应用交互更流畅 【免费下载链接】SwipeRevealLayout Easy, flexible and powerful Swipe Layout for Android 项目地址: https://gitcode.com/gh_mirrors/sw/SwipeRevealLayout 想要为Android应用添加优雅的…

作者头像 李华