UDP是什么东西???

上古伪神

共 2780字,需浏览 6分钟

 ·

2021-05-02 18:18

前言

上一篇说了路由协议相关知识点,包括如何通过路由规则选择数据报出口,动态路由协议等信息。

今天是五一,那么就来聊一下UDP相关的知识点,依然是八股文。

如果MAC层定义了本地局域网的传输行为, IP层定义了整个网络端到端的传输行为, 这两层基本定义了这样的现象:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。包单独传输,自行选路,在不同的设备封装解封装,不保证到达。

UDP

UDP是一个简单的面向数据包的运输层协议

进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。

UDP不提供可靠性,只负责把应用程序传给IP层的数据发送出去,但并不保证它们能到达目的地。

「UDP特点」

  • 沟通简单
  • 随意传输,谁都可以传输数据到相应端口上
  • 不会根据网络情况进行改变

1、UDP首部

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

由于IP层已经把IP数据报分配给TCP或UDP(根据IP首部中协议字段值)

因此TCP端口号由TCP来查看,而UDP端口号由UDP来查看。

TCP端口号与UDP端口号是相互独立的。

UDP长度字段值是UDP首部和UDP数据的字节长度。

最小值为8字节,也就是没有数据

IP数据报长度值是数据报全长,因此UDP数据报长度是全长减去IP首部的长度。

2、UDP校验和

UDP检验和覆盖UDP首部和UDP数据,而IP检验和只覆盖IP的首部,不涉及到数据。

UDP的检验和是可选的,而TCP的检验和是必需的。

UDP检验和的基本计算方法与IP首部检验和计算方法类似,但存在不同点。

UDP数据报的长度可以为奇数字节,但检验和算法是把若干个16bit字相加。解决方法是在必要时在最后增加填充字节0,这只是为了检验和的计算。

UDP数据报和TCP端都包含一个12字节长的伪首部,为了计算检验和而设置的。

伪首部包含IP首部的一些字段,目的是让UDP两次检查数据是否已经正确到达目的地。

如果检验和的计算结果是0,则存入的值为全1(65535),这在二进制反码计算中是等效的。

如果传送的检验和为0,说明发送端没有计算检验和。

如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。

3、IP分片

「当需发送的数据包大小大于路径MTU时,就需要进行IP数据报分片」

把一份IP数据报分片以后,只有到达目的地才进行重新组装。

重新组装由目的端的IP层来完成,目的是使分片和重新组装过程对运输层(TCP和UDP)是透明的。

已经分片过的数据报有可能会再次进行分片,IP首部中包含的数据为分片和重新组装提供了足够的信息。

对于发送端发送的每份IP数据报来说,其标识字段都包含一个唯一值,在数据报分片时非复制到每个片中。

标志字段用其中一个比特来表示“更多的片”。

除了最后一片外,其他每个组成数据报的片都要把该比特置 1。

片偏移字段指的是该片偏移原始数据报开始处的位置。

当数据报被分片后,每个片的总长度值要改为该片的长度值。

标志字段中有一个比特称作“不分片”位,如果这一比特为1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个ICMP差错报文。

当IP数据报分片后,每一片都成为一个分组,有自己的IP首部,并在选择路由器时与其他分组独立。固有可能在到达目的端时失序。

一片数据的丢失也要重传整个数据报。因为对数据报分片的是中间路由器,而不是起始端系统,后者根本不知道数据报是如何分片的。

4、ICMP不可达报错(需分片)

发生ICMP不可达差错的另一种情况是,当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特。

如果路由器没有提供过这种新的ICMP差错报文格式,那么下一站的MTU就设为0.

5、Traceroute

能深入探索TCP/IP协议的方便可用的工具。

不能保证从源端发往目的端的两份连续的IP数据报具有相同的路由。

开始时发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可达的报文。

Traceroute除了能发现路由之外,还能用它来确定路径MTU。

「确定路径MTU:」 发送分组,设置“不分片”标志比特。发送的第一个分组长度正好与出口MTU相等,每次收到ICMP“不能分片”差错是就减少分组的长度。

6、最大UDP数据报长度

理论上,IP数据报的最大长速度是65535字节,这是IP首部16比特总长度字段所限制的。

去除20字节的IP首部和8字节的UDP首部,UDP数据报中用户数据的最长长度为65507字节。

但一般实现所提供的长度比这个最大值小。

两个限制因素:

(1)应用程序可能会受到其程序接口的限制。例如socket API可以设置接收和发送缓存的长度。

(2)TCP/IP的内核实现。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。

7、ICMP源站抑制报错

当一个系统接收数据报的速度比其处理速度快时,可能会产生此报错。

「可能」一词是因为即使一个系统已经没有缓存并丢弃数据报,也不要求它一定要发送源站抑制报文。

UDP与TCP的区别

(1) TCP是面向连接的,UDP是面向无连接的。

「什么是面向连接?」

面向连接的协议会先建立连接,例如,TCP会进行三次握手,UDP不会。

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

(2)TCP提供可靠交互,通过TCP连接传输的数据,无差错、不丢失、不重复、按序到达。

而UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达。

(3)TCP是面向字节流的,而UDP继承了IP的特性,基于数据包的,一个一个发,一个一个收。

(4)TCP有拥塞控制,根据接收方的吞吐量控制发送速度,但UDP没有。

(5)TCP是有状态的服务,UDP是无状态服务。

使用场景

  • 需要资源少,在网络情况较好的内网,或者对于丢包不敏感的应用。

  • 不需要建立连接,而是可以广播的应用

    DHCP就是一种广播的形式,基于UDP协议。

    多播,D类地址,也即组播地址。使用此地址可将包组播给一批机器。

  • 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也不改变发送速度。


往期推荐:

路由协议

网关和路由

CV工程师用不到的链路层知识点

星巴克气氛组电脑是如何获取IP的

浏览器发起HTTP请求后经历了什么?

推荐一个生产环境问题排查利器

MySQL系列文章

k8s全系列文章汇总

浏览 52
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报