P1 设计并描述在自动柜员机和银行的中央计算机之间使用的一种应用层协议。你的协议应当允许验证用户卡和口令,查询账目结算(这些都在中央计算机系统中进行维护),支取账目(即向用户支付钱),你的协议实体应当能够处理取钱时账目中钱不够的常见问题。通过列出自动柜员机和银行中央计算机在报文传输和接收过程中交换的报文和采取的动作来定义你的协议。使用类似于图 1-2 所示的图,拟定在简单无差错取钱情况下该协议的操作。明确地阐述在该协议中关于底层端到端运输服务所作的假设。
Request
Command : xxxx
Parameter : xxx
Response
ClientOpResult : xxx
ATMOp : xxx
Message : xxx
/********************************* 正常流程 ***************************************/
ATM Bank
----------------------------------------------------------------------------------
Command : WithdrawMoney
Parameter : NULL ---------------------->
<---------------------- OpResult : OK
Message : Enter Your Name And Password
ATMOp : DisplayMessage | ReadInput
Command : InputNameAndPassword
Parameter : Hanson&123 ------------------->
OpResult : Ok
Message : Check Success, Please Enter Amount
ATMOp : DisplayMessage | ReadInput
<----------------------
Command : InputAmount
Parameter : 1000 ---------------------->
OnResult : OK
Message : Enough, Here you are, Bye
ATMOp : DisplayMessage | Counting
/*********************************** 钱不够 ***************************************/
ATM Bank
----------------------------------------------------------------------------------
Command : WithDrawMoney
Parameter : NULL ---------------------->
<---------------------- OpResult : OK
Message : Enter Your Name And Password
ATMOp : DisplayMessage | ReadInput
Command : InputNameAndPassword
Parameter : Hanson&123 ------------------->
OpResult : Ok
Message : Check Success, Please Enter Amount
ATMOp : DisplayMessage | ReadInput
<----------------------
Command : InputAmount
Parameter : 1000 ---------------------->
OnResult : Fail
Message : Not Enough, Bye
ATMOp : DisplayMessage | Exit
/********************************* 正常流程 ***************************************/
ATM Bank
----------------------------------------------------------------------------------
Command : WithDrawMoney
Parameter : NULL ---------------------->
<---------------------- OpResult : OK
Message : Enter Your Name And Password
ATMOp : DisplayMessage | ReadInput
Command : InputNameAndPassword
Parameter : Hanson&123 ------------------->
OpResult : Fail
Message : Check Fail, Password wrong or User not exist!
ATMOp : DisplayMessage | Eixt
T = (N + P - 1) x L / R
N * L / R 秒后,第一个分组到达目的主机,此时第二个分组到达了最后一个路由,又经过 L / R 秒后,第二个分组到达目的主机,以此类推,经过 (P - 1) 秒后,最后一个分组到达目的主机。
P3 考虑一个应用程序以稳定的速率传输数据(例如,发送方每 k 个时间单元产生一个 N 比特的数据单元,其中 k 较小且固定)。另外,当这个应用程序启动时,它将连续运行相当长的一段时间。回答下列问题,简要论述你的回答:
a.
电路交换更适合这种应用;
- 发送方速率恒定,即发送方不会闲置带宽
- 发送方速率稳定且没有突发性质的分组,即使用不会超出预置带宽
- 程序启动后将运行相当长的一段时间,即启动预分配电路和资源的时间被运行时间分摊
b.
不需要;
- 发送方传输速率的总和小于每条链路的各自容量,所以流量强度小于 1,即输出队列长度不会无界增加
- 假设发送速率为 L 分组/s,传输速率为 R 分组/s,每隔 L/R 秒发送 1 分组数据,那么每个分组将没有排队时延,假如每隔 N * L/R (题目已经说了 k 较小,如果 k 很大,因为现实世界输出缓存有容量限制,那么可能一开始就有丢包)秒发送 N 分组数据,虽然除了第一个分组外每个分组都有一定的排队时延,但是在 N * L/R 秒内这些分组将全部被推上下一条链路而不会让队列长度继续增加,所以不会出现丢包现象。
a.
8由上述图表示,任何时候能够同时进行连接的数量是 16 个。
b.
4由上述图表示,A 和 C 之间能够进行同时连接的最大数量是 8
c.
不能能
a.
车队旅行 150 km,每个收费站间相隔 75 km,传播时延需要 45 分钟。 假设收费站服务每辆车时间为 12 s,那么 10 辆车总共需要 2 分钟。 提前到达收费站的车辆需要等待最后一辆车到达才能开始接收服务。
T = (2 + 45) x 2 + 2 = 96 分钟
b.
T = (1.6 + 45) x 2 + 1.6 = 94.8 分钟 = 94 分钟 48 s
P6 这个习题开始探讨传播时延和传输时延,这是数据网络中的两个重要概念。考虑两台主机 A 和 B 由一条速率为 R bps 的链路相连。假定这两台主机相隔 m 米,沿该链路的传播速率为 s m/s。主机 A 向主机 B 发送长度为 L 比特的分组。
a.
d_prop
=m / s
b.
d_trans
=L / R
c.
T_端_to_端
=d_prop + d_trans = m / s + L / R
d.
该分组的最后一个比特刚刚被推上链路准备开始传送
e.
第一个比特在链路上被传送了
sL / R
米,还没有到达 B。f.
t =
0
,开始处理第一个比特t =
1 / R
,第一个比特被推上了链路t =
1 / R + m / s
,第一个比特到达 Bt =
L / R
,最后一个比特被推上了链路第一个比特已经到达 B ,并且等待了
(L - 1) / R - m / s
秒g.
m =
L * s / R
= 535714 m = 535 公里
P7 在这个习题中,我们考虑从主机 A 向主机 B 通过分组交换网发送语音 (VoIP)。主机 A 将模拟语音转换为传输中的 64 kbps 数字比特流。然后主机 A 将这些比特分为 56 字节的分组。A 和 B 之间有一条链路:它的传输速率是 2 Mbps,传播时延是 10 ms。一旦 A 收集了一个分组,就将它向主机 B 发送。一旦主机 B 接收到一个完整的分组,它将该分组的比特转换成模拟信号。从比特产生(从位于主机 A 的初始模拟信号起)的时刻起,到该比特被解码(在主机 B 上作为模拟信号的一部分),花了多少时间?
T = (56 x 8) / (2 x 10^6) x 10^3 + 10 = 10.224 msA 开始传送分组前,分组中的所有比特都应该已生成,而生成一个分组的所有比特所需的时间为 56 x 8 / (64 x 10^3) = 7 ms 再加上传输时延和传播时延为 7 ms + 10.224 ms = 17.224 ms
a.
当使用电路交换时能支持的用户数量为:
3 x 10^3 / 150 = 20
个b.
每个用户仅有 10% 的时间传输,即给定用户正在传输的概率为 0.1
c.
C(120,n) x 0.1^n x 0.9^(120 - n)
d.
P(X >= 21) = 1 - P(X < 21)
//TODO 概率论与数理统计 - 陈希儒
P9 考虑在 1.3 节 "分组交换与电路交换的对比" 的讨论中,给出了一个具有一条 1 Mbps 链路的例子。用户在忙时以 100 kbps 速率产生数据,但忙时仅以 p = 0.1 的概率产生数据。假定用 1 Gbps 链路替代 1 Mbps 的链路。
a.
N = 10^6 kbps / 10^2 kbps = 1 万用户
b.
P (X = N + 1) = C(M, N + 1) x p^(N + 1) x (1 - p)^(M - N - 1)
P (X > N) = P(X = N + 1) + P(X = N + 2) + ... P(X = M)
//TODO 概率论与数理统计 - 陈希儒
P10 考虑一个长度为 L 的分组从端系统 A 开始。经 3 段链路传送到目的端系统。令 di、si 和 Ri 表示链路 i 的长度、传播速度和传输速率(i = 1,2,3)。该分组交换机对每个分组的时延为 d_proc
。假定没有排队时延,根据 di、si、Ri(i = 1, 2, 3) 和 L,该分组总的端到端时延是什么?现在假定该分组是 1500 字节,在所有 3 条链路上的传播时延是 2.5 x 10^8 m/s,所有 3 条链路的传输速率是 2 Mbps,分组交换机的处理时延是 3 ms,第一段链路的长度是 5000 km,第二段链路的长度是 4000 km,并且最后一段链路的长度是 1000 km。对于这些值,该端到端时延为多少?
T_端_to_端 = L/R1 + d1/s1 + L/R2 + d2/s2 + L/R3 + d3/s3 + 2 x d_proc
L/R = 1.2 x 10^4 x 10^3 / (2 x 10^6) = 6 ms
传播时延 = 10^7 x 10^3 / (2.5 x 10^8) = 40 ms
处理时延 = 3 x 2 = 6 ms
T_端_to_端 = 6 x 3 + 6 + 40 = 64 ms
T_端_to_端 = L/R + d1/s1 + d2/s2 + d3/s3 = 6 ms + 40 ms = 46 ms
P12 一台分组交换机接收到一个分组并决定将该分组应当转发的出链路。当某分组到达时,另一个分组正在该出链路上被发送到一半,还有 4 个其他分组正等待传输。这些分组以到达的次序传输。假定所有分组是 1500 字节并且链路速度是 2 Mbps。该分组的排队时延是多少?在更一般的情况下,当所有分组的长度是 L, 传输速率是 R, 当前正在传输的分组已经传输了 x 比特,并且已经在队列中有 n 个分组,其排队时延是多少?
T = (750 x 8 + 4 x 1500 x 8) / (2 x 10^6) = 0.027 s = 27 ms
T = (L - x + n x L) / R = [(n + 1) x L - x] / R
第一个分组
d_queue1 = 0
第二个分组
d_queue2 = L/R
第三个分组
d_queue3 = 2 x L/R
第 N 个分组
d_queueN = (N - 1) x L/R
综上,N 个分组的总排队时延为
L/R x (1 + 2 + 3 + ... + N - 1) = N x L x (N - 1) / (2 x R)
所以,其平均排队时延
L x (N - 1) / (2 x R)
T_delay = I x L/R x (1 - I) + L/R = (L/R) / (1 - I)
令
L/R = x
,则T_delay = x / (1 - a x x)
P15 令 a 表示在一条链路上分组的到达率(以分组/秒计), 令 u 表示一条链路上分组的传输率(以分组/秒计)。基于上述习题中推到处的总延时公示(即排队时延加传输时延), 推导出以 a 和 u 表示的总时延公示。
u = R/L
I = La/R = a/u
T_delay = 1 / (u - a)
P16 考虑一台路由器缓存前面的一条出链路。在这个习题中,将使用李特尔公式,这是排队论中的一个著名公式。令 N 表示在缓存中的分组加上被传输的分组的平均数。令 a 表示到达链路的分组速率。令 d 表示一个分组经历的平均总延时(即排队时延加传输时延)。李特尔公式是 N = a x d。假定该缓存平均包含 10 个分组,并且平均分组排队时延是 10 ms。该链路的传输速率是 100 分组/秒。使用李特尔公式,在没有丢包的情况下,平均分组到达率是多少?
N = 10 + 1 = 11
传输速率是每秒 100 个分组,那么每个分组耗时 1/100 秒 = 0.01 s
a = N/d = 11 / (0.01 + 0.01) = 11 / 0.02 = 550 分组/s
// TODO
c. 试图根据源到目的地 Traceroute 分组通过的情况,辨明 ISP 网络的数量。具有类似名字和 / 或类似的 IP 地址的路由器应当被认为是同一个 ISP 的一部分。在你的实验中,在相邻的 ISP 间的对等接口处出现最大的时延了吗?
// TODO
P19 a. 访问站点 "www.traceroute.org", 并从法国两个不同的城市向位于美国的相同的目的主机执行 Traceroute。在这两个 Traceroute 中,有多少条链路是相同的?大西洋沿岸国家的链路相同吗?
P20 考虑对应于图 1-20b 吞吐量的例子。现在假定有 M 对客户-服务器而不是 10 对。用 Rs、Rc 和 R 分别表示服务器链路、客户链路和网络链路的速率。假设所有的其他链路都有充足容量,并且除了由这 M 对客户-服务器产生的流量外,网络中没有其他流量。推导出由 Rs、Rc、R 和 M 表示的通用吞吐量表达式。
吞吐量为 :
min{ Rs, Rc, R/M }
P21 考虑图 1-19b。现在假定在服务器和客户之间有 M 条路径。任两条路径都不共享任何链路。路径 k(k = 1, ..., M) 是由传输速率为 R1k、R2k ...、RNk 的 N 条链路组成。如果服务器仅能够使用一条路径向客户发送数据,则该服务器能够取得的最大吞吐量是多少?如果该服务器能够使用所有 M 条路径发送数据,则该服务器能够取得的最大吞吐量是多少?
仅使用一条路径发送数据,能够取得的最大吞吐量为 :
max{ min{R11, ... RN1 }, min{R12, ... RN2}, ... min{RN1, ... RNN} }
使用所有 M 条路径发送数据,能取得的最大吞吐量为 :
Sum{ min{R11, ... RN1 }, min{R12, ... RN2}, ... min{RN1, ... RNN} }
P22 考虑图 1-19b。假定服务器与客户之间的每条链路的丢包概率为 p, 且这些链路的丢包率是独立的。一个(由服务器发送的)分组成功地被接收方收到的概率是多少?如果在服务器到客户的路径上分组丢失了,则服务器将重传该分组。平均来说,为了使客户成功地接收到该分组,服务器将要重传该分组多少次?
N 条链路,一个分组成功被接收方收到的概率是
C(N,N) x (1 - p)^N x p^0 = (1 - p)^N
该问题是一个几何分布模型:"在 n 次伯努利试验中,试验 k 次才得到第一次成功的机率",几何分布的期望是
1/p
(p 为实验成功的概率)。所以为了使客户成功接收到该分组,服务器总共需要传送分组
1/(1 - p)
次,也就是说需要重传1/(1 - p) - 1
次。
P23 考虑图 1-19a。假定我们知道沿着从服务器到客户的路径的瓶颈链路是速率为 Rs bps 的第一段链路。假定我们从服务器向客户发送紧接着的一对分组,且沿这条路径没有其他流量。假定每个分组的长度为 L 比特,两条链路具有相同的传播时延 d_prop
b. 现在假定第二段链路是瓶颈链路(即 Rc < Rs )。第二个分组在第二段链路输入队列中排队是可能的吗?请解释原因。现在假定服务器在发送第一个分组 T 秒之后再发送第二个分组。为确保在第二段链路之前没有排队,T 必须要有多长?试解释原因。
a.
当第一个分组被推上链路经过了
L/Rs
,第二个分组被推上链路经过了L/Rs
,此时第一个分组已经传送了L/Rs
秒,因此最终到达的时间间隔为L/Rs
秒。b.
第二个分组传送到路由器的输出队列中所需时间
T1 = L/Rs + L/Rs + d_prop
第一个分组最后一个比特离开路由器的输出队列所需时间为
T2 = L/Rs + d_prop + L/Rc
T2 - T1 = L/Rc - L/Rs > 0
,因此第二个分组会在第一个分组离开输出队列前追上它,所以一定会排队。如果需要按照一定时间间隔来发送两个分组
T1 = L/Rs + L/Rs + d_prop + T
令
T2 - T1 <= 0
则T <= L/Rc - L/Rs
P24 假设你希望从波士顿到洛杉矶紧急传送 40 x 10^12 字节数据。你有一条 100 Mbps 专用链路可用于传输数据。你是愿意通过这条链路传输数据,还是愿意使用 FedEx 一夜快递?解释你的理由。
d_trans = 40 x 10^12 x 8 / (100 x 10^6) = 3.2 x 10^14 / 10^8 = 3.2 x 10^6 s ~ 37 天
惹不起惹不起,那我还是使用 FedEx 一夜快递吧...
a.
带宽 - 时延积 = 2 x 10^6 x [2 x 10^7 / (2.5 x 10^8)] = 1.6 x 10^5
量纲是
bit/s x [m / (m / s)] = bit/s x s = bit
b.
d_prop = 2 x 10^7 / (2.5 x 10^8) = 0.08 s = 80 ms
d_trans = 8 x 10^5 / (2 x 10^6) = 0.4 s = 400 ms
链路上具有的比特数量最大值为
0.08 x 2 x 10^6 = 1.6 x 10^5 bit
c.
在任何给定时间,链路上具有的比特数量的最大值
d.
每个比特的宽度就是 A-B 之间的距离除以链路上的比特数量
W = 2 x 10^7 / (1.6 x 10^5) = 125 m
每个比特宽度是 125 米,比一个足球场长度大一丢丢。
e.
W = m / [(m / s) x R] = s/R
R = s/W = s/m = 2.5 x 10^8 / 2 x 10^7 = 12.5 bps
a.
带宽-时延积 = R x d_prop = 10^9 x [2 x 10^7 / (2.5 x 10^8)] = 0.8 x 10^8 = 8 x 10^7 bit
b.
d_trans = 8 x 10^5 x 10^3 / 10^9 = 0.8 ms
d_prop = 2 x 10^7 x 10^3 / (2.5 x 10^8) = 80 ms
由
d_prop > d_trans
可以得知,直到该文件的所有比特位被推上链路,该文件的第一个比特也没有到达目的地,所以链路上具有的比特数量最大值为8 x 10^5
比特。c.
在该链路上一个比特的宽度是
2 x 10^7 / (8 x 10^5) = 25 m
b. 假定现在该文件被划分为 20 个分组,每个分组包含 40 000 比特。假定每个分组被接收方确认,确认分组的传输时间可忽略不计。最后,假定前一个分组被确认后,发送方才能发送分组。发送该文件需要多长时间?
a.
d_prop = 2 x 10^7 / (2.5 x 10^8) = 0.08 s = 80 ms
d_trans = 8 x 10^5 / (2 x 10^6) = 0.4 s = 400 ms
T = d_prop + d_trans = 80 ms + 400 ms = 480 ms
b.
T = 20 x (d_prop + d_trans) = 20 x (0.08 + 0.02) = 2 s
c.
分组发送而不是连续发送造成了更长的总时延,因为每个分组都引入了自己的传播时延。
a.
同步卫星轨道高度为 36000 km
d_prop = 3.6 x 10^7 / (2.4 x 10^8) = 0.15 s = 150 ms
b.
带宽-时延积 = 10^7 x 0.15 = 1.5 x 10^6 bit
c.
d_prop < d_trans ==> x / 10^6 > 0.15 ==> x > 1.5 x 10^5 bit
连续传输的意思是刚把这一张拍好的照片的最后一个比特推上链路,下一张照片已经拍好可以推第一个比特了。
因为每分钟拍一张照片,也就是说
d_trans >= x / 10^7 = 60 ==> x >= 6 x 10^8 bit
分层协议中的首部负责在协议栈的拆解阶段让目的方确认信息:
旅客在被行李层服务后,行李上被贴上了标签,上面登记有航班信息,旅客姓名以及其他额外的校验信息。
在旅客搭乘飞机到达目的地登记口后, 根据登机牌上的信息对照确认,取回自己的行李。
P31 在包括因特网的现代分组交换中,源主机将长应用报文(如一个图像或音乐文件)分段为较小的分组向网络发送。接收方则将这些分组重新装配为初始报文。我们称这个过程为报文分段。图 1-27 显示了一个报文在报文部分段或报文分段情况下的端到端传输。考虑一个长度为 8 x 10^6 比特的报文,它在图 1-27 中从源发送到目的地。假定在该图中的每段链路是 2 Mbps。忽略传播、排队和处理时延。
a.
从源主机到第一台分组交换机移动报文需要的时间为 :
d_trans = 8 x 10^6 / (2 x 10^6) = 4 s
从源主机移动该报文到目的主机需要的时间为 :
3 x d_trans = 12 s
b.
从源主机移动第一个分组到第一台交换机需要的时间为 :
d_trans = 10^4 / (2 x 10^6) = 5 ms
第二个分组能被第一台交换机接收到的时间点为 :
2 x d_trans = 10 ms
c.
t = 15 ms
时第一个分组到达目的主机,此时第二个分组在最后一台分组交换机中
t = 15 + 5 ms
时第二个分组到达目的地
t = 15 + 2 x 5 ms
时第三个分组到达目的地
t = 15 + (N - 1) x 5 ms
时第 N 个分组到达目的地
t = 15 + (800 - 1) x 5 ms = 4.01 s
使用分组的时延比不分组的小,只有不分组的 1/3
d.
1、如果不分段,当有某些 bit 位发生错误时,必须要重传整个报文而不是单独的某个小分组。
2、如果不分段,那么当传输某些大文件时,小文件的分组会排在输出队列的末尾,等待超长的排队时延。
e.
1、报文分段使得传输时延更长2、报文分段使得必须引入报文重组机制的管理,增加了复杂性
3、报文分段的每个小分组必须添加首部控制信息,这增加了原本需要传输的总报文的长度
// TODO 手动计算动画中的耗时
R = 4 kbps L = 16 kb
如果忽略传播时延,
T = (N + 1)(L / mR) + (m - 1)(L / mR) = (N + m)(L / mR)
其中 N 是路由器的数量,m 是把报文分段的数量,R 是传输速率,L 是报文总大小。带入动画中的参数,N = 2、L = 16 kb、R = 4 kbps
得到T = 4 + 8/m
调节Package Size (kbits)
参数值进行实验,得到的耗时和计算一致
// TODO 如果不忽略传播时延不忽略传播时延,
d_prop = 1 s
T = 4 + 8/m + 3 x d_prop = 7 + 8/m
调节L1
、L2
、L3
进行实验,得到的耗时和计算一致
P33 考虑从主机 A 到主机 B 发送一个 F 比特的大文件。A 和 B 之间有两段链路(和两台交换机),并且该链路不拥塞(即没有排队时延)。主机 A 将该文件分为每个为 S 比特的报文段,并为每个报文段增加了一个 80 比特的首部,形成 L = 80 + S 比特的分组。每条链路的传输速率为 R bps。求出从 A 到 B 移动该文件时延最小的值 S。忽略传播时延
t = 3 x L/R
第一个分组到达目的地
t = 3 x L/R + L/R
第二个分组达到目的地
t = 3 x L/R + (N - 1) x L/R
第 N 个分组到达目的地,N = F/S
t = 3 x L/R + (F/S - 1) x L/R = [(S + 80) / L] x (F / S + 2)
T -> f(S) ==> d(f(S)) / dS = 0 ==> S = sqrt(40 x F)
基于电路交换的电话网络在网关处和因特网相连,当一个联网的 Skype 用户向普通电话拨打电话时,在普通电话使用者和网关之间建立了一条电路交换链路。Skype 将用户的语音数据切割成分组发送到网关,在网关处重组接着在电路上传递给普通电话。换一个方向是,普通电话的语音通过电路传输到网关后,网关把语音数据切割成分组发送给 Skype 用户,Skype 程序负责重组语音数据