IP选路和ICMP协议
IP如何选路概述:
- ip选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组,区别于选路策略,后者是一组决定把哪些路由放入路由表的规则;ip执行选路机制,而路由守护程序则一般提供选路策略如rip,ospf
- 点对点时,直接送到
- 非点对点时,经过路由器送到
- Ip层可以是配置为路由或者主机前者非则转发,后者非则丢弃
- 路由表项:每一项为
- 目的ip地址(网络地址指定网络中所有主机或主机地址);
- 下一站路由器的ip地址,可能充当中继转发的,下一站非终点;
- 标志:指明目的地址是网络还是主机,下一站是路由器还是直连的接口
- 数据传输的网络接口如wlan0,eth0
- ip选路是逐跳进行的,
- 例子:
没连接热点前:Kernel IP routing table1
2
3
4
5
6ernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.42.0.0 * 255.255.255.0 U 600 0 0 wlp2s0
link-local * 255.255.0.0 U 1000 0 0 wlp2s0```
连接热点后:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 600 0 0 wlp2s0
link-local * 255.255.0.0 U 1000 0 0 wlp2s0
192.168.0.0 * 255.255.255.0 U 600 0 0 wlp2s0
1 | ``` |
wlp2s0 Link encap:Ethernet HWaddr 48:5a:b6:6e:c9:5f
inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::d713:7c0f:b40c:c085/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7032 errors:0 dropped:0 overruns:0 frame:0
TX packets:4297 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3668623 (3.6 MB) TX bytes:703812 (703.8 KB)
1 | ##### netstat命令 |
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
enp1s0 1500 0 0 0 0 0 0 0 0 0 BMU
lo 65536 0 1404 0 0 0 1404 0 0 0 LRU
wlp2s0 1500 0 7257 0 0 0 4311 0 0 0 BMRU
1 |
netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlp2s0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 wlp2s0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp2s0
1 | ##### 初始化路由表 |
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1 | 其中options和padding不一定有 |
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| different type and code has different content |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```
- 被封装于ip报文中,ip头加icmp,所有报文前四个字节都相同
(8位类型,8位代码,16位校验和) - 类型+代码决定ICMP的报文类型,种类很多,见协议卷表
- 下列几种不会导致icmp差错报文:
- icmp差错报文;
- 目的地址为广播地址
- 作为链路层的广播地址
- 不是ip分片第一片
- 源地址不能为零地址,环回地址,广播地址或多播地址
- 上述是为了防止过去允许icmp差错报文对广播分组带来的广播风暴
ICMP协议总结几种类型:
- 主机不可达
- 重定向错误
- 路由发现报文
- icmp地址掩码请求和应答
- icmp时间戳请求和应答
- icmp端口不可达
- ping 回显请求:
- 等等见表
- 且类型不同发送的报文格式不同
- 主机不可达:当路由器收到一份ip数据报但是在路由表中搜索后找不到,不能转发时,会发送一份icmp主机不可达的差错报文
- 还有可能是已经经过了几个路由器后出现主机或网络不可达的情况,所以若是测试局域网,则先让路由器断开网络,ping路由器则确保问题不是在本地,而是在网络上;
- icmp重定向错误:
举个例子,主机在路由表中搜索后将数据包发给默认路由,R1路由器,接着R1路由器搜索后发送给R2路由器,并同时发现它正在发送的接口(R2)和数据报到达的接口相同,即主机和两个路由器所在lan,即在同一个lan中)此时主机可以直接发送给R2,所以R1就发送一份ICMP重定向报文给主机,这样主机下次就可以直接发给R2了 - 如何更新路由表?通过ICMP的路由器发现报文:
以及利用路由器的定期广播多播它们的路由器通告报文rfc1256,而它一般是由用户守护进程来创建和处理 - icmp地址掩码请求和应答,发送对某个ip地址请求地址掩码,并接收到子网掩码。路由器回复或者主机回复
- icmp时间戳请求和应答,通过向某个IP主机发送这个,从而得到时间信息,telnet也可以进行,如NTP协议(网络时间协议)
- icmp端口不可达:udp报文发送给主机后,若端口不匹配,对方主机会发送端口不可达的差错报文
- ping回显,后面有文章记录ping程序编写
动态选路
使用场景
上述讲的是静态路由表的情况:适合于1网络较小,2且与其他网络只有单个连接点,3且没有多余的路由时(如主路由失败,可以选择备用路由); - 总结:一种更新路由表的动态协议,从而达到最短路径
- 上述三个条件不满足时,通常使用动态选路协议
- 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时出现动态选路,路由器之间必须采用选路协议进行通信;路由器上有一个称为路由守护程序的进程,它运行选路协议,并与相邻的路由器通信,根据收到的信息,更新路由表
分类:
RIP ,OSPF(开放最短路径优先),BGP
宏观上看
在internet上,存在大量的主机,路由器等;并以一组自治系统(AS)的方式组织的,每个自治系统通常由单个实体管理,比如大学校园,公司,常常被定义为一个自治系统,NSFNET的internet骨干网形成一个自治系统;
- 自治系统中使用的选路协议,称为内部网关协议IGP或者称为域内选路协议,这些协议有RIP,OSPF
- 用于不同自治系统之间的路由器,称为外部网关协议EGP,常见有BGP
- unix选路守护程序:routed,gated等
RIP:rfc1058
- rip采用udp报文,端口号位520,为一种采用距离向量的协议,易受攻击
- 流程:
- 初始化:启动一个路由守护进程时,先判断启动了哪些接口,接着在每个接口上发送请求报文,要求其他路由器发送完整的路由表,广播或点对点
- 接收请求:接收到上述请求后,会回复完整的路由表,否则处理请求报文每一个表项,若有链接到指明地址路由,则度量设置为我们的值,否则设置为16表示无穷大。返回响应
- 接收到响应后,更新路由表,如增加或修改或删除,采用Dijkstra算法得到最短路径树
- 定期选路更新,30s一次,进行广播发送完整路由表给相邻的路由器
- 触发更新:即每当度量发生变化,则对它进行更新,只需要发送度量变化的表项
- 定时器:3min内无更新路由,则度量设置为无穷大,标注为删除,再过60s删除并传波
- 注:度量就是跳数,相邻路由度量为1
- rip问题:无子网概念;路由器或链路故障要很久才能稳定下来,即收敛慢;易发生环回路由;跳数限制了网络大小15
OSPF开放最短路径优先:rfc1247
- 是一个链路状态协议;
- 使用ip协议而不是udp.tcp,
- 不与邻站交换距离信息而是主动测试与其他邻站相连链路状态,并将这些信息发送给它的其他邻站,邻站接着广播出去,每个路由器接收到后更新路由表
- 收敛快
- 可以对每个ip服务类型计算各自的路由集,意味着对任何目的,可以有多个路由表表项,每个表项对应一个ip服务类型;
- 给每个接口指派一个费用,通过吞吐率,往返时间,可靠性等,可以给每个ip服务类型指派一个费用
- 同一个目的地址存在多个相同费用的路由时,在这些路由上平均分配流量,即流量平衡
- 支持子网
- 路由器之间的点对点链路不需要每端都有一个ip地址,-无编号网络,节省ip
- 多播而非广播