3.5 介质访问控制【2010统考真题】


好的,我们来详细解析这道关于介质访问控制的经典考研真题。这道题的核心是 CSMA/CD 协议,是理解以太网工作原理的基石。
首先,我们把题目原文附上:
题目原文
3.5 介质访问控制
(5)【2010统考真题】某局域网采用CSMA/CD协议实现介质访问控制,数据传输速率为10Mb/s,主机甲和主机乙之间的距离是2km,信号传播速率是200000km/s。请回答下列问题,要求说明理由或写出计算过程。
- 若主机甲和主机乙发送数据时发生冲突,则从开始发送数据的时刻起,到两台主机均检测到冲突为止,最短需要经过多长时间?最长需要经过多长时间(假设主机甲和主机乙在发送数据的过程中,其他主机不发送数据)?
- 若网络不存在任何冲突与差错,主机甲总是以标准的最长以太网数据帧(1518字节)向主机乙发送数据,主机乙每成功收到一个数据帧后立即向主机甲发送一个64字节的确认帧,主机甲收到确认帧后方可发送下一个数据帧。此时主机甲的有效数据传输速率是多少(不考虑以太网的前导码)?
综合解析
这是一道非常经典的题目,全面考察了对CSMA/CD协议的两个核心理解:冲突检测机制 和 网络性能分析。
一、运用了什么知识点?
-
CSMA/CD 协议 (带冲突检测的载波侦听多路访问):
- CS (Carrier Sense): 先听后说。发送前先监听信道,如果信道空闲则发送。
- MA (Multiple Access): 多点接入。所有主机共享同一根传输介质(总线)。
- CD (Collision Detection): 边说边听。发送数据的同时,持续监听信道。如果发现自己发出的信号和收到的信号不一致,就说明发生了冲突。
-
传播时延 (Propagation Delay, Tp): 信号在介质中从一端传播到另一端所需的时间。这是由物理距离和传播速度决定的。
-
传输时延 (Transmission Delay, Tt): 将一个完整的数据帧从主机推到信道上所需的时间。这是由帧的大小和信道带宽(速率)决定的。
-
冲突窗口/争用期: 在CSMA/CD网络中,一个主机可能发生冲突的最长时间窗口。这个时间等于信号在网络中任意两点之间的往返传播时间(2 * Tp)。
-
有效数据速率/吞吐量 (Throughput): 在一个工作周期内,成功传输的有效数据量与该周期的总耗时之比。它反映了网络的实际性能,通常低于理论上的信道速率。
二、考了什么?为什么这么考?
-
第1问:考察对 CSMA/CD 冲突检测物理过程 的深刻理解。它通过“最短”和“最长”这两个极限场景,检验你是否真正理解了信号传播和冲突发现的时间关系。这是CSMA/CD协议能够工作的根本。
- 最短时间:理想的碰撞场景,碰撞点在哪里能让双方最快知晓?
- 最长时间:最糟糕的碰撞场景,碰撞点在哪里能让某一方最晚知晓?这个“最长时间”也正是以太网中“最小帧长”设计的理论依据。
-
第2问:考察在理解了底层物理协议后,对 上层应用性能 的分析能力。它模拟了一个简单的“停止-等待”协议(发一个,等一个确认,再发下一个),要求你计算实际的数据吞吐量。这要求你必须能精确计算一个完整“发送-确认”周期中的所有时间开销(传输时间、传播时间等)。
为什么这么考? 因为这完美地结合了理论与实践。第1问是纯粹的底层协议原理,第2问则是这些原理如何影响实际的网络性能。能完整做对这道题,说明你不仅背会了概念,而且能将它们应用到定量的分析和计算中。
三、解题思路与详细分析 (为什么怎么样?)
在开始计算前,我们先计算一个贯穿整个题目的核心参数——单程传播时延 (Tp)。
- 距离 (d) = 2 km
- 传播速度 (v) = 200,000 km/s
- Tp = d / v = 2 km / 200,000 km/s = 0.00001 s = 0.01 ms
这个值代表信号从甲传到乙(或从乙传到甲)在路上的时间。
问题1分析:冲突检测时间
1) 最短时间
- 思路:要让两台主机都尽快检测到冲突,那么冲突点应该离双方都“近”。最理想的情况就是双方同时发送。
- 物理过程:
- 甲和乙在
t=0时刻同时开始发送数据。 - 甲的信号向乙传播,乙的信号向甲传播。
- 它们将在信道的正中间相遇并发生冲突。相遇时间 =
Tp / 2= 0.005 ms。 - 冲突发生后,这个“坏消息”(冲突信号)会像涟漪一样向两端传播。
- 冲突信号传回甲需要
Tp / 2,传回乙也需要Tp / 2。 - 所以,甲在
t = (Tp / 2) + (Tp / 2) = Tp时刻检测到冲突。乙也在同一时刻检测到冲突。
- 甲和乙在
- 结论:从开始发送到双方均检测到冲突,最短需要 Tp = 0.01 ms。
2) 最长时间
- 思路:要让检测时间最长,就需要构造一个“最倒霉”的场景。这个场景是:一方即将成功占领信道时,另一方却偏偏在这时开始发送,导致功亏一篑。
- 物理过程:
- 主机甲在
t=0时刻开始发送数据。它的信号开始在信道上传播。 - 甲的信号传播了几乎全程,在
t = Tp - ε(ε是一个无穷小的时间)时刻,即将到达主机乙。 - 就在这一瞬间,主机乙因为监听信道仍然是空闲的(甲的信号还没到),它也决定开始发送数据。
- 冲突在主机乙的门口发生。所以,主机乙几乎是立即(在
t ≈ Tp时刻)就检测到了冲突。 - 但此时主机甲对此一无所知,它还在快乐地发送数据。
- 这个在乙门口发生的冲突信号,现在必须沿原路返回,传播整个信道的长度,才能通知到甲。这个返回过程需要一个完整的
Tp时间。 - 因此,主机甲在
t = (信号过去的时间) + (冲突信号回来的时间) ≈ Tp + Tp = 2 * Tp时刻才检测到冲突。
- 主机甲在
- 结论:到两台主机均检测到冲突为止,最长时间取决于那个最晚知道消息的“倒霉蛋”(主机甲)。这个时间是 2 * Tp = 0.02 ms。这个
2 * Tp也被称为争用期或冲突窗口。
问题2分析:有效数据传输速率
- 思路:这是一个典型的“停止-等待”模型。我们需要计算发送一个有效数据包并收到确认所构成的一个完整周期的总时间,然后用有效数据量除以这个总时间。
- 公式:
有效速率 = 有效数据大小 / 周期总时间
1) 计算周期总时间 (T_cycle)
一个周期包含以下几个部分:
- 甲发送数据帧的传输时延 (Tt_data):把1518字节的数据帧全部放到信道上。
- 数据帧的传播时延 (Tp):数据帧从甲传到乙。
- 乙发送确认帧的传输时延 (Tt_ack):把64字节的确认帧全部放到信道上。
- 确认帧的传播时延 (Tp):确认帧从乙传回甲。
T_cycle = Tt_data + Tp + Tt_ack + Tp = Tt_data + Tt_ack + 2 * Tp
2) 分别计算各项时间
- 信道速率 © = 10 Mb/s = 10 * 10⁶ bit/s
- Tt_data:
- 数据帧大小 (L_data) = 1518 B = 1518 * 8 bit = 12144 bit
Tt_data = L_data / C = 12144 / (10 * 10⁶) = 0.0012144 s = 1.2144 ms
- Tt_ack:
- 确认帧大小 (L_ack) = 64 B = 64 * 8 bit = 512 bit
Tt_ack = L_ack / C = 512 / (10 * 10⁶) = 0.0000512 s = 0.0512 ms
- 2 * Tp:
2 * Tp = 2 * 0.01 ms = 0.02 ms
3) 计算总时间
T_cycle = 1.2144 ms + 0.0512 ms + 0.02 ms = 1.2856 ms = 0.0012856 s
4) 计算有效数据速率
- 有效数据:在一个周期里,真正对用户有用的只有甲方发送的那个数据帧里的数据,即 1518 字节 (12144 bit)。确认帧是开销。
- 有效速率 = 12144 bit / 0.0012856 s ≈ 9,446,172.99 bit/s ≈ 9.45 Mb/s
四、怎么学?怎么掌握?
- 分清两个“时延”:一定要用“高铁比喻”或类似方法,彻底搞清楚传输时延 (上车时间) 和 传播时延 (路上时间) 的区别。这是解所有这类题目的基础。
- 画时空图:对于第1问这种涉及时间先后顺序和信号传播的问题,亲手画一个时间-距离的二维图,把甲乙的信号传播路径画出来,碰撞点和返回路径一目了然,可以极大地帮助理解。
- 理解“争用期”:牢记
2 * Tp这个值的物理意义——它是发送方在发送数据时,必须持续监听信道以确保没有冲突的最短时间。所有小于2*Tp时间内发送完的短帧都可能导致冲突而发送方却不知道(即“幽灵碰撞”),这就是以太网有最小帧长限制(64字节)的根本原因。 - 掌握周期分析法:对于第2问这类性能计算题,核心就是定义一个可重复的最小周期,然后计算“周期内的有效产出 / 周期总时长”。这个方法在计算机网络的很多性能分析题中都是通用的。
您非常敏锐,指出了一个关键且微妙的细节!您是对的,我之前的分析在“有效数据”的界定上不够精确,而参考答案中的计算方式是更符合“有效数据传输速率”这一定义的。
我们来深入剖析一下,为什么是这样,以及这背后反映了什么重要的网络概念。
核心问题:什么是“有效数据”?
在计算有效数据传输速率 (Effective Data Rate) 或 吞吐量 (Throughput) 时,我们关心的不是网络链路本身有多“忙”,而是对**上层应用(用户)**有用的数据,实际传输得有多快。
这就引出了一个关键区别:
- 整个数据帧 (1518字节):这是链路层为了成功传输数据而构建的完整包裹。
- 有效数据/载荷 (Payload):这是数据帧中真正承载的、来自上层(比如IP层)的数据。
一个标准的以太网帧(1518字节)结构如下:
- 目标MAC地址:6 字节
- 源MAC地址:6 字节
- 类型/长度字段:2 字节
- 数据载荷 (Payload):46 ~ 1500 字节
- 帧检验序列 (FCS/CRC):4 字节
我们可以看到,除了数据载荷,其他部分都是为了让数据链路层能正常工作而添加的开销 (Overhead)。
总开销 = 6 + 6 + 2 + 4 = 18 字节
因此,当一个最长以太网帧的总长度是1518字节时,它所能承载的**最大有效数据(载荷)**是:
有效数据 = 总长度 - 开销 = 1518 字节 - 18 字节 = 1500 字节
结论:题目问的是“有效数据传输速率”,所以我们计算时,分子应该是用户真正得到的数据量,即1500字节,而不是整个帧的12144比特。
重新进行详细、精确的计算
现在我们用正确的“有效数据”来重新计算一遍。
公式:
有效数据传输速率=一个周期内传输的有效数据比特数一个周期的总时间 \text{有效数据传输速率} = \frac{\text{一个周期内传输的有效数据比特数}}{\text{一个周期的总时间}} 有效数据传输速率=一个周期的总时间一个周期内传输的有效数据比特数
第一步:计算分子(有效数据比特数)
- 有效数据大小 = 1500 字节
- 有效数据比特数 = 1500 * 8 = 12000 bit
第二步:计算分母(一个周期的总时间)
这一步的计算和之前是完全一样的。 因为无论我们关心的是整个帧还是仅仅是载荷,物理上必须发送整个1518字节的帧,并等待一个完整的64字节确认帧回来。物理过程和时间开销不会因为我们计算角度的不同而改变。
-
甲发送数据帧的传输时延 (Tt_data):
Tt_data = (1518 * 8) bit / (10 * 10⁶ bit/s) = 12144 / 10⁷ s = 1.2144 ms
-
数据帧从甲到乙的传播时延 (Tp):
Tp = 2 km / 200,000 km/s = 0.01 ms
-
乙发送确认帧的传输时延 (Tt_ack):
Tt_ack = (64 * 8) bit / (10 * 10⁶ bit/s) = 512 / 10⁷ s = 0.0512 ms
-
确认帧从乙到甲的传播时延 (Tp):
Tp = 0.01 ms
-
周期总时间 (T_cycle):
T_cycle = Tt_data + Tp + Tt_ack + TpT_cycle = 1.2144 ms + 0.01 ms + 0.0512 ms + 0.01 msT_cycle = 1.2856 ms = 0.0012856 s
第三步:计算最终的有效数据传输速率
有效速率 = 12000 bit / 0.0012856 s有效速率 ≈ 9,334,162.9 bit/s有效速率 ≈ 9.33 Mb/s
这个结果与参考答案中的 9.33Mb/s 完全吻合。
总结与反思
- 信道利用率 (Channel Utilization) vs 有效数据速率 (Throughput): 这是一个非常重要的区分。
- 如果题目问“信道利用率”,我们关心的是信道在周期内有多大比例的时间是在忙着传输任何比特(包括数据帧和确认帧)。
利用率 = (Tt_data + Tt_ack) / T_cycle = (1.2144 + 0.0512) / 1.2856 ≈ 98.4% - 如果题目问“有效数据速率”,我们关心的是用户数据的传输速率,必须剔除所有协议开销(帧头、帧尾、确认帧等)。
- 如果题目问“信道利用率”,我们关心的是信道在周期内有多大比例的时间是在忙着传输任何比特(包括数据帧和确认帧)。
感谢您的提问,这让我们的分析更加严谨和深入,也揭示了网络性能分析中一个非常关键的考点!
