0. 回顾
我们一开始讲到网络层就是一个全球范围内大的邮递系统。在前面两节中,我们学习到网络层中的两大类型的协议。其中RIP、OSPF 和BGP等路由协议解决了邮差如何找路的问题,ARP地址协议解决了邮差最后一公里如何找到快递对应的人的问题。
而在这个大的邮递系统中,难免会出错。而如何检查差错就成为了一个问题,这一节,我们就来学习网际控制协议ICMP。
1. ICMP网际控制协议
ICMP(Internet Control Message Protocol) 是网络层中核心协议之一,它可以通过发送控制信息,提供通信中的各种问题反馈,帮助管理员解决问题。
1.1 ICMP协议的封装
ICMP报文运行在网际层,被封装在IP的数据部分。在ICMP报文中最前面的是三个字段,类型,代码,校验和。
1.2 ICMP协议的种类
ICMP的报文按照是请求还是回答,可以分为两种,即
- ICMP差错报告报文,路径中的设备主动报告错误
- ICMP询问报文, 源主机请求目的或者路径上的设备报告
注意ICMP标准不断更新,有一些协议已经不再使用。
2. ICMP差错报告协议
这部分类型是在路由过程中的目的设备或者路由器出错时向源站点发送错误信息。
- 时机:发生错误的时候
- 发起设备: 路由器
类型的值 | 类型 | 常见代码 |
---|---|---|
3 | 终点不可达 | 0.网络不可达 1.主机不可达 2.协议不可达 3.端口不可达 4.需要分片 …13. 由于过滤被禁止 |
5 | 改变路由(redirect) | 0. 网络重定向 1. 主机重定向 2. 服务类型和网络重定向 3.服务类型和主机重定向 |
11 | 时间超过 | 0. TTL为零 1. 在数据组装期间TTL为零 |
12 | 参数问题 | 0. 坏的IP首部 1.缺少必需的选项 |
2.1 终点不可达
- 场景:路由器或者主机不能交付数据报时
- 错误信息:目的网络,目的主机,目的协议,目的端口等等不可达信息(根据具体情况)
2.2 改变路由(redirect)
- 场景:路由器识别到更加路由时
- 信息:改变路由信息
2.3 时间超过
-
场景:检测数据包的TTL为0(每个数据包设置了一个在网络中的最长生存值,每经过一个路由器都会减去1)
-
错误信息:时间超过
2.4 参数问题
- 场景:检查到数据包中字段有问题
- 错误信息:参数问题
3. ICMP查询报文
这部分是源站点察觉可能出错时候,会使用ICMP去请求路由器和目标站点发送一些信息帮助差错。
- 时机:源站点察觉可能有错
- 发起设备:源站点
类型值 | 类型 | 解释 |
---|---|---|
0 | 回送回答 | 向一个特定的设备发出询问 |
8 | 回送请求 | 设备回答信息 |
13 | 时间戳请求 | 请求目标设备回复时间 |
14 | 时间错回答 | 设备回答信息 |
3.1 回送请求与回送回答
3.2 时间戳请求与回答
4. ICMP的两大应用
4.1 分组网间探测ping
ping
协议是我们日常中最常使用的一个应用。它可以用来测试主机与设备之间的联通性,使用的是ICMP中的回送请求和回答报文。
4.2 traceoute追踪
traceoute
是我们另外一个最常使用的应用(window中是tracert
),它可以测试达到目标主机要经过的路由设备, 使用的是ICMP中差错报告报文。
原理:向目标节点发送封装了无法交付UDP数据报的IP数据报,通过改变TTL值来引起错误,使得经过的设备主动发送回信息。
5. 总结
在网络层中,难免会出现差错。而在网络层中,我们使用ICMP网际控制协议来更好的解决错误。ICMP是直接运行在网络层的,它被封装在IP的数据报中。ICMP可以分为两种类型的报文。
报文类型 | 详解 | 类比邮递系统 | 常见分类 |
---|---|---|---|
ICMP差错报告报文 | 路径中的主机或路由器主动报告差错或异常情况 | 邮递员(看见包裹坏了\路不通\没有收件人),向寄件人报告情况 | 终点不可达,重定向,源点抑制,超时,参数问题 |
ICMP查询报文 | 源站点请求主机或者路由器发送一些信息 | 寄件人看到包裹迟迟没到,给邮递员打电话催一催 | 回送申请/应答,时间戳申请/应答 |
而在日常生活中,我们会经常使用到基于ICMP的两个协议:
应用 | 用处 | 底层协议 |
---|---|---|
ping | 测试设备之间的连通性 | ICMP查询报文(回送请求/应答) |
traceout(tracert) | 测试路径通过的设备,即路由路径 | ICMP差错报告报文(超时) |