计算机网络-UDP协议

1 概述

用户数据报协议(UDP,User Datagram Protocol),UDP作为传输层的一个重要的协议,它的主要的功能是在IP端到端的服务之上,增加了有限的两个功能:

  1. 复用和分用的功能
  2. 差错检测的功能

另外,虽然UDP协议只提供不可靠的交付,看起来似乎非常不完美,但是UDP协议在某些方面具有特殊的优点:

  1. 比如我们在看在线视频的时候我们要求数据是最新的最快的,如果这个时候要求数据的准确性,那么会带来较大的延迟,就像我们在看直播球赛的时候,我们希望看到准备直播画面,而不是有延迟半分钟或一分钟的画面
  2. 另外一个典型的例子,比如在网络管理过程中我们希望采集到网络的实时数据,这个时候网络管理会使用某种基于UDP协议的方式,采集到最新最快的数据,若是采集过来的数据有延迟,那么这个数据已经不是实时数据了,不能表示此时网络的状况了

所以在有些情况下,UDP协议简单快速的特点,比TCP协议更有优势

2 UDP的主要特点

  1. UDP 是无连接的:发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延,这个特点是UDP协议的首要特点,可以这么说,UDP其他的特点,都是或多或少源自于这个特点
  2. UDP 使用尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的连接状态表,发送端只需要把数据打包成UDP数据报,交给IP协议传输,中间经过了哪些路由器,最后有没有到达目的主机,数据有没有出错,需不需要重传,这些主机问题都不知道
  3. UDP 是面向报文的:所谓报文就是应用层交下来的报文,应用层有各种各样的报文,比如HTTP报文,FTP报文等,根据不同的应用层协议封装成不同的报文,UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文,在网络层,IP协议可能会进行拆分工作

应用程序必须选择合适大小的报文

  • 若报文太长,UDP 把它交给 IP 层后,IP 层在传送时可能要进行分片,这会降低 IP 层的效率
  • 若报文太短,UDP 把它交给 IP 层后,会使 IP 数据报的首部的相对长度太大,这也降低了 IP 层的效率
  1. UDP 没有拥塞控制:因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求,也就是说使用UDP协议的发送端,完全不会感知当前网路的状态是拥塞还是通畅,UDP协议还是会发送出去
  2. UDP 支持一对一、一对多、多对一和多对多的交互通信:这时目的主机不一定是单个主机,有可能是多个主机同时接收到发送端发送的UDP报文
  3. UDP 的首部开销小:只有 8 个字节,比 TCP 的 20 个字节的首部要短,这样也就意味着把数据组成UDP报文时所要做的工作更少,消耗资源小,发送速度也更快

3 UDP的首部格式

3.1 传输关系

UDP协议作为传输层的一个经典协议,它和上下层的传输关系如下:

  1. 应用层会把应用层报文交付给运输层
  2. 运输层的UDP协议,直接把上层交付下来的所有数据当作UDP数据报的数据部分,再加上UDP首部交付给下层IP层
  3. IP层把运输层交付下来的整个UDP数据报当作IP数据报的数据部分,再加上IP首部,继续交给下一层
    在这里插入图片描述
    在这里插入图片描述

3.2 首部格式

  • 除去两个端口号字段,还有一个长度字段,它用来标明整个UDP报文的长度是多少,最后一个字段是校验和字段,它实现了对整个UDP报文的校验功能
    在这里插入图片描述

3.3 UDP 基于端口的分用和复用

  1. 在UDP首部前两个字段当中,是源端口和目的端口,从接收端来讲,当接收端从 UDP报文中拆解出两个端口号之后,会根据端口号标识的内容,发送给上一层的应用程序,从而实现了端口的分用
  2. 复用是分用的相反过程,应用程序把数据交付下来之后,其中的端口号就标明了这是哪一个应用进程,
    在这里插入图片描述

3.4 UDP校验

  • 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和
    在这里插入图片描述
  • 所谓伪首部,可以理解它就是一个假的,它并没有一个实际的地址空间,在进行UDP报文封装的时候并没有这部分内容,要不然UDP协议的首部是20 (8+12) 个字节,而不是我们所说的8个字节,实际传输过程中,也并没有这样的字段
  • 设置这个伪首部,只是为了计算 校验和,这个伪首部包含的内容,如上图所示,这就有所疑问了,对于运输层来讲,本身没有IP地址这一概念,因为IP地址是在网络层中路由器转发所用的地址,为了计算校验和而强制引入的伪首部,包含IP地址信息,实际上会破坏网络分层,引入伪首部的目的,就是为了让UDP两次检查数据是不是正确的到达了目的地,其中一次是对UDP端口号和其他数据的校验,另一次是对IP地址的再校验,因为IP地址再路由器转发过程中,有可能会发现IP地址错误,所以UDP协议觉得IP地址校验是很有必要的
  • 如下就是校验的例子,简单来说就是把首部部分,每2个字节写成一行,然后按列排下来,每一列对应的每一位进行求和,得出来的结果再求反码,再将其放入校验和的位置中
    在这里插入图片描述
### 计算机网络 UDP协议 分析实验 UDP(User Datagram Protocol)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。在进行UDP协议分析实验时,可以借助仿真软件(如Packet Tracer)、Wireshark等工具来捕获解析UDP数据包。 #### 实验目标 通过本次实验,学生应掌握以下技能: - 学会使用网络仿真软件或抓包工具捕获UDP数据包[^1]。 - 掌握UDP协议的基本特性及其在网络通信中的应用场景[^2]。 - 能够分析UDP数据包的内容,理解其头部字段的意义及功能[^3]。 #### 所需工具 - **Packet Tracer**: 可用于模拟网络环境并发送UDP数据包[^1]。 - **Wireshark**: 常见的网络协议分析工具,可用于实时捕获分析UDP数据流[^4]。 #### 实验步骤概述 以下是基于Packet TracerWireshark的UDP协议分析实验的主要流程: ##### 1. 环境搭建 利用Packet Tracer构建一个简单的局域网拓扑结构,至少包含两台PC设备一台交换机。配置IP地址及相关参数以确保网络连通性[^1]。 ##### 2. 数据发送与接收 设置其中一台PC作为客户端,另一台作为服务器端。编写一段简单的Python脚本实现基于UDP的数据收发操作。 ```python import socket # 定义服务器地址端口 server_address = ('localhost', 9876) # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # 发送消息至服务器 message = b'This is the message.' sent = sock.sendto(message, server_address) # 接收响应 data, server = sock.recvfrom(4096) print('Received:', data.decode()) finally: sock.close() ``` 此代码片段展示了如何创建一个基本的UDP客户端程序[^2]。 ##### 3. 抓取与分析UDP数据包 启动Wireshark,在指定接口上开始捕捉流量。运行上述Python脚本后停止捕捉,并筛选出UDP类型的帧进一步查看细节部分,注意观察源/目的端口号、长度以及其他重要属性。 #### 结果讨论 通过对捕获到的UDP数据包深入剖析,验证理论知识的同时加深对实际应用的理解程度。例如确认是否存在丢包现象等问题发生原因探讨等等[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值