ICMP協議的工作原理
ICMP協議的功能非常重要,在網絡協議的學習中,這部分知識也是我們講解的重點。那么對于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;
- }