我们知道路由器将不同的子网连接起来组成Internet,而一个路由器有多个接口,当收到一个数据报时发向哪个接口则需要选路协议。
选路原理:
- 优先匹配主机号
- 再匹配网络号
- 最后是默认表项(默认网关)
我们可以通过netstat命令查看路由表项:
第一行表示:如果我到目的地是default的话我应该走192.168.233.2这个网关,子网掩码是0.0.0.0。
Flags一共有五种
- U:该路由可使用
- G:该路由是一个网关,如果没有这个标志说明是该路由与主机是直接相连的
- H:说明该路由是到一个主机,也就是说该路由是到一个主机,没这个标志则代表该路由是到一个网络
- D:该路由是由重定向报文创建的
- M:该路由已被重定向报文修改。
ICMP主机与网络不可达差错:
如果一个路由器收到一份数据报却不能转发时就会发送一份ICMP主机与网络不可达差错
默认主机是不转发数据报的,除非进行配置作为路由器使用。
ICMP重定向差错:
当主机向R2发送数据报,搜查自己的路由表后决定发送给R1,R1收到后查自己的路由表发送给R2,同时R1检测到收到数据报和发送数据报是同一个接口,这时 R1会发送ICMP重定向报文给主机,将R2加入到路由表或更新
ICMP路由器发现报文:
初始化路由表可通过配置文件制定静态路由。另一个方法是主机在引导过程中广播发送路由器请求报文,由收到的路由器进行响应并发送一份路由器通告报文。之后路由器定期广播路由器通告报文,允许监听的主机更新路由表。
动态选路协议:
像Internet中有多种自治系统,每个自治系统有自己内部路由器之间的选路协议,我们称之为内部网关协议IGP,比较有名的是RIP和OSPF。外部网关协议EGP则用于不同自治系统之间的路由器。
RIP:选路信息协议
- 命令字段 1表示请求 2表示应答 3 4舍弃不用
- 版本通常为1 而第二版RIP将此字段设置为2.,
- 后面为地址系列 最多为25条路由,上限25是用来保证RIP报文的总长度为20*25 + 4 = 504 少于512字节
运行时向每个启动了的接口发送一个请求报文,要求其他路由器发送完整路由表。
接收到请求并响应,可能会更新路由表,可能会增加表项,可能会删除
同时相邻的路由器会定期更新,发送自己完整路由表,可以是广播形式的。
RIP所使用的度量是以跳为单位的。相邻的路由器为一跳,每当一条路由器的度量变化时,都会发送报文给相邻的路由器进行更新。进行选路时选择跳数比较少的路由器,但是跳数的最大值为15,因此只适用于内部网关。
另一个内部网关协议是OSPF,它是链路状态协议,路由器并不与其相邻站交换距离信息,采用每个路由器主动测试与其相连链路的状态,将这些信息发送给它的其他邻站,邻站将这些信息在自治系统中广播,从而建立完整路由表
BGP:边界网关协议
与RIP不同的是,BGP采用TCP作为其传输层协议,BGP列举了到每个目的地址的路由,定期发送keepalive报文给其相邻站。