前言
上一篇说了路由协议相关知识点,包括如何通过路由规则选择数据报出口,动态路由协议等信息。
今天是五一,那么就来聊一下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类地址,也即组播地址。使用此地址可将包组播给一批机器。
- 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也不改变发送速度。
===============================
我是Liusy,一个喜欢健身的程序员。
获取更多干货以及最新消息,请关注公众号:上古伪神
如果对您有帮助,点个关注、转发就是对我最大的支持!!!谢谢
关键词:UDP是啥东西(UDP指啥)