news 2026/10/10 6:06:38

Linux --传输层协议 UDP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux --传输层协议 UDP

传输层是干什么的?

传输层位于网络层之上、应用层之下,核心任务只有一个:

负责把数据从发送端传输到接收端。

网络层(IP)负责把数据送到目标主机,但主机上可能同时运行着很多程序(浏览器、QQ、微信、游戏……),传输层要解决的是:

数据到了主机之后,到底交给哪个应用程序?

这就引出了“端口号”的概念。

端口号:一台主机上不同应用的“门牌号”

1. 什么是端口号?

端口号(Port)用来标识一台主机上进行通信的不同应用程序。

举个例子:你的电脑上同时开着:

  • FTP 服务器(端口 21)

  • SSH 服务器(端口 22)

  • SMTP 服务器(端口 25)

  • HTTP 服务器(端口 80)

  • FTP 客户端(端口 2000)

  • HTTP 客户端(端口 2001)

当数据到达你的主机时,传输层会根据目的端口号决定把数据交给哪个程序处理。

2. 五元组标识一个通信

在 TCP/IP 协议中,一个通信由以下五个元素唯一标识:

  • 源 IP

  • 源端口号

  • 目的 IP

  • 目的端口号

  • 协议号(TCP 还是 UDP)

你可以用netstat -n命令查看当前的网络连接情况。

扩展:五元组就像快递单上的“寄件人地址+寄件人电话+收件人地址+收件人电话+快递类型”,缺一不可。

3. 端口号范围划分

范围名称说明
0 - 1023知名端口号(Well-Known Port)固定分配给常用服务,如 HTTP(80)、FTP(21)、SSH(22)
1024 - 65535动态分配端口号操作系统动态分配给客户端程序

常见知名端口号:

  • SSH 服务器:22

  • FTP 服务器:21

  • Telnet 服务器:23

  • HTTP 服务器:80

  • HTTPS 服务器:443

注意:我们自己写程序时,要避开这些知名端口号,否则可能和系统服务冲突。

4. 两个常见问题

问题1:一个进程是否可以 bind 多个端口号?

  • 可以。一个进程可以绑定多个端口,但通常不这么做。

问题2:一个端口号是否可以被多个进程 bind?

  • 一般情况下不行。一个端口号在同一时刻只能被一个进程绑定(除非使用 SO_REUSEPORT 等特殊选项)。

UDP 协议详解

1. UDP 协议端格式

UDP 数据报由首部(8 字节)和数据组成:

字段长度说明
16位源端口号2 字节发送方端口
16位目的端口号2 字节接收方端口
16位UDP长度2 字节整个数据报(首部+数据)的最大长度
16位UDP校验和2 字节用于检测数据是否出错
数据可变应用层数据

注意:如果校验和出错,UDP 会直接丢弃该数据报,不会通知应用层。

2. UDP 的特点

UDP 传输的过程类似于寄信:

  • 无连接:知道对端的 IP 和端口号就直接发送,不需要建立连接。

  • 不可靠:没有确认机制,没有重传机制。如果网络故障导致数据丢失,UDP 不会给应用层返回任何错误信息。

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

举个例子:

你用 UDP 发送 100 个字节:

  • 发送端调用一次sendto,发送 100 字节;

  • 接收端必须调用一次recvfrom,接收 100 字节;

  • 不能循环调用 10 次recvfrom,每次接收 10 字节。

扩展:这就像寄信,你寄出一整封信,收信人必须一次性收完整封信,不能分 10 次收。

3. UDP 的缓冲区

  • 发送缓冲区:UDP 没有真正意义上的发送缓冲区。调用sendto会直接交给内核,由内核传输给网络层。

  • 接收缓冲区:UDP 有接收缓冲区,但不能保证收到的 UDP 报的顺序和发送顺序一致。如果缓冲区满了,再到达的 UDP 数据就会被丢弃。

4. 全双工

UDP 的 socket 既能读,也能写,这个概念叫做全双工。

扩展:全双工就像打电话,双方可以同时说话和听对方说话。

UDP 使用注意事项

1. 最大长度限制

UDP 首部中有一个 16 位的“UDP 长度”字段,所以一个 UDP 能传输的数据最大长度是64K(包含 UDP 首部)。

64K 在当今互联网环境下非常小。如果需要传输超过 64K 的数据,就需要在应用层手动分包,多次发送,并在接收端手动拼装。

2. 基于 UDP 的应用层协议

  • NFS:网络文件系统

  • TFTP:简单文件传输协议

  • DHCP:动态主机配置协议

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

  • DNS:域名解析协议

当然,也包括你自己写 UDP 程序时自定义的应用层协议。

扩展内容:UDP 的优缺点与适用场景

1. 优点

  • 速度快:没有连接建立、确认、重传等机制,开销小。

  • 实时性好:适合对延迟敏感的应用,如视频直播、语音通话、在线游戏。

  • 实现简单:协议首部只有 8 字节,处理逻辑简单。

2. 缺点

  • 不可靠:数据可能丢失、乱序、重复。

  • 无拥塞控制:网络拥塞时不会自动降速,可能加剧网络负担。

  • 数据报大小受限:最大 64K。

3. 适用场景

  • 实时音视频传输(如 WebRTC、RTSP)

  • DNS 查询

  • DHCP 配置

  • 广播/多播通信

  • 游戏对战数据同步

扩展:很多现代协议在 UDP 之上自己实现了可靠性,比如 QUIC(HTTP/3 的底层协议),就是基于 UDP 实现了类似 TCP 的可靠传输。

总结对比:UDP vs TCP

特性UDPTCP
连接方式无连接面向连接
可靠性不可靠可靠
传输方式面向数据报面向字节流
首部大小8 字节20 字节起
速度快慢
适用场景实时、广播、简单查询文件传输、网页、邮件

一句话记住 UDP

UDP 就像寄信:不建立连接、不保证送到、一次寄一整封,速度快但可能丢。

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

pprof 火焰图(Flame Graph)阅读与热点代码重构实战

pprof 火焰图(Flame Graph)阅读与热点代码重构实战 一、核心概念与架构设计 上一篇用 go tool pprof -top 看到了函数级的耗时排名,但排名有一个致命缺陷:它丢掉了调用关系。fmt.Sprintf 占 8% 的 CPU,这 8% 是谁调用它…

作者头像 李华
网站建设 2026/10/10 6:06:07

工业相机标定实战:内参模型选择与双目标定闭环

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/10 6:05:57

雪花 ID 传到前端就变了个数?我用全局 Long 转 String 一次收口

先说结论 MyBatis-Plus 默认的雪花算法(IdType.ASSIGN_ID)生成的是 19 位 Long,而 JS 的 Number 能精确表示的最大整数是 2^53 - 1 9007199254740991(16 位)。 19 位 > 16 位 → id 以数字形式进 JSON 就必然丢精度…

作者头像 李华
网站建设 2026/10/10 6:05:24

PHP科技企业模板部署与安全加固实战指南

简介:这是一套开箱即用的PHP科技企业官网模板,专为IT、软件、科技产品及工作室类网站快速建站设计,适合前端初学者与中小型技术团队进行二次开发与部署。模板采用淡绿色主色调,视觉高端大气,内置PHP后台管理系统&#…

作者头像 李华
网站建设 2026/10/10 6:05:12

Beyond Compare高效使用指南:从文本比较到文件夹同步与三路合并

Beyond Compare到底怎么用才叫“高效”——我把它翻来覆去用了一遍之后先说个我自己的经历。有次处理一个发布包,上一个版本和这个版本之间文件改了几十个,靠肉眼去翻目录、逐个看修改时间,折腾一晚上,最后还是漏掉了两个配置文件…

作者头像 李华
网站建设 2026/10/10 6:05:06

使用 NVIDIA NemoClaw 构建内存驱动型智能体

2026年 9月 4日 作者:Xuan Wu, Alexia Huang, Yijie Lai, Joe Liu 和 Xiaowei Li 企业工作涵盖随时间变化的AI 智能体必须先对其进行重建,然后再进行贡献。 为了向智能体提供这种必要的环境,我们的团队使用 NVIDIA NemoClaw 构建了 内存驱…

作者头像 李华