选路原理
IP层要通过选路机制来决定向哪个网络接口发送分组,是直接发送,还是通过路由转发(依据目的主机是否在同一个网络),由谁转发?链路层只是负责最终的执行而已;
IP选路通过主机内部的路由表来决定,搜索路由表的顺序如下:
- 搜索匹配的主机地址
- 搜索匹配的网络地址(将目的地址与表项对应接口的掩码地址逻辑与,再比较)
- 搜索默认表项
查看路由表(netstat -rn):
U:该路由可用
H:Destination是主机地址(没有表示网络地址)
G:Gateway是主机地址(没有表示路由地址)(直接路由 or 间接路由?)(直接发送or 转发?)
ICMP主机与网络不可达差错
如果路由表中没有找到匹配项且又没有默认项:
- 如果数据报由本机产生:向应用程序返回“主机不可达”或“网络不可达”差错;
- 如果是被转发的数据报:给源发送端发送一份“ICMP主机不可达”差错报文;
ICMP重定向差错
当IP数据报应该被发给另一个路由器时,收到数据报的路由器要发送ICMP重定向差错报文给IP数据报的发送端;发送端修改路由表,下次直接发送给正确的路由器;
ICMP重定向允许主机进行选路时不需要具备智能特性,而把所有的智能特性放在路由器端;
重定向报文只能由路由器生成,被主机使用;
ICMP路由器发现报文
主机路由表是如何初始化的?方法之一:主机引导期间广播或者多播“路由器请求”报文,然后路由器响应“路由器通告”报文,最后主机更新路由表;
路由器也会定期广播或多播“路由器通告”报文,报文有生命周期;