最近对于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)
暂无评论