二、UDP

一、UDP介绍

1. UDP是一个简单的面向数据报的传输层协议: 进程的每个输出操作都正好产生一个UDP数据报,并且组装成一个待发送的IP数据报。
2. UDP与面向字节流(数据流)的协议(TCP)不同,应用程序产生的全体数据与整整发送的单个IP数据报可能没什么联系。
3. UDP不提供可靠性: 它把应用程序传给IP层的数据发送出去,但是并不保证他们能到达目的地。
4. 应用程序必须关心IP数据报的长度。如果它超过了网络的MTU, 那么就要对IP数据报进行分片。

二、UDP的应用

1. 查询类 DNS
  没有TCP三次握手的过程,所以会快
  支持多个DNS同时查询
2. 数据传输: TFTP
  停止等待协议, 所以会慢(需要应用层确认数据)
  适合于无盘工作站
3. 语音视频流
  支持广播和组播
  支持丢包,保障效率

二、UDP封装

2.1 以太网首部(14 byte)

2.2 IP首部(20 byte)

2.3 UDP的报文结构

 

 

 1. 端口号表示发送进程和接收进程

2. TCP和UDP的端口号是相对独立的

3. 尽管相对独立,如果TCP和UDP同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求

4. UDP长度是指UDP首部和UDP数据的字节长度。该字段的最小值是8字节

2.3.1 源端口(2 byte)

 

2.3.2 目的端口(2 byte)

 

2.3.3 长度(2 byte)

 

2.3.4 校验和(2 byte)

 

 

 

1. UDP校验和覆盖UDP首部和UDP数据
2. IP校验和覆盖IP的首部
3. UDP的校验和是可选的,TCP的校验和是必需的
4. IP计算校验和和UDP计算校验和之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是校验和算法是把若干个16bit相加。解决方法是必要时最后增加填充字节0,这只是为了校验和的计算。(也就是说,可以填充字节不被传送)
5. UDP数据报和TCP数据报包含一个12byte长的伪首部,它是为了计算校验和而设置的。伪首部包含IP首部的一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP没有接受地址不是本主机的数据报,以及IP没有把应传给另一个高层的数据报传给UDP)

2.3.5 数据

三、IP分片

3.1 IP分片产生原因

以太网的MTU是1500,如果IP层有数据包要传,而且数据包的长度超过了MTU,那么IP层就要对数据包进行分片(fragmentation)操作,使每一片的长度都小于或等于MTU。我们假设要传输一个UDP数据包,以太网的MTU为1500字节,一般IP首部为20字节,UDP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据部分大于1472字节,就会出现分片现象。

3.2 IP分片介绍

1. IP把MTU与数据报长度进行比较。
2. 如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
3. 把一份IP数据报分片以后,只有到达目的地才进行重新组装。(FR fragment)
4. 重新组装由目的短的IP层来完成,其目的是使分片和重新组装过程对传输层是透明的。
5. 已经分片过的数据报有可能再次进行分片(可能不止一次)

1. 当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片
2. 尽管IP分片过程看起来是透明的,但有点一点: 即使只丢失一片数据也要重传整个数据报
3. IP层本身没有超时重传机制。由更高层来负责超时和重传(TCP有超时和重传机制,但是UDP没有。一些UDP应用程序本身也执行超时和重传)。当来自TCP报文段的某一片丢失后,TCP在超时和重传后会重发整个TCP报文段,该报文段对应于一份IP数据报,没有办法只重传数据报中的一个数据报片
4. 如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。就是这个原因,所以要经常避免分片。

3.3 IP分片实例

 

 

RAW 消息发送4000字节长度的UDP消息,就会被分片成3包数据
1514 - 14(以太网首部) - 20(IP首部) - 8(UDP首部) = 1472
1514 - 14(以太网首部) - 20(IP首部) = 1480
1082 - 14(以太网首部) - 20(IP首部) = 1048

1472 + 1480 + 1048 = 4000

 

 

 

1. 在分片时,除最后一片外,其余每一片的数据部分(除IP首部外的其余部分)必须是8字节的整数倍
2. IP首部都被复制到各个片中。但是,端口号在UDP首部,只能在第一片中被发现
3. IP数据报指的是IP层端到端的传输单元(在分片之前和重组之后),分组是指在IP层和网络接口层之间传输的数据单元。一个分组可以是完整的IP数据报,也可以是IP数据报的一个分片。
4. 如果最后一片数据 IP头部(20)+ 数据 < 46 的话,那么需要在最后用 0 补齐46个字节

四、UDP的应用协议 ---- TFTP

https://www.cnblogs.com/wangyong123/articles/17014722.html

 

posted on 2022-12-30 16:21  软饭攻城狮  阅读(239)  评论(0编辑  收藏  举报

导航