计算机网络这门课,很多人前面学得顺着,一到数据链路层的介质访问控制,就开始犯迷糊。尤其“轮询”和“令牌传递协议”这两个概念,期末复习翻来覆去看了好几遍,但真问一句“它俩到底解决了什么问题、跟CSMA/CD是什么关系、考试计算题怎么下手”,脑子里经常是一团浆糊。这篇内容就把信道访问控制里最容易混成一锅粥的几种思路理清楚,重点把轮询和令牌传递的工作过程、参数计算、考试考点、真实系统里的用法掰开揉碎讲一遍。不管是应付计算机网络期末、408计算机考研复习,还是做嵌入式、工控、网络协议相关开发时想补一补底层背景,都可以照着这份思路往下看。
1. 从抢麦到点名:介质访问控制为什么要分三种思路
1.1 共享信道的本质矛盾:一个麦克风,一群人想发言
先讲清楚一个前提:轮询和令牌传递都属于“介质访问控制”,解决的是同一个问题——多个站点怎么共享一条物理信道。
想象一个会议室里只有一支麦克风,十个人都要发言。如果没人管,所有人同时开口,台下什么都听不清。这时候通常有几种做法:
- 一种是主持人提前排表,张三从9点到9点零5分讲,李四从9点零5分到9点10分讲,这叫时分复用。
- 一种是自由抢麦,谁嗓门大谁先说,但如果两个人同时抢到麦克风,就得停下来重新抢,这就是随机访问协议的思路,以太网经典的CSMA/CD就是这种。
- 还有一种,主持人挨个点名:张老师你说说,李老师你说说,王老师你说说。轮到谁谁才有资格发言,这就是轮询(polling)。
- 或者干脆拿一根接力棒,谁拿着棒子谁说话,说完把棒子传给下一个人,这就是令牌传递(token passing)的思想。
所以你看,介质访问控制本质上不是传输技术,而是一套“信道使用权”的资源调度机制。轮询和令牌传递之所以被归为一类,是因为它们都属于“受控访问”:站点不能想发就发,必须等别人给你授权。这个授权在轮询里是主节点发出的询问帧,在令牌环里就是那个环上游走的令牌。
1.2 随机访问在重负载下为什么扛不住
要理解轮询和令牌的价值,得先看它们要替代的对手——随机访问协议。
以CSMA/CD为例,它的工作流程像“先听后说、边说边听、冲突就退”。站点发送前先监听信道,信道空了才发,发送过程中还趴着听,一旦发现自己发的数据被撞坏了,立即停止发送,然后随机等一段时间重试。
轻负载下这个方案非常好,站点基本不用抢,发出去就能通,信道利用率可以接近1。但负载一上去,问题就来了:多个站点同时等信道空闲,信道一空就一起冲,冲突率迅速上升。一旦每帧都反复碰撞,有效吞吐量可能掉到理论带宽的三四成,延迟也变得不可控——你永远说不准下一次成功发送是什么时候。
随机访问的另一个隐患是“没有确定性”。对普通网页访问来说,偶尔慢个几百毫秒无所谓,但对工业控制、过程自动化、音视频实时传输这些场景,延迟必须有上限。我说一个数据包最多50毫秒必须到位,结果它random backoff退避了80毫秒,这在现场是会出事故的。
于是轮询和令牌传递的价值就凸显了:它们用一个“权威”来决定谁说话,从机制上消灭了冲突,同时给每条消息的等待时间画了一条上界。这就是受控访问协议的核心卖点。
1.3 教材里的位置和复习主线
如果你用的是谢希仁版《计算机网络》,这部分在数据链路层章节,书里管它叫“轮询访问MAC协议”,拿它跟随机访问、信道划分放在一起对比。如果是《计算机网络:自顶向下方法》,这方面的笔墨相对少一点,但也会在链路层里提到令牌环、轮询的概念。
408考试和期末考的重点,并不是让你背协议帧格式,而是考三件事:
- 比较:随机访问、轮询、令牌传递在不同负载下的表现差异。
- 计算:轮询周期、令牌环的最坏等待时间,这类题是纸老虎,套公式就行。
- 辨析:轮询里的P/F位、令牌环里的优先级保留字段,这些细节点最容易丢分。
下面两章我分别把轮询和令牌传递拆开讲,每讲一个原理,都会补上对应的计算和考试解题套路。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 轮询协议:一个“总机”为中心的轮流发言机制
2.1 轮询系统的基本形态:主节点和从节点
轮询协议的最大特征是“主从结构”。整个网络里有一个主节点(控制节点),其他都是次节点。主节点挨个问次节点:你有数据要发吗?有,你就发;没有,我就问下一个。
这个“问一下”的动作不是聊天式的口头询问,而是需要发一个短控制帧。在HDLC规程里,这个动作叫poll。主节点把帧里的P位(Poll/Final,轮询/终止位)置成1,发给某个从站,意思是“轮到你上报了”。
从节点收到置P位的帧之后,有两种情况:
- 有数据要发,就抓住这个机会把数据帧发出去,发完之后在最后一个帧里把F位(Final)置1,意思是“我说完了,你继续问别人”。
- 没数据要发,也会回一个帧,通常是RR(接收就绪)或者RNR(接收未就绪),把F位置1作为响应。这个响应也要占时间,这一点很重要,后面计算轮询开销时会用到。
主节点给别人发数据的过程叫select(选择)。主节点发数据前也要先询问目标从站能不能收,对方确认后才发数据。所以“poll”管的是从站到主站的上行数据,而“select”管的是主站到从站的下行数据。很多教材简化成一句话“主节点逐个询问从节点”,但实际做题时,P位和F位的用法、poll和select的区别,都是容易出判断题的点。
2.2 三种轮询策略:先来先服务、循环、优先权
轮询不是说主节点只能傻乎乎地按12345的顺序问。实际系统里有几种常见策略:
| 策略 | 工作方式 | 适合场景 |
|---|---|---|
| 先来先服务 | 谁先向主节点发出请求,主节点就先去问谁 | 站点之间负载差异大,按需问询 |
| 循环轮询 | 主节点按固定顺序挨个询问,一圈接一圈 | 站点数量不多、负载相对均匀 |
| 优先权轮询 | 对某些紧急站点先问,其他站点按顺序问 | 实时性要求不同的混合系统 |
这三种策略里,考试最爱考“循环轮询”,因为它参数容易出计算题。而实际工控现场里,优先权轮询很常见——比如一组Modbus设备里,保护装置的优先级比普通传感器高,程序里先读关键设备再读普通设备,这就是一种静态优先权轮询。
需要注意,轮询表往往是静态配置的。这意味着每轮都得把每个节点问一遍,即使某个节点一整轮都没有数据,主节点也得花时间“问候”它一下。这个开销在轻负载场景下会显得非常浪费,但换个角度想,换来的是“能预测下一轮什么时候开始”的确定性。
2.3 轮询周期和效率:一道高频计算题的完整推导
轮询计算题的核心是算“轮询周期”和“轮询效率”。理解一个公式就够了。
假设系统里有N个从节点,主节点轮询一个节点需要花费的控制开销为T_poll(发送轮询帧和收到空响应的时间),每个节点平均发送数据时间为T_data。那么完成一整轮问询的周期为:
T_cycle = N × (T_poll + T_data)
轮询效率 = N × T_data / T_cycle
举个具体例子。主节点带着4台采集设备,每轮询一台设备需要控制开销2毫秒,设备平均要花20毫秒上传数据。那么每轮周期是:
T_cycle = 4 × (2 + 20) = 88毫秒
效率 = 4 × 20 / 88 ≈ 90.9%
这套数字看着还挺好看。但如果把数据量变小,比如每台设备平均只发1毫秒的数据,轮到开销不变还是2毫秒:
T_cycle = 4 × (2 + 1) = 12毫秒
效率 = 4 × 1 / 12 ≈ 33.3%
看到了吗?设备越闲,轮询的浪费越明显。这就是为什么轮询被评价为“轻负载下效率低”的原因——哪怕从站没有一句正经话说,主节点也得挨个敲一遍门。理解了这个过程,期末判断题里那句“轮询适用于负载较重且各站负载较均衡的场合”就不再是死记硬背了。
2.4 实战视角:用S7-1200对4台Modbus TCP从站做轮询
光看书可能觉得轮询是个老掉牙概念,但它在现代工业现场到处都是。搜“S7-1200与4台modbus tcp轮询”能搜出一堆帖子,说白了就是一台西门子PLC做主站,4台仪表或变频器做从站,PLC循环读取它们的寄存器数据。
这段逻辑用伪代码写出来大概是:
text复制// 主循环
while (true) {
for (station = 1; station <= 4; station = station + 1) {
// 调用MB_CLIENT功能块,连接station对应的IP
result = MB_CLIENT_read(id = station, register = 40001, len = 10);
// 等待指令完成或超时
if (result.status == TIMEOUT) {
log_error("station " + station + " timeout");
continue;
}
// 处理数据
process_data(station, result.data);
// 轮询间隔,建议10~50ms
delay(20ms);
}
}
新手最容易问的问题是:能不能开4个MB_CLIENT连接,同时并发读取4台设备?理论上通道多,看起来更快,但实际调试时你会发现很多工业从站设备和网关根本扛不住并发,或者本身固件就是排队处理请求的,并发反而导致连接频繁断开、数据校验出错。轮询的好处在这里体现得很实在:时序确定,每一帧都有明确的请求方和响应方,出错时能立刻定位是第几号站的问题。
现场调试轮询,三个参数要重点盯:
- 轮询间隔。不要盲目调到最小。从站手册里通常会写“最小请求间隔”,先按手册给的值走,再实测一点点往下压。像我用Modbus RTU抄表,RS485总线上从站多的时候,间隔低于20毫秒偶发就会变高,加到50毫秒一切稳定。
- 单站超时。如果某个从站彻底断电或网线松动,请求会一直不返回。这时候必须设一个单站超时上限(比如200毫秒),超时就跳过这台设备继续轮下一台,否则整个轮询循环会把时间全耗在等死节点上。
- 故障站重连策略。不要因为这一轮超时就直接把设备永久踢出轮询表,可以用连续失败次数做判断,比如连续失败10轮后才标记为离线,期间每N轮再试探一次。这么做能避免瞬时干扰导致设备被误判离线。
2.5 轮询协议的关键短板和避坑心得
轮询最大的问题在于主节点本身是瓶颈也是单点。一旦主节点坏了,全网直接瘫痪;主节点轮询不过来,整个系统的吞吐量也就到顶了。另一个问题是“响应延迟不确定”中的“不确定”来自轮询顺序:如果节点位于轮询表的最后一位,就算它有紧急数据,也得等主节点问完前面所有节点。有些系统会靠优先权策略缓解这个痛点,但优先权本质上是在牺牲低优先级节点的确定性来换高优先级节点的及时性,设计时需要权衡。
个人排查经验:如果发现轮询系统时好时坏,先别怀疑协议,拿抓包工具看主站发出的请求帧时间间隔是否均匀。如果间隔忽长忽短,说明某个从站响应慢或主站程序里某个操作卡顿了,这种问题靠调“轮询间隔”是解决不了的,得先找到哪一步在拖时间。
3. 令牌传递协议:环形网络里的接力棒规则
3.1 令牌的本质:一张“发言许可证”
令牌传递协议最著名的实现是令牌环网(IEEE 802.5),另一个重要应用是FDDI光纤环网。它的核心思想用一句大白话说:网络上只有一个令牌(Token)在不停地环游,谁拿到这个令牌,谁才有资格发送数据。
令牌不是抽象概念,它就是一个实实在在的短帧。在802.5标准里,令牌帧只有3个字节:起始定界符(SD)、访问控制(AC)、结束定界符(ED)。访问控制字段里最关键的是T位,1表示“我是数据帧”,0表示“我是令牌”。站点拿到一个帧,先看T位,T=0说明自己拿到令牌了,可以开始发数据;T=1说明这只是一个普通数据帧,传到自己的目的地址就复制一份,不是给自己的就转发出去。
很多人以为没有令牌就不能传数据,这话不完全对。准确说法是:不能发送普通数据帧,但可以发一些控制帧。所以令牌环里的节点并不是绝对静止的,它会转发数据、可以发一些管理帧,只是“正常业务数据”必须等令牌。
3.2 令牌的完整生命周期:从拿到到传走
把令牌环运行的完整过程画在脑子里,计算题基本就通了一半。假设环上有A、B、C、D四个站点,令牌当前在D手里,过程是:
- D拿到令牌后,站点的发送优先级和令牌上的优先级一匹配,D决定发送数据。它把令牌的T位置成1,在后面追加目的地址、源地址、数据和校验字段,形成一个完整的数据帧,发到环上。
- 数据帧在环上顺时针流动。每个中间站点检查目的MAC地址。不是自己的,就转发;是自己的,复制一份交给上层协议,同时把帧再接续转发下去,让这个帧继续沿环走。
- 数据帧最终绕了一圈回到D站点。D负责“剥除”这个帧——它必须在自己的发送接口把这个帧回收,不让它在环上无限循环。
- D确认整个帧已经完整收回后,才重新生成一个新的令牌帧,放到环上传给下一个站点。
- 下一个拿到令牌的站点重复以上过程。
这里最容易被忽略的细节是第4步:标准802.5采用“单令牌”方式,要等自己的数据帧完整绕环一圈收回后,才能释放新令牌。这样环上同时最多只有一个令牌,但可能同时存在多个“数据帧”吗?单令牌方式下,由于D在数据帧没回来之前不产生新令牌,所以环上其实只有一个数据帧和零个令牌。另一种“早期令牌释放”方式下,站点发完一个数据帧后不用等它绕回来,直接就可以产生令牌,这样环上可以同时有多个数据帧,但令牌依然只有一个。早期令牌释放的好处是信道利用率高,坏处是实现复杂、对优先级控制更难把握。
3.3 令牌持有时间THT和最坏等待时间计算
令牌不是拿在手里想用多久就用多久,协议里规定了一个上限,叫令牌持有时间(Token Holding Time,THT)。站点拿到令牌后,它的发送时间累计不能超过THT。这个参数是令牌环实时性理论的基石:因为每个站点持有令牌的时间有上限,一个站点想再次拿到令牌,最多等完其他所有站点各用一轮就够了。
最坏等待时间的公式长这样:
T_wait_max = (N - 1) × (THT + τ)
其中,N是环上站点总数,THT是令牌持有时间上限,τ是信号绕环传播一周的时间。
为什么是N-1而不是N?因为当前站点等令牌时,令牌刚刚被别人拿走,最多再等其余N-1个站点各轮一遍,令牌必然回到自己手里。
出个考试风格的题目:
一个10Mbps的令牌环,环长1公里,环上有100个站点,每个站点最多持有令牌10毫秒。信号在介质中的传播速度为2×10^8米/秒。求某个站点在最坏情况下要等多久才能拿到令牌。
先算传播时延:
τ = 1km ÷ (2×10^8)m/s = 1000m ÷ (2×10^8)m/s = 5×10^(-6)秒 = 5微秒
然后套公式:
T_wait_max = (100 - 1) × (10ms + 0.005ms) = 99 × 10.005ms ≈ 990.5ms
很多辅导书为了简化,会告诉你“传播时延很小,可以忽略”,于是结果就是99 × 10ms = 990ms。实际做题时如果题目给了环长和传播速度,那5微秒就不能省;如果题目只说“忽略传播时延”,你再大胆忽略。
这道题背后还有一个很重要的结论:环上站点越多,令牌绕一圈花的时间越长,每个站点等待的最坏时间随N线性增长。所以令牌环适合站点数量可控、实时性要求高的环境,而不是规模巨大、节点数量不确定的广域网。
3.4 令牌丢失、重复令牌和监控站机制
令牌环正常工作依赖于环上恰好有一个令牌。但现实中会发生各种意外:
- 令牌丢失:某站点拿到令牌后还没来得及发,站点停电了,或者数据帧被噪声冲坏了,环上就没有令牌了。没有令牌,所有站点都在等一个永远不来的东西。
- 重复令牌:环上一度出现两个令牌,会造成两个站点同时抢到发言权,逻辑环被破坏。
- 孤儿帧:源站点发完数据帧后立刻掉线,这个帧没人剥除,就会在环上无限循环。
802.5协议专门设计了一个“监控站”角色,通常是环上第一个启动的站点,负责周期性地发送监控帧,检查环是否正常。如果监控站超过一段时间没看到令牌或者有效帧经过,就判定令牌丢失,重新生成一个新令牌丢到环上。这个“超时重发令牌”的机制,跟TCP超时重传的思路异曲同工。
FDDI环网在这块还设计了一套“beacon”机制:站点发现异常后不断发送beacon帧,直到某个站点收到自己的beacon,说明环已经断开或出现严重故障,然后进入重新初始化流程。工程上这算是轮询和令牌故障恢复里比较成熟的一套方案,有兴趣深挖的可以去看FDDI标准。
4. 轮询vs令牌传递:期末复习最容易丢分的对比
4.1 一张表分清三大MAC方案
每次复习介质访问控制,我都会在纸上画一张对比表,然后强迫自己不看笔记复述一遍。这张表基本覆盖了期末和408的考点。
| 维度 | CSMA/CD(随机访问) | 轮询(受控访问) | 令牌传递(受控访问) |
|---|---|---|---|
| 是否有中心节点 | 无,分布式 | 有,主节点是中心 | 无,逻辑上平等 |
| 冲突 | 可能发生,靠碰撞检测处理 | 主从结构下从站不自发发送,不会冲突 | 持令牌者唯一,不会冲突 |
| 负载很轻时 | 效率高,响应快 | 有轮询开销,效率不高 | 有令牌等待,同样有开销 |
| 负载很重时 | 冲突加剧,吞吐率骤降 | 每轮固定开销,性能稳定 | 稳定,且延迟有明确上界 |
| 对实时性支持 | 差,延迟不可控 | 较好,但和轮询顺序有关 | 好,THT保证了延迟上界 |
| 单点故障风险 | 低 | 主节点故障全网瘫痪 | 任意站点故障可能影响整个环 |
| 典型实现 | 经典以太网 | HDLC、Modbus、IEEE 802.11 PCF | IEEE 802.5令牌环、FDDI |
复习时记住一句话:随机访问靠“检测+重试”解决冲突,受控访问靠“授权”从源头杜绝冲突。这就是它们本质的分水岭。
4.2 三个高频易错点:P/F位、AC字段和“轮询=线缆”
第一点,P/F位是HDLC轮询机制里的标志,跟令牌环的AC字段不是一回事。P位=1表示问对方“你有话要说吗”,F位=1表示“我这是最后一句”。这是轮询协议里主从一问一答的握手标记。
第二点,802.5令牌帧AC字段包含优先级(P)和保留位(R)。令牌环的优先级机制是:想发送高优先级数据的站点,可以在经过的数据帧AC字段里写“我预约高优先级”;当前持有令牌的低优先级站点看到预约后,在释放令牌时把令牌优先级提高到对方要求的级别,让高优先生成。这个东西经常有人拿来跟HDLC的P/F位混着考。
第三点,轮询不一定非得用一根总线的物理拓扑。Modbus TCP跑在交换机组成的以太网上,逻辑上主站是唯一发起者,这依然叫轮询。轮询更偏重“逻辑访问控制方式”,而不是“物理线缆连接方式”。同理,令牌环虽然拓扑上是环,但现代工业网络里也常见“物理上星型接法、逻辑上令牌环”的实现方式。考试判断题如果写“轮询必须用总线型拓扑”,那肯定是错的。
4.3 计算题套路:先画时间线,再套公式
我复习时最大的心得:介质访问控制的计算题,千万别只盯着公式,先画时间线。
比如给你一个题:5个站点构成的令牌环,每个站点拿到令牌最多能发2帧,每帧发送时间20毫秒,帧传完立刻释放令牌(早期令牌释放),求一个站点两次拿到令牌之间的最大间隔。我拿到题第一件事,不是翻THT公式,而是画一根横向时间轴,标出第一个站拿令牌到放令牌的过程,再标第二个、第三个……画完你就看出来了,两次拿到令牌之间的间隔就是“自己用完 + 其余4个节点各用一轮”的时间总和,然后乘上每站耗时,自然就列出来了。
轮询题也一样,画一条轮询顺序的循环线:主节点问1号,问2号,问3号……回到1号,一轮结束。把T_poll和T_data标在每段上面,周期和效率怎么算,一目了然。图画清楚了,最后再查一遍公式细节,基本不会错。
5. 藏在现代系统里的轮询和令牌:学以致用与排坑实录
5.1 你以为它们是老古董,其实它们还活着
很多人觉得轮询和令牌是教科书里才有的东西,现代网络早就用交换机和无线技术取代了。这话只对了一半。
- 现场总线领域:Modbus RTU/TCP是轮询的代表,西门子S7-1200、三菱FX系列PLC走串口或以太网采集数据时,基本都是一主多从循环取数,没有任何冲突风险。
- 蓝牙微微网:一个主设备最多带7个活跃从设备,主设备按时间槽轮流问从设备,从设备只能在被问到的时间槽里回复。说白了就是高频轮询。
- IEEE 802.11 PCF模式:无线局域网里有一种可选的“点协调功能”,AP作为中心节点,依次轮询各无线站点,问它们有没有数据要发。虽然实际Wi-Fi部署里PCF几乎没见人用过,但协议定义里它确实存在,并且依然被考试题库反复翻牌子。
- 工业实时以太网:一些工业网络在逻辑层仍然采用令牌机制,保证所有主站都有机会发布数据,同时在高层跑实时控制帧。令牌的思想被“嫁接”进了新瓶装旧酒的工业协议里。
另外,你平时做Web前端,是不是听过“状态轮询”?定时调用接口问服务器“任务跑完了没”,这跟数据链路层轮询在思想上完全一致:用一个主动询问方定期拉取状态,以实现某种“近似实时”的效果。所以说,轮询不是老掉牙,而是分布式系统里永远绕不开的基本模式。
5.2 实战排错:轮询与令牌系统的典型故障速查
轮询系统用久了,总会遇到几个固定套路的问题。下面这张表是我调试S7-1200和现场总线多年攒下来的经验速查,够用了。
| 现象 | 常见原因 | 排查思路 |
|---|---|---|
| 轮询周期越来越长,单站偶尔超时 | 某从站响应慢,或程序里某段阻塞调用拖住主站 | 先抓包看每轮请求间隔,找出拖时间的站,单独测试它响应时间 |
| Modbus偶发数据错乱、CRC报错 | 轮询间隔压得太短,从站来不及处理上一请求;或串口线屏蔽层接地不好 | 把轮询间隔加20~50毫秒再看,检查终端电阻和屏蔽层单点接地 |
| 某个从站频繁被“踢出”轮询 | 排查发现该站瞬时欠压或网线松动,主站连续超时后标记离线 | 调整连续失败次数阈值,加入自动恢复探测,不要一次超时就摘除 |
| 令牌环里突然所有站都无法发送 | 令牌丢失或监控站超时仲裁失败 | 检查最近是否有站点入环/离环,确认监控站是否正常工作,必要时强制重新初始化 |
| 环上一个站收发正常,但后面所有站延迟暴增 | 可能该站点长时间占用令牌不释放,THT没生效 | 检查该节点固件或驱动是否把THT设成无限大,单独隔离测试 |
有一点要特别提醒:轮询的故障排查第一步永远是“看日志里有没有timeout”,而不是“改参数”。日志里如果一片正常,没有任何超时记录,但链路还是不稳,那多半是物理层问题:干扰、接地、接头氧化。别在协议栈里浪费时间,拿万用表量线路、检查水晶头,有时候反而几分钟就解决。
5.3 想真正学透?花十分钟写个模拟器验证公式
期末复习到后期,我建议不要只盯着题,动手跑一个极简模拟会带来质变。下面这段Python代码模拟了一个5站点令牌环,每站持有令牌时间固定为2秒,每轮是否发数据随机决定,最后统计某个站等待令牌的平均时间和最坏时间。
python复制import random
N = 5 # 站点数
THT = 2 # 令牌持有上限(秒)
max_wait = 0
total_wait = 0
rounds = 1000
for _ in range(rounds):
# 假设令牌当前从0号站开始,记录0号站下次拿到令牌的等待时间
wait = 0
for station in range(N):
if random.random() < 0.8: # 80%概率该站有数据要发
wait += THT
else:
wait += THT * 0.1 # 无数据时,保留少量令牌处理开销
total_wait += wait
max_wait = max(max_wait, wait)
print("平均等待:", total_wait / rounds)
print("最坏等待:", max_wait)
print("理论上界:", (N - 1) * THT)
跑一遍你就会发现,模拟出来的最坏等待时间永远逼近(N-1)×THT,但平均等待时间明显更低。这件事的价值在于:它让你真切理解“有界延迟”到底是什么意思——平均情况很好,最坏情况也有底,这就是实时系统敢用令牌环的根本原因。轮询和令牌传递这两个看起来简单的协议,背后其实是“用一点管理开销换确定性”的工程哲学。能用代码把公式验证一遍,你对CSMA/CD、轮询、令牌传递的区别就不再是背下来的,而是长在身上的。
我自己学习这块内容时还有一个习惯:第一次看一定会觉得“就这?”,然后过两天又开始混乱。别急,等看完第4节的对比表,自己动手画一遍令牌环的时间线,再跑一遍模拟器,基本就焊死在脑子里了。计算机网络里大部分协议都是这种画法,画一遍胜过背十遍。
