下面說說網卡如何與UIP協議交互中的ICMP情況,首先必須知道什麼叫ICMP,在百科上的介紹是:
----------------------------------ICMP------------------------------------------------------
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
ICMP協議是一種面向無連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。
它是TCP/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。
ICMP 提供一致易懂的出錯報告信息。發送的出錯報文返回到發送原數據的設備,因爲只有發送設備纔是出錯報文的邏輯接受者。發送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由發送方完成。
我們在網絡中經常會使用到ICMP協議,比如我們經常使用的用於檢查網絡通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網絡命令如跟蹤路由的Tracert命令也是基於ICMP協議的。
-------------------------------------ICMP----------------------------------------------------
實現ICMP網絡控制報文協議時,只實現echo(迴響)服務。uIP在生成迴響報文時並不重新分配存儲器空間,而是直接修改echo請求報文來生成迴響報文。將ICMP類型字段從“echo”類型改變成 “echo reply”類型,重新計算校驗和修改校驗和字段。
主要的處理過程在uip_process()函數中,UIP同樣將收到的ICMP的數據包放到uip_buf中。
----------------------------------ICMP------------------------------------------------------
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但是對於用戶數據的傳遞起着重要的作用。
ICMP協議是一種面向無連接的協議,用於傳輸出錯報告控制信息。它是一個非常重要的協議,它對於網絡安全具有極其重要的意義。
它是TCP/IP協議族的一個子協議,屬於網絡層協議,主要用於在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態信息等。當遇到IP數據無法訪問目標、IP路由器無法按當前的傳輸速率轉發數據包等情況時,會自動發送ICMP消息。
ICMP 提供一致易懂的出錯報告信息。發送的出錯報文返回到發送原數據的設備,因爲只有發送設備纔是出錯報文的邏輯接受者。發送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由發送方完成。
我們在網絡中經常會使用到ICMP協議,比如我們經常使用的用於檢查網絡通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協議工作的過程。還有其他的網絡命令如跟蹤路由的Tracert命令也是基於ICMP協議的。
-------------------------------------ICMP----------------------------------------------------
實現ICMP網絡控制報文協議時,只實現echo(迴響)服務。uIP在生成迴響報文時並不重新分配存儲器空間,而是直接修改echo請求報文來生成迴響報文。將ICMP類型字段從“echo”類型改變成 “echo reply”類型,重新計算校驗和修改校驗和字段。
- #define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN])