选择路径的算法以及算法所使用的数据结构是网络层设计的最主要的内容。.
路由算法(routing algorithm)负责确定一个进来的分组应该被传送到哪一条输出线路上。若是数据报,则须对每个分组重新选择路径,而对于虚电路,分组只要沿着已经建立的路径向前传递即可(此时也称为会话路由)。
静态路由算法:非自适应路由算法,不会根据当前测量或者估计的流量和拓扑结构,来调整他们的路由决策,所使用的路由选择是预先在离线情况下计算好的。
动态路由算法:自适应路由算法,根据当前的流量和拓扑结构的变化,自动改变路由决策。
最短路径路由算法:静态算法。跳数或物理距离或其他某种准则。路由算法可以根据任何一种准则或者多种准则的组合来计算“最短”(不一定是物理最短)路径。
扩散法:静态算法。每一个进来的分组将被发送到除了进来的那条线路之外的每一条输出线路上。为避免大量的重复分组,一种方法是在每个分组的头中包含一个跳计数器,每经过一跳该值减1,等于0时该分组被丢弃。另一种做法是记录已经扩散过的分组。一种实用的扩展是选择性扩展算法。
距离矢量路由算法:动态路由算法。每个路由器维护一张表(即一个矢量),表中列出了当前已知的到每个目标路由器的最佳距离,以及所使用的线路。通过在邻居路由器之间相互交换信息,路由器不断更新自己内部的表。缺陷是无穷计算问题,导致需要很长时间才能收敛到稳定状态。引起的原因在于,当X告诉Y他有一条路径通向Z的时候,Y无从知道Y自己是否就在这条路径上。
链路状态路由算法:动态路由算法,替代了距离矢量路由算法。其思想为:
(1)发现他的邻居节点,并知道其网络地址。
(2)测量到各邻居节点的延迟或者开销。
(3)构造一个分组,分组中包含所有他刚刚知道的信息。
(4)将这个分组发送给所有其他的路由器。
(5)计算出到每一个其他路由器的最短距离。