任务二 UDP协议
知识点
1.UDP是一个什么样的协议?
用户数据报协议(User Datagram Protocol,UDP) 是一个非常简单的协议。它为应用层的进程提供一个不可靠的、面向无连接的传输服务,避免了建立和释放一个连接所需的时间。
UDP 的"三不"保证:
1 不保证数据报的到达 2 不保证所传输的数据在字节顺序上是否正确 3 不重传丢失的数据
2.什么场合适合选用UDP?
当应用层进程传输的数据量很少、可靠性要求不是特别高,而实时性要求高时,选用 UDP 就比较合适。典型例子:
- 网络视频会议系统
- 聊天系统
- 流媒体(音视频)数据传输
- 路由信息协议(RIP)中修改路由表
在这些场合下的容错方式:如果有一个消息丢失,在几秒之后另一个新的消息就会替换它——因此个别报文丢失并不会造成严重后果。
3.UDP协议有哪些特点?
(1)无连接
UDP 是一个无连接协议,即在传输数据之前源端和终端不必须事先建立连接。当应用程序有数据需要向网络发送时,UDP 协议将尽可能快地把其发送至网络上。
| 端 | 速度/处理特点 |
|---|---|
| 发送端 | UDP 发送数据的速度受应用程序生成数据的速度、计算机的处理能力和传输带宽的限制 |
| 接收端 | UDP 把每个消息段放在队列中,应用程序每次从队列中读一个消息段 |
(2)不维护连接状态,系统开销小
由于 UDP 传输数据不建立连接,因此也就不需要维护连接状态(包括收发状态等),因此服务器可同时向多个客户机传输相同的消息。这样就可以极大地减少系统开销,降低了流媒体的误码率和丢包率,并保证了流媒体播放的平滑性。
(3)面向报文
UDP 是面向报文的:发送方的 UDP 对应用程序转交下来的报文,在添加首部后即向下交付给网络层。这个过程中既不拆分也不合并报文。
对比思考:TCP 是面向字节流的,会把长数据切分成报文段、接收端再重组;UDP 保留应用层报文的边界,"一个报文一个数据报"。
(4)不可靠,但适合多媒体
UDP 是一种不可靠传输协议,它无法确保分组传输数据的可靠性。一旦分组数据在通信传输过程中出现丢包,UDP 协议无法对此进行检测和重传操作。
虽然 UDP 是一个不可靠的协议,但却是分发多媒体应用数据的一个理想协议。原因在于:多媒体应用更看重实时性和流畅性,宁可丢少量数据,也不愿因重传等待造成卡顿。
4.UDP数据报的格式是怎样的?
UDP 数据报由 UDP 报头和 UDP 有效负载构成,其基本结构如图 4-18 所示,UDP 报头长度为 8 个字节。
| 16 位 | 16 位 |
|---|---|
| 源端口 # | 目的端口 # |
| UDP 报文长度 | UDP 校验和 |
| 数据(有效负载) |
即:报头由 4 个 16 位字段组成,共 4 × 2 = 8 字节;之后直接是数据,没有选项字段。
5.UDP报头各字段的含义是什么?
| 字段 | 长度 | 含义 |
|---|---|---|
| 源端口 | 16 位 | 发送端应用程序的 UDP 端口 |
| 目的端口 | 16 位 | 目标端应用程序的 UDP 端口 |
| UDP 报文长度 | 16 位 | UDP 数据报的字节总数(包括头部和数据) |
| UDP 校验和 | 16 位 | 用于检查 UDP 数据报是否在传输过程中发生了错误 |
与 TCP 首部的对比:TCP 首部固定部分为 20 字节,有 14 个字段、6 个标志位,还要维护序号、确认号、窗口等;UDP 首部只有 8 字节、4 个字段,这正是 UDP "简单、开销小、转发快"的根本原因。
6.UDP与TCP有什么区别?
| 比较项 | UDP | TCP |
|---|---|---|
| 连接方式 | 无连接(发送前不建立连接) | 面向连接(三次握手) |
| 可靠性 | 不可靠(不保证到达、不保证顺序、不重传) | 可靠(重传肯定确认、滑动窗口) |
| 数据形式 | 面向报文,不拆分不合并,保留报文边界 | 面向字节流,分段传输、接收端重组 |
| 首部长度 | 8 字节,4 个字段 | 20 字节(固定部分),14 个字段 |
| 传输速度 | 快(无建立连接、无确认开销) | 相对慢(有建链、确认、重传、流量控制开销) |
| 系统开销 | 小,不维护连接状态 | 大,需维护连接、序号、窗口等状态 |
| 通信方式 | 一对一、一对多 | 一对一 |
| 适用场合 | 数据量少、实时性高、可容忍个别丢失:视频会议、聊天、流媒体、RIP | 要求数据完整无误:Web 浏览、文件传输、电子邮件 |
| 流量控制与拥塞控制 | 无 | 有(滑动窗口) |
一句话记忆:TCP 求"准"(可靠、有序、可控),UDP 求"快"(简单、实时、开销小)。
7.传输层如何标识一个通信的进程?
无论使用 TCP 还是 UDP,传输层都通过套接字(Socket) 来标识通信的双方:
套接字 = 主机的 IP 地址 + 端口号
| 组成 | 标识对象 |
|---|---|
| IP 地址 | 网络中的主机 |
| 端口号 | 主机中运行的进程/应用程序 |
常用固定端口(由 IANA 分配):Web 服务(HTTP)80、邮件服务(SMTP)25,此外 FTP 为 21、DNS 为 53 等。
UDP 与端口的关系:UDP 报头中的源端口和目的端口,正是用来完成这种"进程到进程"的寻址,这也是传输层"端到端通信"的具体体现。
8.UDP的工作过程可以怎样描述?
| 阶段 | UDP 的处理 |
|---|---|
| 发送前 | 不建立连接,直接准备发送 |
| 发送时 | 应用进程把报文交给 UDP;UDP 加上 8 字节首部(填源端口、目的端口、长度、校验和)后直接交给 IP 层 |
| 传输中 | IP 层封装成 IP 数据包发送;UDP 不跟踪、不确认、不重传 |
| 接收时 | 按目的端口把数据报放入相应应用进程的队列;应用进程每次从队列中读取一个消息段 |
| 异常时 | 数据报丢失或出错,UDP 不通知应用进程(可由应用层自行处理) |
9.UDP要点速查表
| 项目 | 关键内容 |
|---|---|
| 全称 | 用户数据报协议(User Datagram Protocol) |
| 服务类型 | 不可靠、面向无连接 |
| 报头长度 | 8 字节 |
| 报头字段 | 源端口、目的端口、UDP 报文长度、UDP 校验和 |
| 字段长度 | 各 16 位 |
| 是否分段 | 不拆分、不合并(面向报文) |
| 典型应用 | 视频会议、聊天、流媒体、RIP |
| 与 TCP 的核心差别 | 无连接、不可靠、开销小、速度快 |