Traceroute 程序(icmp应用)
作用
可以让我们看到IP数据从一台主机传到另一台主机经过的路由
方式
使用icmp和IP首部中的TTL
- 每经过一个路由器,TTL减一。
- ICMP回显超时报文中包含信源IP地址
- IP数据报的内容是一份端口不可达的UDP数据。
主机发送一个IP数据报(TTL=1),处理数据的第一个路由器将TTL-1=0,丢弃该数据报,给主机发送一份ICMP超时报文,这样就得到了第一个路由器的IP地址。
主机发送一个IP数据报(TTL=2),处理数据的第二个路由器将TTL-1=0,丢弃该数据报,给主机发送一份ICMP超时报文,这样就得到了第二个路由器的IP地址。
以此类推......
当到达目的主机后,主机接收数据后,产生一份端口不可达的ICMP差错报文,从而告诉主机这是目的主机。
ICMP超时报文格式:
与端口不可达报文类似,不同点:1.类型为11 2.代码为0
注意:
1.源主机不断发送UDP数据报,每个路由返回ICMP超时报文,目的主机返回ICMP端口不可达报文。所以traceroute的关键就是分辨超时报文以及不可达报文即可。
2.ICMP返回报文中的IP地址是UDP数据报到达路由接口的IP
广域网输出
写法:traceroute+网址(linux)
tracert +网址
IP源站路由选项
IP动态路由
每个路由器都要判断下面应该转发到哪个路由,程序对此并不能控制
源站路由
1.严格源站路由(SSRR)
必须经过的确切路由路径,否则返回ICMP源站路由选路失败报文
2.宽松源站路由(LSRR)
数据经过的IP地址清单
源站路由选项-----源站路由的存放
1.格式与记录路由的选项一致,不同点:填充IP清单------发送IP清单
2.严格code(0x89);宽松code(0x83)
宽松选路的traceroute程序的往返路由
格式:traceroute -g 目的主机 源主机
效果:
源主机到目的主机再到源主机的每一个路由都会被记录
这样就可以检验由源主机到目的主机 和 目的主机到源主机经过的路由是否一致。
注意:
这里的IP源站路由选项存放的为源主机指定的IP地址。所以只要自己指定的路由的个数不超过9即可,具体的执行过程还是按照Traceroute的过程。
第九章 IP选路
目的:搜索路由表并且决定向哪个网络接口发送分组数据
简单路由表
命令:netstat -r (列出路由表);-n (以数字格式的IP地址)
Flag
U可用
G间接相连,到目的主机的路径之中存在路由器
H目的地是主机
D重定向报文创建的
M已经被重定向报文修改
初始化路由表
守护程序初始路由
使用route命令
未到达目的地的路由
如果路由器没有默认项,而且又未找到匹配选项
1.如果为本机发出的数据,发送给相应的应用程序一个:主机/网络不可达
2.若为转发的数据,给原始发送端发送“主机不可达”的ICMP差错报文
ICMP重定向差错报文
概念:当IP数据报应当发送给另一个路由器时,收到数据报的路由器会发送一个ICMP重定向差错报文给IP数据报的发送端。
作用:通过重定向ICMP差错报文,发送端可以更新自己的路由表信息,下一次发送的时候便可以到达指定的路由器。
报文格式
类型(5) |
代码(0~3) |
检验和 |
应当使用的路由器IP地址 |
||
IP首部(包括选项)+原IP数据报数据部分前8位 |
ICMP路由器发现报文(ICMP路由器通告与请求报文)
作用:初始化路由表
格式:
1.ICMP路由请求报文
类型(10) |
代码(0) |
检验和 |
未用(设置为0) |
2.ICMP路由器通告报文格式
类型(9) |
代码(0) |
检验和 |
地址数 |
地址项长度(2) |
生存时间 |
路由器地址[1] |
||
优先级[1] |
||
路由器地址[2] |
||
优先级[2] |
||
...... |
第十章 动态选路协议
动态选路:守护程序 通过选路协议与相邻路由器之间进行通信,从而了解每个路由器相连的网络结构,从而更新路由表。
RIP:选路信息协议
报文格式:包含在UDP报文中
IP首部 |
UDP首部 |
RIP报文 |
20字节 |
8字节 |
|
守护程序的工作
1.初始化
启动routed程序后,给每一个启动的接口发一个请求报文
2.接受请求
接受请求后,按照请求的规则发送相应。
3.接受相应
接收到路由表后,对自己的路由表进行更新。
4.定期路由更新
一般30s一次,将自己的路由表发送给相邻路由器,可以以广播的形式。
5.触发更新
每当一条路由度量发生了变化,便对变化的项目进行更新
度量
1.直接相连的接口为1
2.相邻路由器跳数为1 的网络,我们与那个网络的度量为2.