我们在【三、概述篇-计算机网络的定义、分类和性能指标】中学习了计算机网络中一个重要的性能指标:时延。我们来回顾下这个重要指标,深入学习发送时延和传播时延如何计算,本篇文章也是本系列概述篇的最后一篇文章。
一、三种时延的定义
(此图是用Adobe Animate所画,有点意思,哈哈哈…)
第一个是发送时延:数据包从主机里面发送到通信链路上(从第一个比特到最后一个比特)需要一定的时间。
第二个是传播时延:分组数据包的信号在通信链路上传输需要花费时间。
第三个是处理时延:路由器对分组数据包进行存储转发需要花费时间。
一般来说,源主机与目的主机之间的路径会有多段链路和多个路由器构成,因此会有多个传播时延和处理时延。
二、三种时延如何计算
发送时延如何计算呢?
发送时延=分组长度 / 发送速率。网卡的发送速率,信道带宽,交换机/路由器的接口速率,它们共同决定着主机的发送速率。
传播时延=信道长度 / 电磁波传播速率。电磁波在不同介质中的传播速率是不一样的!所以要计算传播时延,首先应该确定采用的是什么传播媒体,进而可以确定电磁波在该传输媒体中的传播速率。这个速率可以认为是固定的,因此传播时延是信道长度的函数。
处理时延没有简单的计算公式,因为它不方便计算。网络中的数据流量是动态变化的,因此,路由器的繁忙程度也是动态变化的;另外,各种路由器的软硬件性能也可能有所不同,因此,很难用一个公式计算出处理时延!有的教材中还有一个排队时延(分组数据包在路由器中的排队等待时间),在这里将排队时延与处理时延合并为处理时延。
三、发送时延和传播时延
计算机网络领域的新手有时难以理解发送时延和传播时延之间的差异,该差异虽说细小但是很重要。发送时延是路由器将分组推出所需要的时间,它是分组长度和链路传输速率的函数,而与两台路由器之间的距离无关。传播时延是一个比特从一台路由器向另一台路由器传播所需要的时间,它是两台路由器之间距离的函数,但与分组的长度或链路的传输速率(我这里理解它说的应该是分组的发送速率)无关。
摘自维基百科对发送时延和传播时延的比较,是比较精确点出了各自概念上的区别,下面我们更深入了解下发送时延和传播时延。(注意,下面的讨论是基于忽略处理时延而言的)
假设主机要发送数据,横坐标表示距离,链路带宽为1Mb/s
,信号在信道中传播速率为2.0*10^8m/s
。
我们把比特看作一个长长的小条,分为头端和末端,从主机刚出来的时候是头端,等末端离开主机了,说明这个比特已经被发送出去了:
我们还记得在【三、概述篇-计算机网络的定义、分类和性能指标】中,将比特比作一个生物,带宽比作是管子吗?
我们的比特从管子中爬出来,我们认为它的尾部完全出来了,才能算是发送到链路成功,比如像下面这个样子(假设1Mb/s的带宽下一次只能出来一个比特):
那么此时,这个比特的发送时延是多长时间呢?
根据木桶效应,发现链路带宽为1Mb/s
,网卡的速率一般是远超过这个速度的,所以我们可以认为分组的发送速率就是这里的链路带宽为1Mb/s
,由于就一个比特,所以分组的长度就是1,好了,发送时延也就很好计算了:1b/(1Mb/s)=1微秒。
不过我们说过,当比特生物的尾部刚离开主机的时候,头部已经发送到链路中了,所以此时,当比特尾部离开主机时,整个比特已经前进了一段距离,这个距离就是拿传播速率乘以时间,即2.0*10^8m/s
*1微秒
=200m
.
也就是说,在发送时延的这段时间内,整个比特已经向前跑了200米。
主机继续发送第二个比特:
很显然,第二个比特发送也需要耗费1微秒,两个比特发送时延一共加起来为2微秒,此时第一个比特的前端已经传播出去400米了。
继续发送第三个比特,整体情况为:
此时,我们将链路带宽扩大为8Mb/s,其他条件不变,那么此时主机一次性可以发出8个比特。
可以看到,链路带宽提高了8倍,单位时间内发送出来的比特数量提高了8倍。通过以上说明,我们加深了对发送时延和传播时延的理解了,下面来一道题目。
题目一:
两主机间的链路长度为60m,链路带宽为10Mb/s,信号的传播速率为
2.0*10^8m/s
,其中一台主机给另一台主机发送1b信息,当主机接收完该信息时共耗费多长时间?
通过上述流程,我们容易得到答案:
1个比特的发送时延:1b/10Mb/s=0.1微秒
1个比特的传播时延:应该是比特的尾端完全被对方主机接收(专业点叫信号后沿需要经过1个传播时延才能到达另一台主机),那么距离就是60m,传播时延为60m/2.0*10^8m/s=0.3微秒。
一共需要0.1+0.3=0.4微秒,解答完毕。
题目二:
两主机间的链路长度为20m,链路带宽为10Mb/s,信号的传播速率为
2.0*10^8m/s
,其中一台主机给另一台主机发送1b信息,当主机接收完该信息时共耗费多长时间?
题目将链路长度修改为20米,其他不变,此时总共需要耗费多少发送时延和传播时延呢?
1个比特的发送时延:1b/10Mb/s=0.1微秒
1个比特的传播时延:20m/2.0*10^8m/s=0.1微秒
一共需要0.1+0.1=0.2微秒,解答完毕。
题目三:
两主机间的链路长度为10m,链路带宽为10Mb/s,信号的传播速率为
2.0*10^8m/s
,其中一台主机给另一台主机发送1b信息,当主机接收完该信息时共耗费多长时间?
1个比特的发送时延:1b/10Mb/s=0.1微秒
1个比特的传播时延:10m/2.0*10^8m/s=0.05微秒
一共需要0.1+0.05=0.15微秒,解答完毕。
那么请思考题目四:如果其中一台主机给另一台主机连续发送n比特信息,共耗费多长时间?
题目四:
两主机间的链路长度为60m,链路带宽为10Mb/s,信号的传播速率为
2.0*10^8m/s
,其中一台主机给另一台主机发送nb信息,当主机接收完该信息时共耗费多长时间?
解法一:
由于我们知道一个比特的耗费时间为0.4微妙,那么n比特就是0.4n微妙。
解法二:
n个比特的发送时延:nb/10Mb/s=0.1n微秒
n个比特的传播时延:60m/2.0*10^8m/s=0.3微秒
因此n比特一共耗费的是(0.1n+0.3)微秒。
那么哪种解法对呢?
显然是第二种。因为比特在发送的同时也在传播,且是连续发送,发送和传播是一个时间重叠的过程,增大比特数量,只是增大了发送时延,而传播时延数量不变,这里说的更直接一点就是,传播时延只要考虑最后一个比特的后端到达对面主机的时间。用下面的图来表示会更加清晰:
若主机在一段链路上连续发送分组,则总时延为所有分组的发送时延加上信号在这一段链路上的传播时延。
上面我们看的是在一段链路上传输,但是实际的情况是多段链路,会经过交换机/路由器进行存储转发。(基于分组交换)
假设分组等长、各链路长度相同、带宽相同,忽略路由器的处理时延,那么下面以三种情况为例。
1个分组,3段链路:
总时延=【1个分组发送时延】+【1个分组的发送时延 * 2】+【1段链路的传播时延 * 3】
2个分组,3段链路:
总时延=【2个分组发送时延】+【1个分组的发送时延 * 2】+【1段链路的传播时延 * 3】
3个分组,3段链路:
总时延=【3个分组发送时延】+【1个分组的发送时延 * 2】+【1段链路的传播时延 * 3】
那么n个分组,m段链路,总时延就为:【n个分组发送时延】+【1个分组的发送时延 * (m-1)】+【1段链路的传播时延 * m】
其中,(m-1)是转发次数,m段链路就有(m-1)次转发。
四、习题强化
【问题】试在下列条件下比较电路交换和分组交换。
要传送的报文共x(bit),从源点到终点共经过k段链路,每段链路的传播时延为d(s),宽带为b(bit/s),在电路交换时,电路的建立时间为s(s)。在分组交换时,报文可被划分为若干个长度为p(bit)的数据段,添加首部后即可构成分组,假设分组首部的长度以及分组在各结点的排队等待时间忽略不计。
问:在怎么样的条件下,电路交换的时延比分组交换的要大?
【解答】
我们回顾下电路交换:首先建立电路连接,随后就是点对点通信,如下图所示。
整体计算过程如下:
OK,相信读者朋友们已经对时延问题有了更加深刻的理解,计算机网络的概述篇到此为止,下面即将进入物理层的学习。
原文始发于微信公众号(幕后哈土奇):六、概述篇-对时延问题的深入
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114276.html