选路原理
在IP协议中,我们有一段的文章介绍了IP路由的相关知识。
这里还是以我自己用的主机为例,查看我的本机路由表:
1 tony@tony:~$ netstat -rn 2 内核 IP 路由表 3 Destination Gateway Genmask Flags MSS Window irtt Iface 4 0.0.0.0 183.11.12.1 0.0.0.0 UG 0 0 0 ppp0 5 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 ppp0 6 183.11.12.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
用netstat命令可以查看本地静态路由表,分析下这里产生的数据:
可以看到这里有8个字段,其中Destination代表目的地,Gateway代表出口网关,就是下站路由地址,Genmask代表该路由表项的掩码,Iface代表此路由表项的网关接口类型。第4行中Destinatio全为0,代表这是一个默认路由项,所有的数据包如果找不到指定匹配的路由项,则交给默认路由项转发,这里的路由网关是:183.11.12.1。第5号中Destination为169.254.0.0,Genmask为:255.255.0.0,这表示所有和这匹配的网络号(此时不是单个主机地址,是一个网络地址)都不经过下站路由转发,而是直接送达,因为此项的Gateway为:0.0.0.0,全0的网关代表无网关,即直接送达。第六行Destination为:183.11.12.1,掩码Genmask为:255.255.255.255,Gateway为:0.0.0.0则表示这也是一个直接送达不要进行路由转发的规则项,这里的掩码全为255,是PPP点对点连接协议特有的掩码形式,至于为什么,我google了下,也没有明确的解释,有人知道的留言告诉我下。
主机不可达差错
当IP数据包在最终不能确定下一个路由器网关时,则发送一个ICMP出错报文请求回来。关于ICMP的信息,可以参考前一篇博文。
动态选路协议
根据上面的选路原理,我们知道选路的三个步骤是:主机选路,网络选路,默认选路。这个选路的机制是确定的,但是选路的策略则可以是动态的,策略,即可选的路由表项数据。
动态选路的原理:每台路由器主机内运行一个守护进程,它用UDP协议向附近的路由器发送请求以得到最新的路由表项记录,以更新到自己的选路策略里。
这篇文章比较短,有几个原因,一是关于选路的协议,算法,估计一整本书都写不完。二是这个复杂性对于做应用的我来说花大量的时间在这个更多涉及物理特性上的东西上,有点浪费。以后的章节会详细学习,因为到了TCP/IP协议里的重点上来了,比如UDP,TCP协议等。