这份练习追踪六种不同的状态。目标不是把所有协议混成一张“地址表”,而是能说明每次收到消息后,哪张表改变、下一份数据从哪里走,以及结果依赖哪些前提。
输入与重置规则
以下各题是独立快照,题与题之间不沿用缓存。桥的1、2、3与路由器R1、R2、R3不是同一组设备。没有特别说明时,地址格式和帧校验均有效,不发生无关消息或数据丢失。
建议依次读源地址学习、ARP解析、生成树桥接、距离向量、链路状态及BGP路径向量与策略。
任务一:六帧之后,表里还有谁
单VLAN交换机端口1、2、3都允许转发,FDB初始为空。源地址学习后10时间单位过期;在处理每帧前,删除恰好到期或更旧的表项。按顺序处理:
| 时刻 | 入端口 | 帧 |
|---|---|---|
| 0 | 1 | A→B |
| 1 | 2 | B→A |
| 4 | 1 | A→R |
| 5 | 3 | R→A |
| 6 | 2 | A→B |
| 12 | 3 | R→B |
交付每步输出端口、最后见到源的时刻,以及最终FDB。再回答:若A移动后一直没有发帧,已有A→1为什么仍可能造成错投?
核对点:输出依次为{2,3}、{1}、{2,3}、{1}、空、{1,2}。B最后作为源出现于1,在11到期;时刻6被当作目的不续期。最后只剩A→(2,6)、R→(3,12)。
任务二:不能在左侧广播寻找远端MAC
A为192.0.2.10/24、MAC为MA,默认网关192.0.2.1。路由器R左接口192.0.2.1/MRL,右接口198.51.100.1/MRR,两个子网均直连。B为198.51.100.20/24、MAC为MB。各ARP缓存初始为空,A发一个去B、TTL64的IPv4包,没有代理ARP或NAT。
交付两次ARP请求的发送方与目标IP、应答的以太目的、两跳数据帧的MAC与IP字段,并给出总帧数。再解释R为何能从A的请求中学到A,而旁听者不必为陌生发送方无条件新建记录。
核对点:左侧问192.0.2.1,右侧问198.51.100.20;应答分别单播给MA与MRR。数据MAC分别MA→MRL、MRR→MB;IP端点始终A→B,第二段TTL63。两请求、两应答、两数据帧,共6帧。ARP没有替远端交付出具确认。
任务三:成本8的生成树为什么没有算错
桥ID1、2、3,链路1—2和1—3成本4,2—3成本1。画稳定端口角色和两端均转发的活动边。随后断开1—3,重新计算收敛后的根成本与根端口。
核对点:根1;桥2、3根成本均4;2—3上桥2指定、桥3阻塞。活动树总成本8,MST总成本5。断线后桥3经2到根,成本5。请用严格下降的根成本证明稳定父边无环,同时说明该证明为何没有给出端口切换期间的安全时序。
迁移题:把1—3成本改成6,其他不变。桥3应经2到根,成本5,1—3上桥1仍为指定,但桥3这一端阻塞;此时活动树成本5。不要只比较一条链路谁便宜,要比较整个根路径。
任务四:坏消息怎样绕回原发送者
先用R1—R2成本1、R2—R3成本1、R1—R3成本4,以R3为目的,从(∞,∞,0)同步更新。每轮只读上一轮快照,交付前两轮。
再重置为A直连X成本1、A—B成本1;原A=1、B=2经A。断开A—X但保留旧通告缓存。无毒性逆转时按A、B交替更新,饱和值16。列出前三次以及终止状态;启用并已经交付毒性逆转时重算。
核对点:正常两轮为(4,1,0)、(2,1,0)。故障无毒性逆转产生3、4、5,最后双方16;有毒性逆转时B已经对A报16,双方相继变16。再按正文定向三节点例列出4、5、6、7,指出哪些方向报16,哪些方向仍传播有限值。RIP式无穷16还会拒绝真实成本恰为16的可达路径。
任务五:两张各自正确的图,能组成错误的转发
使用任务四的R1/R2/R3三角形,所有数据库起初相同。R2旧版本11列出R1与R3;R2—R3断开后,R2发布版本12,仅列R1。教学图只采用两端均声明且成本相同的链路。
先让R2接受自己的12并重算,R1仍保存11。再让R1接受12,最后送达迟到的11。分别列出R1、R2到R3的距离、下一跳和实际包轨迹。
核对点:混合版本时R1经R2成本2,R2经R1成本5,实际产生环。R1收到12后直达R3成本4;R2继续经R1成本5。迟到11被拒绝。迁移题:若R2重启把序号重置为1,只有“大者更新”而没有任何重启处理,会发生什么?旧12会压住新事实,说明版本单调前提不可省略。
任务六:合法路径未必有共同稳定选择
AS65010得到两条同前缀可用候选:[65020,65000],偏好100;[65030,65040,65000],偏好200。写出选择与导出路径。另有更高偏好候选包含65010自身,说明为什么先排除它。
然后采用正文对经典坏例原理的教学重述:1偏好[1,2,0]胜过[1,0],2偏好[2,3,0]胜过[2,0],3偏好[3,1,0]胜过[3,0],其他路径不允许。枚举8种D/I组合,检验每点是否正选着由邻居当前路径支持的最优候选。再从IDD按2、1、3、2、1、3更新。
核对点:选偏好200的长度3路线,导出为[65010,65030,65040,65000]。三节点没有固定点;执行依次IID、DID、DII、DDI、IDI、IDD。加入空路径也不能给出稳定解,因为直接路线始终可用且更优。
迁移题:把三点策略都改成直接优先,DDD成为稳定赋值。改变策略可以改变固定点是否存在;延长会话超时不会改变原来的三条布尔矛盾式。
本地复算与结果范围
下载纯Python核验器,用Python 3普通模式运行,不需要依赖包或联网。程序输出JSON状态表及测试计数;它显式拒绝会移除assert的-O模式。脚本不连接设备、不发送网络帧。
核验包括20,000次交换源历史对照、16种ARP接收条件、729张四桥成本图、2,187个有向图/目的距离问题、120种LSA到达排列和8/27种策略赋值。图状态和消息序列都是本文明示模型,不据此宣称通过真实STP、RIP、OSPF或BGP的一致性认证。
回到从一帧到收敛中的路由表学习路线,按本次出错的状态返回对应一页。