对于ICMP协议的理解是有效地掌握IP层的协议的基础。那么我们知道,ICMP协议自身并不具备传输数据的作用,它只是起到一个监管的作用。具体是如何完成的呢?我们就来详细介绍一下这方面的效验问题。首先我们要明确一下ICMP的定义。
ICMP定义
英文原义:InternetControlMessageProtocol
中文释义:(RFC-792)Internet控制消息协议
ICMP是“InternetControlMessageProtocol"(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping"的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
ICMP协议内容
ICMP的全称是InternetControlMessageProtocol。从技术教度来说,ICMP就是一个“错误侦测与回报机制",其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:
◆侦测远端主机是否存在。
◆建立及维护路由资料。
◆重导资料传送路径。
◆资料流量控制。
ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code)让机器来识别不同的连线状况。常用的类别如下表所列﹕
ICMP是个非常有用的协定﹐尤其是当我们要对网路连接状况进行判断的时候。下面让我们看看常用的ICMP实例,以更好了解ICMP的功能与作用。
ICMP协议的重要性
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏"50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!
比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“PingofDeath"(死亡之Ping)攻击。“PingofDeath"攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。
此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴",使得目标主机耗费大量的CPU资源处理,疲于奔命。
ICMP协议的校验和算法
- unsignedshortchksum(addr,len)
- unsignedshort*addr;/*校验数据开始地址(注意是以2字节为单位)*/
- intlen;/*校验数据的长度大小,以字节为单位*/
- {
- intsum=0;/*校验和*/
- intnleft=len;/*未累加的数据长度*/
- unsignedshort*p;/*走动的临时指针,2字节为单位*/
- unsignedshorttmp=0;/*奇数字节长度时用到*/
- while(nleft>1)
- {
- sum+=*p++;/*累加*/
- nleft-=2;
- }
- if(nleft==1)/*奇数字节长度*/
- {
- *(unsignedchar*)&tmp=*(&(unsignedchar*)p);/*将最后字节压如2字节的高位*/
- sum+=tmp;
- }
- sum+=(sum>>16)+(sum&0xffff);/*高位低位相加*/
- sum+=sum>>16;/*上一步溢出时,将溢出位也加到sum中*/
- tmp=~sum;/*注意类型转换,现在的校验和为16位*/
- returntmp;
- }