【计算机网络】为什么大IP数据包需要分片?源地址和目的地址已经封装在数据链路层帧中,为什么这两个地址又包含在网络层中?为什么DV路由算法收敛时间长?
2021/11/29 1:06:08
本文主要是介绍【计算机网络】为什么大IP数据包需要分片?源地址和目的地址已经封装在数据链路层帧中,为什么这两个地址又包含在网络层中?为什么DV路由算法收敛时间长?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
找不到原文地址了,看到另一个博主转的,再发一遍吧。
1.问题:为什么大IP数据包需要分片?
因为有MTU(最大传输单元)限制,一般以太网是1500B,超过这个大小是不能在网络中传输的,所以对于大于这个大小的数据包就进行分片,分成小于它的数据包,到了目的地再组装起来。
在这里,再给出更加详细的解释:
一.什么是最大传输单元(MTU)
IP 协议是用于传输数据包的协议,作为网络层协议,它能提供数据的路由和寻址功能,让数据通过网络到达目的地2。不同设备之间传输数据前,需要先确定一个 IP 数据包的大小上限,即最大传输单元(Maximum transmission unit,即 MTU),MTU 是 IP 数据包能够传输的数据上限。
MTU 的值不是越大越好,更大的 MTU 意味着更低的额外开销,更小的 MTU 意味着更低的网络延迟。每一个物理设备都有自己的 MTU,两个主机之间的 MTU 依赖于底层的网络能力,它由整个链路上 MTU 最小的物理设备决定3,如下图所示,网络路径的 MTU 由 MTU 最小的红色物理设备决定,即 1000:
图 2 - 路径最大传输单元发现
路径最大传输单元发现(Path MTU Discovery,PMTUD)是用来确定两个主机传输路径 MTU 的机制,它的工作原理如下:
(1)向目的主机发送 IP 头中 DF 控制位为 1 的数据包,DF 是不分片(Don’t Fragment,DF)的缩写;
(2)路径上的网络设备根据数据包的大小和自己的 MTU 做出不同的决定:
- 如果数据包大于设备的 MTU,就会丢弃数据包并发回一个包含该设备 MTU 的 ICMP 消息;
- 如果数据包小于设备的 MTU,就会继续向目的主机传递数据包;
(3)源主机收到 ICMP 消息后,会不断使用新的 MTU 发送 IP 数据包,直到 IP 数据包达到目的主机;ICMP 是互联网控制消息协议(Internet Control Message Protocol,ICMP),它能在 IP 主机之间传递控制消息。
以太网对数据帧的限制一般都是 1500 字节,在一般情况下,IP 主机的路径 MTU 都是 1500,去掉 IP 首部的 20 字节,如果待传输的数据大于 1480 节,那么该 IP 协议就会将数据包分片传输。
IP 协议数据分片对传输层协议是透明的,假设我们使用 UDP 协议传输 2000 字节的数据,加上 UDP 8 字节的协议头,IP 协议需要传输 2008 字节的数据。如下图所示,当 IP 协议发现待传输的数据大于 1480 字节,就会将数据分成下面的两个数据包:
图 3 - 分片传输的 UDP 数据
- 20 字节 IP 协议头 + 8 字节 UDP 协议头 + 1472 字节数据;
- 20 字节 IP 协议头 + 528 字节数据;
数据的接收方在收到数据包时会对分片的数据进行重组,不过因为第二个数据包中不包含 UDP 协议的相关信息,一旦发生丢包,整个 UDP 数据报就无法重新拼装。如果 UDP 数据报需要传输的数据过多,那么 IP 协议就会大量分片,增加了不稳定性。
如果 IP 协议没有数据包大小的限制,那么上层可以以消息为单位传输数据,自然就不存在分片和组装的需求,不过因为物理设备的 MTU 限制,想要保证数据传输的可靠性和稳定性还需要传输层的配合。
问题2.源地址和目的地址已经封装在数据链路层帧中,为什么这两个地址又包含在网络层中?
首先我们要知道数据链路层的主要功能:
链路层是为网络层提供数据传送服务的,这种服务是依靠本层具备的功能以及物理层提供的服务来实现。所以这两个地址包含在链路层中。
问题3.为什么DV路由算法收敛时间长?
首先要想回答这个问,我们就要了解DV算法和LS路由算法的特点和区别。
1、工作原理的不同
LS算法中,网络拓扑和所有的链路费用都是已知的,也就是说可用来做LS算法的输入。在实践中,这是通过让每个节点向网络中所有其他路由器广播状态分组来完成,其中每个链路分组包含它所连接的链路的特征和费用,这经常用链路广播算法来完成。节点广播的结果是所有节点具有了该网络的同一个以及完整的视图。于是每个节点都可像其他节点一样,运行LS算法并计算相同的最低费用路径集。在此算法中,每个节点经广播与所有其他节点交谈。
DV算法中,每个节点仅与他的直接邻居交谈,但它为他的邻居提供了从其自己到网络中所有其他节点的最低费用。DV算法要求每个路由器都要向其他邻接的路由器发布一个距离向量,距离向量是该路由器到其他已知的各网络的相对距离。通告内容基本上是告诉其邻接的路由器:你可以通过我到达网络X,距离是Y。从本地路由器到X的有效距离等于该路由器从各邻接路由器接收到的最短距离,再加上他与该邻接路由器之间的链路距离。
与该邻接路由器之间的链路距离。
2、算法结构不同
显然LS算法是一种全局信息的算法,而DV算法是一种迭代的,异步的和分布式的算法。说它是分布式的,是因为每个节点都要从一个或多个直接相连邻居接受某些信息,执行计算,然后将计算结果发回给邻居。说它是迭代的,是因为此过程一直要持续到邻居之间没有更多要交换的信息为止。说该算法是异步的,是因为他不要求所有节点相互之间锁步,即步伐一致的工作。
3、时间复杂性
考虑LS算法,即给定n个节点,考虑最坏情况下需要经多少次计算才能找到从源节点到所有目的节点的最低费用呢。
1)在第一次迭代时,我们需要搜索所有的n个节点以确定出节点w,w不在n-1中且具有最低费用。
2)第二次我们需要检查所有的n-1个节点以确定最低费用。
3)第三次,需要检查n-2个节点,依此类推。
因此,我们在所有迭代中需检索n+(n-1)+(n-2)+…+1=n(n+1)/2个节点。所以我们可以得出LS算法在最差情况下的时间复杂度为n的平方阶。
考虑DV算法,它存在对好消息的反应迅速,但对坏消息却反应迟钝。特别是对坏消息存在计数无穷大问题。当链路的权值变化很大时,它的时间复杂性也就很难确定了。
4、报文复杂性
LS算法要求每个节点知道网络中每条链路的费用。这就要发送O(|N||E|)个报文。
DV算法要求在每次迭代时,在两个直接相连的邻居之间交换报文。在链路费用改变时,DV算法仅当在新费用导致与该链路相连节点的最低费用路径发生改变时,才传播已改变的链路费用。
5、收敛速度
收敛是路由算法选择时所遇到的一个重要问题。收敛时间是指从网络的拓扑结构发生变化到网络上所有的相关路由器都得知这一变化,并且相应地做出改变所需要的时间。这一时间越短,网络变化对全网的扰动就越小。收敛时间过长会导致路由循环的出现。
LS在直接相连的路由之间维护正常的邻居关系。这允许路由更快收敛。链路状态路由协议在会话期间通过交换Hello包(也叫链路状态信息)创建对等关系,这种关系加速了路由的收敛。
而DV算法收敛较慢,且在收敛过程中会遇到选路环路。DV算法还会遭到计数无穷大的问题。
6、跳数的限制
DV使用跳数或向量来确定从一个设备到另一个设备的距离。不考虑每跳链路的速率。
LS没有跳数的限制,使用“图形理论”算法或最短路径优先算法。
7、路由表的更新
DV算法根据相邻节点的路由信息更新自己的路由表并发送整个路由表。DV的这种特性随着路由表的增大,需要消耗更多的CPU资源,并消耗了内存。
LS算法,每个节点都有一个全局的拓扑结构,根据此拓扑结构计算路由表。不像DV那样,更新时发送整个路由表。LS只广播更新的或改变的网络拓扑,这使得更新信息更小,节省了带宽和CPU利用率。另外,如果网络不发生变化,更新包只在特定的时间内发出(通常为30min到2h)。
8、健壮性
如果一台路由器发生故障,行为错乱或受到破坏时情况会怎样呢?
对于LS算法,路由器能够向其连接的的一条链路广播不正确费用。一个节点作为LS广播的一部分也可损坏或丢弃它收到的任何LS广播分组。但是一个LS节点仅计算自己的转发表:其他节点为自己做类似的计算。这就意味这在LS算法下,路由计算有些是孤立的,提供了一定程度的健壮性。
在DV算法下,一个节点可向任意或所有的目的节点通告其不正确的最低费用路径。DV算法中一个不正确的节点计算值会扩散到整个网络。
9、可扩展性
DV算法可扩展性差。相对而言,LS算法可扩展性好,可靠。
10、环路
尽管最基本的DV协议描述和实现起来非常简单,但是会导致网络中的最短通路树在短时间内出现环路。一个基于DV的网络路由可能需要花费几十秒到几分钟才能汇聚到一个无环路的拓扑。如果本地路由器对于本地链路以外的网络属性只能掌握一些二手的,已被解释过的信息,那么在任何一种这样的方案中低速汇聚都是一种根本的局限性。LS协议,虽然与DV协议相比较,即便是对于最基本的形式,它的描述和实现都是很复杂的,但它有一个优点,当链路状态发生变化时,在变化的信息传播到网络中以后,我们立即就可以得到不存在环路的最短通路树。
这篇关于【计算机网络】为什么大IP数据包需要分片?源地址和目的地址已经封装在数据链路层帧中,为什么这两个地址又包含在网络层中?为什么DV路由算法收敛时间长?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南