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封装的各类应用层协议(如游戏帧同步、视频流传输等)。

相关推荐
讳疾忌医丶4 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
M78佐菲4 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
2401_868534784 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
软件课代表CiCi4 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd6 小时前
从面经中学到的三件事
c++·笔记
时时三省6 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
Winner_hwx6 小时前
华为ICT大赛备赛复习1
服务器·网络·华为
宗介波妞7 小时前
Wireshark 抓取 IEC104 报文:常见异常报文排查与标志位解读
服务器·网络·wireshark
云边云科技_云网融合7 小时前
工业互联网组网方案全景解析:从低延迟网络到安全隔离的四大核心支柱
网络·安全·php
小程序设计7 小时前
linux防火墙研究与实现
网络·安全