ICMP
Internet 控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。
- 报文头内容
TYPE | CODE | 描述 |
---|---|---|
8 | 0 | Echo request |
0 | 0 | Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
checksum:校验和
Identifier:报文ID
Sequence number
Sequence number LE
ICMP重定向报文super vlan再研究。
差错检测
ICMP Echo Request 和 ICMP Echo reply分别用来查询和相应某些信息,进行差错检测。错误报告
当网络设备无法访问目标时,会自动发送ICMP目的不可达报文到发送端设备。-
ping参数
- a 携带源地址
- c 共多少次
- h 指定TTL值
- t 超时时间默认2000ms
Tracert 跟踪路径
ICMP的另一个经典应用是Tracert。Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定的地址的路径,源端首先将报文的TTL值设置为1.该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。接下来源端将TTL值设置为2,以此类推直到报文到达目的地。这样源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,也可以发现网络中的路由环路。
-
测试Tracert
使用三个路由器,配置成不同网段,设置静态路由。
- 路由1
<Huawei>system-view
[Huawei]sysname r1
[r1]interface g0/0/0
[r1-GigabitEthernet0/0/0]ip address 12.1.1.1 24
[r1]ip route-static 23.1.1.0 24 g0/0/0 12.1.1.2
- 路由2
[r2]interface g0/0/0
[r2-GigabitEthernet0/0/0]ip address 12.1.1.2 24
[r2]interface g0/0/1
[r2-GigabitEthernet0/0/1]ip add 23.1.1.2 24
[r2-GigabitEthernet0/0/1]q
[r2]ip route-static 23.1.1.0 24 g0/0/1 23.1.1.1
- 路由3
[r3]interface g0/0/0
[r3-GigabitEthernet0/0/0]ip add 23.1.1.1 24
[r3]ip route-static 12.1.1.1 24 g0/0/0 23.1.1.2
<r1>tracert 23.1.1.1
traceroute to 23.1.1.1(23.1.1.1), max hops: 30 ,packet length: 40,press CTRL_C to break
1 12.1.1.2 60 ms 30 ms 10 ms
2 23.1.1.1 40 ms 30 ms 20 ms
开始抓包进行测试
- tracert 尝试使用UDP 目的端口为33434 并设置TTL为1
- 由经过的一个转发设备返回ICMP差错报文(Type:11 Code:0)提示TTL值已到生命周期。被源端收到并由tracert记录
- 图上的第四次请求才使用UDP请求第二个节点,并将TTL值设置为1
问题:
- 为什么会发出三次UDP请求?我们可以从IP协议的ID字段看到依次递增,为什么tracert要向第一个节点发出三个UDP报文?第四个报文才向第二个节点发起?
经过一番探索果然是来自于traceroute这三次返回延时的问题,如果我加上参数q 设置探测包数量为1 就好了