boxmoe_header_banner_img

Hello! 欢迎来到Akurisu的站点!

加载中

文章导读

CS168 Link-State Protocols and Distance-Vector Protocols


avatar
akurisu 2026年3月31日 21

最近对于CS61A的学习接近尾声,我却没怎么写博客,实在不知道怎么写笔记(一定不是我懒)。

开个新坑 CS168 的学习,同时写写Stanford CS144的作业。感觉有必要去古法笔记一点有用的知识。

Distance-Vector Protocols(距离向量协议)

每一个路由都有一个表。上面标注了destination(目标网络),via(下一跳),cost(代价),ttl(time to live)(存活时间)等。

  • destination(目标网络)指接收数据包的目的网络
  • via(下一跳)指下一跳路由器
  • cost(代价)指从本路由器到目标网络所需的开销
  • ttl(存活时间)如果在计时器归零前未收到该条目的更新,则将其删除

值得注意的是,这种Protocol使每个路由无需知道网络全貌,只需按照特定的步骤执行指令,外部世界对于它而言近似黑箱。每个路由器遵循以下原则:

  • 当表更新后,发布通告。就算不更新,每隔一定时间发送通告。
  • 当接收到别人的通告,其中的目标网络不在你的表中时,更新你的表使之存在。
  • 当接收到别人的通告,其中的目标网络在你的表中,同时 通告代价 + 到邻居的链路代价 < 当前已知最优代价 时,更新你的表。
  • 当接收到别人的通告,这个通告是由你的下一跳路由器发出时无论新通告的代价变大、变小还是不变,都应更新你的表。
  • 不要发送通告给你的下一跳路由器(水平分割);或者发送毒性反转给它,毒性反转中的代价为无穷。二者选一采纳
  • 任何代价大于某个值(如15,RIP)都被认为无限
  • 检测到直连链路故障后,将相关路由的代价设为无穷(16),并向所有邻居发送该毒性反转条目,以快速通告不可达。

其中,很多原则都出于防环的目的。

Link-State Protocols(链路状态协议)

路由表的构成依旧没有差异。不同的是对于这种Protocol,外部网络是白箱,每个路由器具备独立计算最优路径代价的能力。每个路由器遵循以下原则:

  • 发现邻居路由器,建立邻接关系,测量链路代价。
  • 如果本地信息更新,将自身直连链路的状态(如邻居,代价)封装为通告发给自己的邻居路由器,即使不更新,每隔一段时间发布通告。
  • 当你收到邻居路由器的通告时,除非你已经见过这个通告,不然将它发给所有的邻居路由器(除了接收接口)。设置序列号或者时间戳以确认你是否见过这个通告。
  • 链路状态变化(如链路故障、恢复)会立即触发通告全网泛洪,每个路由器独立快速重算最短路径。

链路状态协议的优势在哪里?

  • 快速收敛,对拓扑变化响应及时
  • 每个路由器拥有全网拓扑视图,更好控制路由道路。
  • 路由计算稳定、无依赖

实际网络实践中常常将两种协议结合使用。



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码