【Linux】传输层协议UDP

一、传输层核心功能

传输层的核心作用是确保数据能够从发送端的应用程序,准确传输到接收端的对应应用程序,核心解决 "数据交付到主机后,如何匹配到具体进程" 的问题。

二、端口号(Port)

2.1 端口号的定义与作用

  • 端口号是 16 位整数(取值范围 0-65535),用于标识主机上进行网络通信的不同应用程序,实现 "IP 定位主机 + 端口号定位进程" 的二级定位。
  • 通信唯一标识:在 TCP/IP 协议中,通过 "源 IP、源端口号、目的 IP、目的端口号、协议号"五元组 唯一标识一次网络通信,可通过netstat -n命令查看当前系统的通信连接。

2.2 端口号范围划分

端口号范围 类型 特点与用途
0-1023 知名端口号 由 IANA(互联网数字分配机构)统一分配,对应固定应用层协议,供服务器端程序使用。
1024-65535 动态分配端口号 由操作系统在客户端程序发起连接时随机分配,使用后释放,避免占用知名端口。

2.3 常见知名端口号

应用层协议 / 服务 对应的知名端口号 用途
SSH(安全外壳协议) 22 远程登录服务器,实现安全的命令行操作
FTP(文件传输协议) 21 用于文件的上传与下载
Telnet(远程终端协议) 23 早期远程登录协议(安全性较低,现已较少使用)
HTTP(超文本传输协议) 80 普通网页访问(未加密)
HTTPS(安全超文本传输协议) 443 加密的网页访问(如电商、支付场景)

2.4 端口号相关查询与注意事项

  • 查看所有知名端口号映射:执行cat /etc/services命令,可查看系统中预定义的端口号与服务对应关系。
  • 自定义程序端口号:需避开 0-1023 的知名端口号,避免端口冲突导致程序启动失败。

2.5 端口号与进程的绑定问题

  1. 一个进程是否可以 bind 多个端口号? 可以。一个进程可通过多次bind系统调用,绑定多个不同的端口号(如一个服务器进程同时监听 80 和 443 端口,分别处理 HTTP 和 HTTPS 请求)。
  2. 一个端口号是否可以被多个进程 bind? 不可以。端口号具有唯一性,一个端口号只能被一个进程绑定;若已绑定的端口号被其他进程再次尝试绑定,会返回 "端口已占用" 错误(如Address already in use)。

三、UDP 协议(用户数据报协议)

3.1 UDP 协议首部格式

UDP 首部共 8 字节,包含 4 个字段,结构简单:

  • 16 位源端口号:标识数据发送端的应用程序端口。
  • 16 位目的端口号:标识数据接收端的应用程序端口。
  • 16 位 UDP 长度:表示整个 UDP 数据报(首部 + 数据)的字节数,最大值为 65535(即 64K)。
  • 16 位校验和:用于校验 UDP 数据报的完整性(若校验出错,数据报会被直接丢弃,不返回错误信息)。

3.2 UDP 的核心特点

(1)无连接
  • 通信前无需建立连接,只需知道对方的 IP 和端口号,即可直接发送数据(类似 "寄信",无需提前确认对方是否在线)。
  • 优势:减少连接建立 / 释放的开销,通信效率高;劣势:无法保证对方是否能接收数据。
(2)不可靠
  • 无确认机制:发送端发送数据后,不要求接收端返回确认信息,无法确认数据是否送达。
  • 无重传机制:若数据因网络故障丢失(如网络拥堵、链路中断),UDP 协议层不会重传,也不会向应用层返回错误信息。
  • 无顺序保证:若多个 UDP 数据报因网络延迟差异到达接收端,可能出现 "后发先至" 的情况,UDP 不处理顺序问题。
(3)面向数据报
  • 应用层交给 UDP 的数据会被当作一个 "完整的数据报",UDP 原样发送,不拆分、不合并
  • 收发数据规则:发送端调用 1 次sendto发送 N 字节数据,接收端必须调用 1 次recvfrom接收全部 N 字节数据,不能分多次接收(如发送 100 字节,接收端不能循环 10 次每次接收 10 字节)。

3.3 UDP 的缓冲区特性

缓冲区类型 特点
发送缓冲区 无真正意义上的发送缓冲区:调用sendto后,数据直接交给内核,由内核传递给网络层,不暂存数据。
接收缓冲区 有接收缓冲区:用于暂存从网络层接收的 UDP 数据报,但不保证数据顺序(与发送顺序可能不一致);若缓冲区满,后续到达的 UDP 数据报会被直接丢弃。

3.4 UDP 的全双工特性

UDP 的 Socket(套接字)支持全双工通信,即同一个 Socket 既可以读取数据(接收),也可以写入数据(发送),无需额外创建新的 Socket。

3.5 UDP 使用注意事项

  • 数据长度限制:UDP 数据报最大长度为 64K(含首部),若应用层需传输超过 64K 的数据,需在应用层手动 "分包"(拆分数据为多个 64K 以内的片段),并在接收端手动 "拼装"(按顺序合并片段)。

3.6 基于 UDP 的应用层协议

协议名称 用途
NFS(网络文件系统) 实现不同主机间的文件共享(如 Linux 服务器间的文件访问)
TFTP(简单文件传输协议) 轻量级文件传输协议,适用于小型设备(如嵌入式设备)的文件传输
DHCP(动态主机配置协议) 为局域网内的设备自动分配 IP 地址、子网掩码、网关等网络配置
BOOTP(启动协议) 用于无盘设备(如无硬盘的服务器)从网络启动,获取启动镜像
DNS(域名解析协议) 将域名(如www.baidu.com)解析为对应的 IP 地址,便于用户访问
自定义应用层协议 开发 UDP 程序时,可根据需求自定义数据格式与交互规则(如即时通信、游戏数据传输)
相关推荐
小成2023032026519 分钟前
Linux高级02
linux·开发语言
mounter62520 分钟前
【硬核前沿】CXL 深度解析:重塑数据中心架构的“高速公路”,Linux 内核如何应对挑战?-- CXL 协议详解与 LSF/MM 最新动态
linux·服务器·网络·架构·kernel
++==31 分钟前
Linux 进程间通信与线程同步技术详解:IPC 机制、线程 API、同步工具与经典同步问题
linux
特长腿特长1 小时前
centos、ubantu系列机的用户和用户组的结构是什么?具体怎么配置?用户组权限怎么使用?这篇文章持续更新,帮助你复习linux的基础知识
linux·运维·centos
zzzyyy5381 小时前
Linux环境变量
linux·运维·服务器
pluvium271 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
无级程序员1 小时前
centos7 安装 llvm-toolset-7-clang出错的问题解决
linux·centos
赛博云推-Twitter热门霸屏工具2 小时前
Twitter运营完整流程:从0到引流获客全流程拆解(2026)
运维·安全·自动化·媒体·twitter
CHHC18802 小时前
NetCore树莓派桌面应用程序
linux·运维·服务器
帮我吧智能服务平台3 小时前
装备制造智能制造升级:远程运维与智能服务如何保障产线OEE
运维·服务器·制造