ICMP协议原理及报文分析Word格式文档下载.docx
《ICMP协议原理及报文分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《ICMP协议原理及报文分析Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
本文较深入地解释说明了TCP/IP协议组中的ICMP协议及其工作原理。
ICMP是“InternetControlMessageProtocol”(Internet控制报文协议)的缩写,是一种与IP协议并行运行在网络层的协议,也是最常用也最重要的协议之一,属于OSI/RM参考模型里面第三层网络层的子协议,用于在IP主机、路由器之间传递控制消息,控制着网络流量。
控制消息包含网络通不通、主机是否可达、路由是否可用等网络本身的消息。
本文还深入分析了在常用操作系统下(如Windows,DOS)利用ICMP协议实现的ping命令和tracert命令,它们是用来测试网络是否通畅,主机是否可达,及查看到目的主机所经过的路由器的个数和IP地址。
关键词:
ICMP,TCP/IP,Ping,tracert
第一章TCP/IP结构模型
1.1TCP/IP结构模型
目前使用的大多数网络通信协议的结构都是基于OSI(OpenSystemsInterconnection,开放式系统互联模型)模型的。
TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制和网间互连协议)结构也是基于OSI模型但又并不严格遵循OSI模型。
但当前关于如何使用分层模型来描述TCP/IP又没有一个统一的协定。
一般承认TCP/IP比7层OSI模型层次少(3到5层)。
这里以4层TCP/IP结构进行阐述。
TCP/IP结构中忽略了OSI模型中的某些特征,只综合了部分相邻OSI层的特征并分离其它各层。
信息由4层结构中的应用层传送到物理层。
当发送数据时,每层将其从上层接收到的信息作为本层数据,并在数据前添加控制信息头,然后一起传送到下一层。
每层的接收数据过程与以上发送过程正好相反,其中在数据被传送到上一层之前要将其控制信息头移去。
TCP/IP4层模型以及每层主要功能描述如下:
应用层(ApplicationLayer)
TCP/IP组中的应用层综合了OSI应用层、表示层以及会话层的功能。
因此,在TCP/IP结构中,传输层以上的任何过程都称之为应用。
在TCP/IP中,使用套接字(socket)和端口描述应用程序通信路径。
大多数应用层协议与一个或多个端口号相关联。
传输层(TransportLayer)
TCP/IP结构中包含两种传输层协议。
其一传输控制协议(TCP),确保信息传输过程。
其二用户数据报协议(UDP,UserDataProtocol),直接传输数据报,而不需要提供端对端可靠校验。
两种协议对应不同的应用具有各自功能。
网络层(NetworkLayer)
TCP/IP网络层中的主要协议是网际协议(IP)。
所有网络层以下或以上的各层通信在跨越TCP/IP协议栈时,都必须通过IP完成。
此外,网络层还包含部分支持性协议,实施和管理路由过程。
网络访问层(NetworkAccessLayer)
在TCP/IP结构中,网络访问层由数据链路层和物理层合并而成。
TCP/IP网络访问层并没有重新定义新标准,而是有效利用原有数据链路层和物理层标准。
物理层中规定了硬件通信属性,但它不直接作为网络层及以上层的TCP/IP协议的接口。
ICMP是“InternetControlMessageProtocol”(Internet控制报文协议)的缩写,是一个非常重要的协议,它对于网络安全具有极其重要的意义。
ICMP消息是随IP数据包一起传输的,但该消息本身也是一种与IP协议并行运行在网络层的协议。
它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。
比如我们经常使用的用于检查网络通不通的Ping命令,这个“ping”的过程实际上就是ICMP协议工作的过程。
还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ICMP协议原理概述
ICMP是“InternetControlMessageProtocol”(Internet控制消息协议)的缩写。
比如我们经常用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议的过程。
从因特网的角度看,因特网是由收发数据的主机和中转数据的路由器组成。
在通信系统中,IP协议被用来实现主机之间的数据报传递,而路由器用来连接网络设备。
但是,IP通信过程中总会碰上各种各样的原因导致通信失败,比如:
目的地址不正确。
IP协议虽然提供尽力传递的能力,但并不表示数据报一定能够投递到目的地,并且IP协议并不负责数据报的丢失、重复、延迟和乱序等情况。
因此为了提高IP数据报交付成功的机会,反映数据报的投递情况,因特网增加了因特序等情况,因此为了提高IP数据报交付成功的机会,反映数据报的投递情况,因特网增加了因特网控制报文协议(ICMP),来向源发主机告知网络环境中出现的问题。
引进ICMP协议后,当某个网关发现传输错误时,会立即向信源主机发送ICMP报文,自动返回有用的描述错误的信息,报告出错情况,信源主机必须将有关的差错交给一个应用程序或采取其他措施来纠正问题。
引进ICMP协议还可以获得网络通不通、主机是否可达、路由是否可用等网络本身的消息,帮助网络管理员了解网络状况。
因此,ICMP报文虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP主要是由连接在因特网上的某个结点(一般为路由器)检测到IP数据因为某种原因无法继续转发或投递时启动ICMP报文的传输,一般ICMP消息在以下几种情况下会被发送出来:
(1)当数据报不能到达目的地时。
(2)当网亲失去缓存和转发数据报功能时。
(3)当网关发现并能够引导主机在更短的路由上发送数据报时。
ICMP协议,虽然在实际上它使用IP作为底层支持,但实际上它是IP的一部分,所有系统的IP模块必须实现这个协议。
ICMP报文的最终目标不是应用程序或目的用户,而是该机上处理它的Internet协议软件模块。
也就是说:
Inetrnet控制报文协议允许路由向其它路由器或主机发送差错或控制报文;
ICMP在两台主机的Internet协议软件之间提供通信。
2.2ICMP协议报头
像其它所有的通信业务一样,ICMP报文是放在一个IP数据报的数据部分中传送的。
ICMP报文要求两级封装,如图3.1所示。
每个ICMP报文放在IP数据报的数据部分中通过互联网,而数据报本身放在帧的数据部分中通过物理网络。
携带IMCP报文的IP数据报在传输过程中不具有任何优先级,与正常的IP数据报一样进行转发,唯一不同的是如果携带ICMP报文的IP数据报在传输过程中出现故障,转发该IP数据报的路由将不产生任何关于该差错的报文。
图
ICMP消息使用了一种简单的数据结构,其报头部分由三个字段组成,作为报头第一项的类型(type)字段占用了一个字节,用来表示该协议消息所实现的功能,而占用一个字节长度的代码(code)字段则用来进一步对消息内容进行分类。
IP报头 类型 代码 校验和
(至少20字节) (1字节)(1字节) (2字节)
ICMP消息内容(长度和格式不定)
ICMP协议报头最后一项是两个字节长度的校验和,而其后的ICMP消息内容则与消息功能有关,但所有消息内容中都必须带有引发错误消息和数据报的IP报头和前8个字节,而且这些信息足以使其上层协议对自己的报头进行检查并根据ICMP消息内容来执行适当的操作。
最重要的是,ICMP协议不支持数据纠错功能,该协议只是通过向数据源回送错误消息来告诉路由错误。
各种ICMP报文类型如表所示:
类型
报文
代码
描述
回应应答
回应应答(Ping,与类型8的Ping请求一起使用)
3
信宿不可达
0~15
目的主机不可达
4
拥塞控制
源端抑制报文
5
路径控制
0~3
重定向
8
回应请求
回应请求(Ping请求,与类型0的Ping应答一起使用)
9
路由器公告
路由器公告(与类型10一起使用)
10
路由器请求
路由器请求(与类型9一起使用)
11
超时
0~1
12
参数问题
13
时间戳请求
时间戳请求(与类型14一起使用)
14
时间戳应答
时间戳应答(与类型13一起使用)
17
地址掩码请求
地址掩码请求(与类型18一起使用)
18
地址掩码应答
地址掩码应答(与类型17一起使用)
ICMP协议的消息
为了提前预防协议可能引发的问题,ICMP协议技术规范中事先对消息进行了若干限制。
比如说,规定一个ICMP错误消息不能引发另一个ICMP错误消息。
1)路由消息
ICMP路由消息大多用于请求得到可使用的路由器的清单或对请求的应答,应答中包括可用路由器的清单(清单中的每个路由都有优先级别)。
一类路由是在路由器过载情况下产生的。
如果一个主机向路由器发送过量数据,或者多个主机同时向路由器发送大量数据,都可以导致路由器瘫痪。
但是,这时,路由器可以向发送方回送请求减速消息。
每当路由器无法对接收的数据报进行处理时,路由器就把该数据报丢弃并同时回送给数据源一个减速消息,请求高速传输主机降低发送速率。
收到减速消息的源主机将逐步降低速率直到错误消息消失为止,然后再逐步提高发送速率直到错误消息出现为止。
另一类情况是发生在向一个录由器发送数据报时另一个路由器可借助ICMP消息广播一个更好的路由。
称为路由重新定向。
2)无法到达消息
ICMP无法到达的消息表示在对数据报进行寻址过程中寻址失败而引发的错误信息。
举个简单的例子,目标地址有误的数据报可以引发ICMP协议将无法到达的消息回送给该数据报的原始发送主机。
该消息一般用来指出目标主机或网络不存在或没有应答。
引发该类错误消息的主要原因包括主机处于关机状态,网络链路故障,以及无法使用特定的协议等。
2.4ICMP报文分析
在此部分将会用Sniffer软件捕捉一些ICMP的报文进行分析,对上述原理进行一定的论证说明。
2.ping命令
ICMP协议提供的网络工具之一就是网络管理员最常使用的ping命令。
ping命令可以把一个ICMP回显请求发送给一个指定的主机,接收该命令的主机通过回送一个ICMP回显应答来对收到的ICMP回显请求进行应答。
ping命令的目的是测试主机是否存在。
其实,ping命令是测试网络中两个主机是否可以实现最低级别的连通性。
(1)通过Sniffer捕捉的Ping的报文如下所示:
由上面的报文可以看出,当Type=8Code=0时,为回应请求报文;
当Type=8Code=0时,为回应应答报文,与表2.1所列ICMP类型相符。
(2)把Ping的参数中的L设为3000,捕捉到的报文如下所示:
可知由于报文太大而被分片了,上面也说过了,ICMP报文是放在IP报文的数据部分的,但是否是这样的则通过下面的报文的具体数据来进行说明。
①回应请求的第一个报文
②回应请求的第二个报文
③回应请求的第三个报文
上面也说过了这是一个回应请求报文的三个分片,一个IP报文如果被分片,被分的只是数据部分,分后的每个报文都是有IP头部的。
可以看到只有回应请求的第一个报文是有ICMP的头部的,而第二个、第三个报文却没有,这说明ICMP报文是放在IP报文的数据项部分来进行发送的,与上面所说的理论是相符的。
2.4.2路由跟踪tracert
路由跟踪程序traceroute借助于ICMPTTL超时消息来巧妙地收集客户端与服务器之间的路右信息。
该程序可输出所有参与转发数据包的路由器的名称以及消息从主机到该路由器的往返传输时间。
网络管理员可借助该工具来对响应速度较慢的连接进行诊断,通过观察数据包从一个主机到另一个主机的传输路径有助于帮助管理员确定网络瓶颈的具体位置(也就是应答速度最慢的路由器)或不合理的传输路径。
现使用tracert命令对IP地址为的主机进行路由跟踪(本机).
Tracingrouteto219.247.255.20overamaximumof30hops
Tracecomplete.
现只列出前两跳的报文来加以分析。
①第一跳的请求和超时报文
②第二跳的请求和超时报文
由报文可以看出超时报文的ICMP头中Type=11Code=0,也就是说此ICMP报文是超时报文中的路由TTL超时。
而回应请求报文都是很类似的,只有报文生存时间TTL是从1开始递增的,这也就说明tracert命令是通过ICMP报文中的路由TTL超时来实现的,当路由器收到TTL为1的报文时就会把报文丢弃,并返回一个路由TTL超时报文。
只有最后目的主机收到后才返回一个回应应答报文,而经过的路由器全部都返回的是超时报文。
结论
ICMP在诊断网络故障和维护网络的正常运行都起着举足轻重的作用。
本文通过Ping命令和tracert命令的几种极具代表性的Sniffer报文来对ICMP的原理及部分功能进行了分析说明。
通过报文来解释,对ICMP报文可以有较直观的了解。
参考文献
[1]兰少华,杨余旺,吕建勇.TCP/IP网络与协议.清华大学出版社,2006年1月第1版:
95-107
参考网文
[1]ICMP
[2]ICMP攻击模拟及安全防范措施