【Linux】传输层协议UDP

在TCP/IP协议中,用"源IP", "源端口号","目的IP","目的端口号","协议号"这样的五元组来标识一个通信

1. 端口号

端口号范围划分

  • 0-1023:知名端口号,HTTP,FTP,SSH等这些广为使用的应用层协议,端口号都是固定的
  • 1024-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的

问题

  • 一个进程可以bind多个端口号
  • 一个端口号只能被一个进程bind

2. UDP协议

2.1 UDP协议端格式

  • 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度
  • 如果校验和出错,就会直接丢弃

2.2 UDP的特点

UDP 类比普通寄平信

  1. **无连接:**只要知道对方IP + 端口,直接发数据,不用建立连接。

  2. **不可靠:**没有确认应答、没有重传。半路丢包了,UDP 也给应用层返回错误信息

  3. **面向数据报:**一次发一个完整数据包,不会拆包、也不会粘包;读写次数严格对应,不能随意拆分、合并收发的数据

2.3 面向数据报

应用层交给UDP多长的报文,UDP原样发送,不会拆包、也不会粘包

2.4 UDP的缓冲区

  • UDP没有 真正的发送缓冲区,调用sendto把数据直接交给内核,内核立刻转给网络层封装发送
  • UDP 有接收缓冲区 ,能缓存收到的 UDP 数据包;但不保证收发顺序 :先发的包可能后到。缓冲区满了直接丢新包:不会阻塞、不会限流,新来的数据直接丢弃

同一个 UDP Socket 既能收数据、也能发数据,收发相互独立,可以同时进行,这就是全双工

2.5 UDP使用注意事项

UDP 首部有16 位长度字段,说明 UDP 首部 8 字节 + 数据载荷不能超过65536 字节 = 64k

64K 很小,远不够传大文件、大图等

如果需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装

相关推荐
GLAB-Mary9 小时前
90%的网络工程师,根本没必要考HCIE!
网络·华为·华为认证·hcie·hcia·hcip
wuyk55510 小时前
【Socket 进阶之路】第 3 章 TCP 三次握手 & 四次挥手深度剖析|连接建立、断开、状态机、TIME_WAIT 核心工程问题
服务器·开发语言·网络·物联网·网络协议·tcp/ip
一技安身16 小时前
【Docker】 镜像导出 & 导入,实验环境aarch64(arm64)Linux操作系统
linux·docker·容器
QYRdata17 小时前
权威数据披露:2026至2032年边缘云服务CAGR达15.6%,赛道发展驶入快车道
网络·人工智能·云计算·服务发现·边缘计算
代码村新手17 小时前
Linux调试器-gdb的使用
linux
新时代牛马18 小时前
PCI与PCIe 硬件原理、配置空间/BAR 与 Linux 驱动完整篇:从 LTSSM、TLP 到 ECAM 与probe
java·linux·服务器
Riwuarua19 小时前
从近似0基础开始FPGA开发 -- part.10 verilog-ethernet开源UDP协议栈工程学习
fpga开发·udp·开源
两点王爷19 小时前
解决 Linux 中 version `CXXABI_1.3.8‘ not found 报错
linux·运维·服务器
xx~t19 小时前
嵌入式——51单片机1
linux·c语言·单片机·嵌入式硬件·51单片机
啦啦啦啦啦zzzz19 小时前
利用RAII机制进行日志的采集
linux·服务器·c++·网络编程·c++20