UDP协议与网络通信知识点

1. UDP协议特点

UDP(用户数据报协议)的传输过程类似于寄信,具有以下四大核心特征:

  • 无连接: 只要知道对端的IP和端口号即可直接发送数据,无需事先建立连接。

  • 不可靠传输: 没有确认(ACK)和重传机制。如果数据因网络故障丢失,UDP协议层不会向应用层返回任何错误信息。

  • 面向数据报: 应用层交给UDP多长的报文,UDP就原样发送,不拆分、不合并。

    • 示例: 发送端调用一次 sendto 发送100字节,接收端必须调用一次 recvfrom 接收100字节,不能分10次每次接收10字节。
  • 全双工通信: UDP的 socket 支持同时进行读操作(read/recv)和写操作(write/send),即支持双向数据同时传输。


2. UDP的缓冲区机制

UDP的读写缓冲机制与TCP有显著区别:

  • 发送缓冲区:无。 UDP没有真正意义上的发送缓冲区。调用 sendto 后,数据会直接交付给内核,由内核传递给网络层(IP层)进行封装和发送。

  • 接收缓冲区:有。

    • 乱序: 接收缓冲区不能保证收到报文的顺序与发送端一致。

    • 丢包: 如果接收缓冲区满了,后续到达的UDP数据报会被直接丢弃。


3. UDP报文格式与大小限制

!\[Pasted image 20260513192621.png]

UDP的报头非常精简,固定为 8个字节:

字段 长度 说明
源端口号 16位 发送方应用程序的端口
目的端口号 16位 接收方应用程序的端口
UDP长度 16位 表示整个数据报(UDP首部 + UDP数据)的最大长度
UDP校验和 16位 用于校验数据完整性,如果校验和出错,报文会直接丢弃

⚠️ 关键限制(64K问题):

因为"UDP长度"字段占16位,这意味着一个UDP数据报的最大长度是 64KB (包含UDP首部)。在现代互联网中64KB很小,如果需要传输超过64KB的数据,必须在应用层手动分包发送,并在接收端手动拼装。


4. 通信模型与端口号 (Port)

传输层的主要职责是确保数据能从发送端传输到接收端,而端口号用于标识主机上不同的应用程序。

4.1 网络通信五元组

在TCP/IP协议中,通过以下五个元素来唯一标识一次网络通信(可通过 netstat -n 查看):

源IP + 源端口号 + 目的IP + 目的端口号 + 协议号

4.2 端口号范围划分

  • 0 - 1023(知名端口号 / Well-Know Port): 固定分配给广为使用的应用层协议。开发者自己写程序时应避开这些端口。(可通过 cat /etc/services 命令查看系统端口分配)

  • 1024 - 65535: 操作系统动态分配的端口号,通常用于客户端程序。

4.3 常见知名端口号

  • FTP: 21

  • SSH: 22

  • Telnet: 23

  • HTTP: 80

  • HTTPS: 443

两个经典问题

  1. 一个进程是否可以bind多个端口号? 可以。一个进程可以创建多个 socket,分别绑定不同的端口。

  2. 一个端口号是否可以被多个进程bind? 通常不可以(会提示端口被占用),但在某些特殊机制下(如父子进程继承或设置了特定的端口复用选项 SO_REUSEPORT),存在特殊情况。


5. 底层通信模型数据流向

在局域网内两台主机(A与B)通信时,数据流动呈现严格的自上而下的层级封装:

  1. 应用层: 生成业务数据(如消息文本、时间戳、昵称)。

  2. 系统调用接口: 通过 write/send 等系统调用向内核传递数据。

  3. OS 内核层: 负责管理协议栈(TCP/UDP)、缓冲区处理及向下层传递。

  4. 底层网络(网络层/链路层): 加上IP首部、MAC帧头,最终转化为物理信号通过局域网发送至对端。


6. 常见的基于UDP的应用层协议

虽然UDP不可靠,但其极低的延迟使其成为许多经典应用层协议的基石:

  • DNS: 域名解析协议(最常见)

  • DHCP: 动态主机配置协议(用于自动获取IP)

  • NFS: 网络文件系统

  • TFTP: 简单文件传输协议

  • BOOTP: 启动协议(用于无盘设备启动)

  • 自定义协议: 开发者自己基于UDP封装的各类应用层协议(如游戏帧同步、视频流传输等)。

相关推荐
DP DPharness1 小时前
ClearAI、记忆插件与普通笔记,三种让 Agent 记住的路数对比
笔记
程序喵大人2 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
piikee4 小时前
粤语初学入门:从粤拼、九声六调到开口,一个普通话母语者的练习笔记
笔记·粤语入门·怎么学习粤语
by209994 小时前
vector 的模拟实现:扩容与边界的详细阐述(下)
c++·经验分享·vector·动态数组
XiaoMaqqqq4 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
ShyanZh5 小时前
【Python3基础】19-Socket 与 TCP、UDP 编程
python·网络协议·tcp/ip·udp
汤姆yu6 小时前
Gemini 4 Argon模型综述:技术、能力与实际使用指南
网络·安全·web安全·ai·大模型
Seraphina366 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
白山编程大哥6 小时前
Carsim 2024.1 专业安装介绍:功能特性与应用场景详解
笔记
hss123456787 小时前
整装落地与效果图差距有多大?从毫米级误差到ENF板材的量化拆解
笔记