当前课程知识点:计算机网络 > 第四章 网络层 > 4.3 ICMP协议 > ICMP协议
你好
为了提高IP数据报交付成功的机会
在网际层使用了
网际控制报文协议ICMP
ICMP允许主机或路由器报告差错情况
和提供有关差异情况的报告
ICMP是一个非常重要的协议
它对于网络安全具有极其重要的意义
ICMP不是高层协议
而是IP层的协议
ICMP报文
作为IP层数据报的数据部分
加上数据报的首部
组成IP数据报发送出去
我们首先来看一下ICMP报文的格式
ICMP报文的前4个字节是统一的格式
共有三个字段
分别是1个字节的类型号字段
1个字节代码字段
2字节的校验和字段
请注意
这里是整个ICMP报文的校验和
而不仅仅是首部校验和
接着的4个字节
取决于ICMP报文的类型
最后是数据字段
其长度取决于ICMP的类型
ICMP报文的一共有两大类
即ICMP差错报告报文
和ICMP询问报文
下面分别进行介绍
ICMP差错报告报文共有5种
第一种终点不可达
当路由器或主机不能交付数据报时
就向源点发送终点不可达报文
类型字段为3
第二种是源点抑制
当路由器或主机由于拥塞
而丢弃数据报时
就向源点发送源点抑制报文
使源点知道要把数据报的发送速率放慢
第三种是超时
当路由器收到一个IP数据报时
若目的地址不是自己
就会将其TTL减1再转发出去
但当TTL减1后变为0时
除丢弃该数据报外
还要向源点发送超时差错报告报文
类型值为11
第4种是参数问题
当路由器或目的主机
收到的数据报的首部中
有的字段的值不正确时
就丢弃该数据报
并向源点发送参数问题报文
类型值是12
第5种是改变路由
或者叫重定向
当路由器发现更好的路由时
把改变路由报文发送给源主机
类型值是5
所有的ICMP差错报告报文中的
数据字段都具有同样的格式
具体见图
把收到的需要进行差错报告的
IP数据报的首部
和数据字段的前八个字节提取出来
作为ICMP报文的数据字段
再加上相应的ICMP差错报告报文的
前8个字节
就构成了ICMP差错报告报文
为什么要提取数据报的数据部分的
前8个字节呢
这样做的目的是为了得到运输层的端口号
对于TCP和UDP而言
以及运输层报文的发送序号
对于TCP而言
这些信息对源点通知高层协议是有用的
为了使ICMP差错报告报文的发送
不致于产生大量的通信量
以下几种情况
不发送ICMP差错报告报文
对ICMP差错报告报文
不再发送ICMP差错报告报文
对第一个分片的数据报片的
所有后续数据报片
都不发送ICMP差错报告报文
第一个分片已经将差错情况报告给源站
其他分片就没必要重复发送了
对具有多播地址的数据报
都不发送ICMP差错报告报文
这样做的目的
也是为了减少不必要的通信量
对具有特殊地址
如127.0.0.0或0.0.0.0的数据报
不发送ICMP差错报告报文
127.0.0.0是环回测试地址
而0.0.0.0是指本网络本主机
ICMP询问报文有两种
第一种是回送请求和回答报文
ICMP回送请求报文
是由主机或路由器
向一个特定的目的主机发出的询问
收到此报文的主机
必须向源主机或路由器
发送ICMP回送回答报文
这种询问报文用来
测试目的站是否可达及了解其状态
其类型值分别是8和0
第二种是时间戳请求和回答报文
ICMP时间戳请求报文
是请某个主机或路由器
回答当前的日期和时间
在ICMP时间戳回答报文中
有一个32位的字段
其中写入的整数代表
从1900年1月1日起
到当前时刻一共有多少秒
时间戳请求和回答报文
可以来进行时钟同步和测量时间
类型值分别为13和14
ICMP一个重要应用
就是分组网间探测
简称PING
用来测试两个主机之间的连通性
PING使用了
ICMP回送请求与回答报文
PING是应用层
直接使用网络层ICMP的例子
它没有通过运输层的TCP或UDP
Windows操作系统的用户
可以在接入因特网后
通过点击“开始”“运行”
再键入“cmd”
进入命令行窗口
看见屏幕提示符后
键入ping hostname
这里的hostname
就是要测试连通性的主机名
或它的IP地址
按回车键后就可以看到结果
图中如果键入的是
ping mail.sina.com.cn
这显示了
本主机到新浪邮箱的邮件服务器的
连通性的测试结果
从测试的结果看
PC一共发送了4个ICMP回送请求分组
1个分组丢失
丢包率为25%
往返时延的最小值是368ms
最大值是374ms
平均372ms
另一个非常有用的应用是traceroute
这是unix操作系统中的名字
在windows操作系统中
它的命令是tracert
它用来跟踪一个分组
从源点到终点的路径
下面我们简单介绍其工作原理
traceroute从源主机向目的主机
发送一连串IP数据报
数据报中封装的是
无法交付的UDP用户数据报
端口号错
非法端口号
第一个数据报P1的TTL置为1
P1到达第一个路由器R1
TTL由1减为0
R1丢弃数据报
并向源主机发送ICMP超时差错报文
源主机接着发送第二个报文P2
TTL置为2
P2先到达路由器R1
R1收下报文后将TTL减1
再转发给R2
R2收到P2时TTL为1
但减1后TTL变为0了
R2就丢弃P2
并向源主机发送ICMP超时差错报文
这样一直继续下去
当最后一个报文到达目的主机时
TTL等于1
主机不转发数据报
也不把TTL减为0
但因IP数据报中封装的
是无法交付的运输层的UDP用户数据报
目的主机向源主机
发送ICMP终点不可达差错报告报文
这样
源主机由这些ICMP报文
获得了到达目的主机
所经过路由器的IP地址
及到达每个路由器的往返时间
如图是向新浪网的邮件服务器
mail.sina.com.cn
发出的tracert命令后所获得的结果
图中给出了到达该邮件服务器
所经过的每一路由器的IP地址
以及达到其中每一个路由器的往返时延
-1.1 计算机网络的发展历程及其在信息时代中的作用
-1.2 互联网的组成
--互联网的组成
-1.3 电路交换和分组交换
-1.4 计算机网络的性能
--计算机网络的性能
-1.5 计算机网络体系结构和层次划分
-第一章
-2.1 数据通信系统模型
--数据通信系统模型
-2.2 导向型传输媒体
--导向型传输媒体
-2.3 光导纤维
--光导纤维
-2.4 非导向型传输媒体
--非导向型传输媒体
-2.5 信道的极限容量
--信道的极限容量
-2.6 信道复用技术
--信道复用技术
-2.7 ADSL
--ADSL
-第二章
-3.1 数据链路层的三个基本问题
-3.2 CSMA/CD协议
-3.3 虚拟局域网
--虚拟局域网
-3.4 扩展的以太网
--扩展的以太网
-3.5 高速以太网
--高速以太网
-第三章
-4.1 分类的IP地址-划分子网
-4.2 无分类编址-构造超网
-4.3 ICMP协议
--ICMP协议
-4.4 路由器结构
--路由器结构
-4.5 RIP协议
--RIP协议
-4.6 IP多播
--IP多播
-第四章
-5.1 用户数据报协议UDP
-5.2 TCP报文段首部格式
-5.3 可靠传输工作原理
--可靠传输工作原理
-5.4 字节为单位的滑动窗口实现
-第五章
-6.1 网络应用层
--网络应用层
-6.2 DNS
--DNS
-6.3 FTP
--FTP
-6.4 HTTP
--HTTP
-6.5 P2P
--P2P
-6.6 计算机网络面临的安全性威胁
-6.7 防火墙
--防火墙
--第六章
-7.1 交换机基本配置
--交换机基本配置
-7.2 路由器基本配置
--路由器基本配置
-7.3 交换机端口隔离
--交换机端口隔离
-7.4 跨交换机实现相同VLAN通信
-7.5 动态路由
--动态路由
-7.6 静态路由
--静态路由