《TCP/IP詳解 卷一》第8章 ICMPv4 和 ICMPv6

目錄

8.1 引言

8.1.1 在IPv4和IPv6中的封裝

8.2 ICMP 報文

8.2.1 ICMPv4 報文

8.2.2?ICMPv6 報文

8.2.3 處理ICMP報文

8.3?ICMP差錯報文

8.3.1 擴展的ICMP和多部報文

8.3.2 目的不可達和數據包太大

8.3.3 重定向

8.3.4 ICMP 超時

8.3.5 參數問題

8.4 ICMP查詢/信息類報文

8.4.1 回顯請求 / 應答

8.4.2 路由器發現:路由器請求RS和通告RA

8.4.3 本地代理地址發現請求/應答

8.4.4 移動前綴請求/通告

8.4.5 移動IPv6快速切換報文

8.4.6 組播偵聽查詢/報告/完成

8.4.7 版本2組播偵聽發現

8.4.8 組播路由器發現

8.5 IPv6中的鄰居發現

8.5.1 ICMPv6路由器請求和通告

8.5.2 ICMPv6鄰居請求和通告

8.5.3 ICMPv6反向鄰居發現請求/通告

8.5.4鄰居不可達檢測

8.5.5安全鄰居發現

8.5.6 ICMPv6鄰居發現選項

8.6 ICMPv4 和 ICMPv6 轉換

8.7 與ICMP相關的攻擊

8.8 總結


8.1 引言

ICMP位于網絡層和傳輸層之間。

因為路由器緩沖區溢出的丟包不會觸發任何ICMP差錯報文。而由TCP等處理(重傳等)。

黑客在大量攻擊中使用ICMP。由于擔心攻擊,通常防火墻封阻ICMP報文,特別是邊界路由器。此時診斷程序(ping, traceroute)無法正常工作。

ICMPv6包含:

????????錯誤報告。

????????鄰居請求,鄰居通告。

????????路由器請求,路由器通告。

????????重定向:優化路由。

????????報文過濾: 引入Packet Too Big報文,通知源主機包超過了鏈路層MTU。

8.1.1 在IPv4和IPv6中的封裝

報文格式:

其中ICMPv4頭:

字段介紹:

????????類型:指定報文類型,常用8個值。

????????代碼:進一步指定報文類型。

????????校驗和:IP層沒有對載荷完整性保護。所以ICMP需包含校驗和。

8.2 ICMP 報文

ICMP報文分類:

????????差錯報文:用于通知發送端數據包傳輸中的錯誤情況。

????????查詢/信息類報文:用于信息采集和配置。

8.2.1 ICMPv4 報文

差錯報文:

????????目的不可達(類型3),重定向(類型5),超時(類型11 ),參數問題(類型12)

查詢/信息類報文:

????????回顯請求(類型8),回顯應答(類型0),路由器通告(類型9),路由器請求(類型10)

其中重定向報文目的:指導主機或路由器改變路由決策,將數據發送到更優路徑上。

8.2.2?ICMPv6 報文

ICMPv6不僅包含差錯和查詢/信息類報文,還有大量IPv6路由器和主機的配置,如RS,RA,NS,NA。

ICMPv6類型字段值:

????????從0到127是差錯類報文,從128到255是信息類報文。

ICMPv6也使用代碼字段。

ICMPv6還支持大量標準選項,而ICMPv4不支持選項。

8.2.3 處理ICMP報文

收到重定向報文:會更新路由表。

目的不可達報文:可用于路徑MTU發現(PMTUD)

ICMPv6報文處理規則:

????????1. 收到未知ICMPv6差錯報文,須傳遞給上層產生差錯報文的進程。

????????2. 收到未知ICMPv6信息類報文,丟棄。

????????3. 發送ICMPv6差錯報文時,應盡可能多地包含導致差錯的原始IPv6報文,但不超過最小的IPv6 MTU ( 1280字節)

????????4. IPv6節點須限制發送ICMPv6差錯報文速率。

IPv6網絡中鏈路層最小MTU是1280字節。IPv4中是576字節。

8.3?ICMP差錯報文

請注意8.3.1到8.3.5章節都屬于ICMP差錯報文。

不會用ICMP差錯報文響應以下報文:

????????另一個ICMP差錯報文。

????????頭部損壞的數據報(例如校驗和錯誤)。

????????IP層廣播或組播數據。

????????鏈路層廣播或組播幀數據。

????????無效地址(零地址、環回地址、廣播地址,組播地址)

????????第一個之外的分片。

發送ICMP差錯報文:應包含導致錯誤數據報的IP頭副本,包括IP選項和原始IP載荷,生成的ICMP數據報大小不超過網絡最小MTU。

差錯報文包含原始IP包載荷作用:

????????使接收ICMP差錯報文主機能根據IP頭中協議或下一個頭部將該差錯報文傳遞到對應傳輸層和應用進程。

8.3.1 擴展的ICMP和多部報文

擴展的ICMP差錯報文: 使ICMP差錯報文包含額外信息以提供更多診斷信息。

用ICMP中代碼字段指明具體原因,實現擴展功能。

后續章節詳解。

8.3.2 目的不可達和數據包太大

ICMPv4目的不可達差錯報文:

????????網絡不可達:code 0,無路由信息。

????????主機不可達:Code 1,如目標主機關機等。

????????協議不可達:Code 2,目標主機無法處理數據包傳輸層協議。

????????端口不可達:Code 3,該端口未打開或沒有對應端口的應用程序。

????????需要進行分片,但設置了DF位:Code 4

????????源站選路失敗:Code 5,IP包中包含源站路由選項,但無法按照指定路由轉發數據包。

ICMPv6目的不可達差錯報文:

????????無路由:code 0,無路由信息。

????????目的地被管理員禁止通信:code 1

????????源地址的范圍之外:code 2,如訪問公網時,源IP地址是本地鏈路地址,不屬于全局地址。

????????地址不可達:code 3,目標主機未響應或不可達

????????端口不可達:code 4

????????源地址失敗進/出策略:code 5,如因為接口ACL導致數據報無法傳遞。

數據包太大差錯報文

????????即PTB(Packet Too Big)

????????路由器轉發的數據大于出接口MTU,但數據IP頭設置了不分片位,則丟棄該數據,并回復PTB差錯報文。

????????PTB報文中會包含路由器自身 MTU值,以告知源地址減小數據包。

????????因此該報文可用于PMTU發現,PMTU是路徑中MTU最小值。

net.ipv4.icmp_ratemask = 6168(哪些ICMP報文有速率限制,對應code字段)

應用程序使用如下代碼接口ICMP報文:

????????sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);

????????應用層收到ICMP差錯報文后,可進行對應操作。

8.3.3 重定向

使用不多。

主機根據ICMP重定向報文信息來更新轉發表

8.3.4 ICMP 超時

IPv4頭部中TTL字段:表示丟棄前最多可經過的路由器跳數。

IPv6頭部中同樣有跳數限制(Hop Limit)字段表示。

超時報文差錯報文:

????????TTL超時:Code 0,指示數據報TTL值已減至零。

????????分片重組超時:Code 1,指示數據報片段重組未能在一定時間內完成。

traceroute原理:

????????主機先發送IPv4 TTL=1數據,到達第一個路由器,此時TTL到期,路由器回復ICMPv4超時報文。主機下一次數據包TTL加1。導致在更遠一跳路由器超時,并回復ICMP超時報文,重復該過程。

ICMP響應報文中包含響應路由器自身IP,由此得到沿途所有路由器IP。

8.3.5 參數問題

場景:IP頭部存在不可修復錯誤。

????????該報文是"包羅萬象”的錯誤指示器。無法指明具體原因,但會指出錯誤相對IP頭部的偏移值。

ICMPv6中細分為三種:

????????錯誤頭部字段。

????????無法識別下一個頭部。

????????無法識別IPv6選項。

8.4 ICMP查詢/信息類報文

注意:8.3 講解的全是ICMP差錯報文。

廣泛使用的ICMP查詢/信息類報文:回顯請求,回顯應答(ping使用)

8.4.1 回顯請求 / 應答

即ping使用的ICMP報文類型。

回顯請求報文大小任意(但受限于IP數據報大小),回顯應答時需要將收到數據返回給發送者,即使需要IP分片。

字段介紹:

????????標識符:UNIX用發送進程PID表示。方便識別同一主機多個ping程序。

????????序列號:從0開始,每個回顯請求加1。方便查看丟包、重復問題。

????????可選數據:如ping在回顯請求和應答包含本地時,方便計算RTT。

????????之前提過NAT處理ICMP時,會結合標識符和序列號進行NAT轉換,因為ICMP報文沒有端口號信息。

ping -b 10.0.0.254

ping廣播地址作用:

????????子網所有主機收到該ping包后,都需要響應,所以都需要知道ping主機的MAC,于是都向ping主機發ARP請求,最終快速廣播ping主機ARP。

Linux默認允許回復CMP應答報文給廣播地址的ICMP請求。

8.4.2 路由器發現:路由器請求RS和通告RA

路由器發現:RD(Router Discovery)

RD:IPv4使用少。主要用于IPv6,是IPv6 SLAAC功能一部分。

IPv6 RD包括:

????????路由器請求RS(Router Solicitation)報文

????????路由器通告RA(Router Advertisement)報文

ICMP type 133,表示路由器請求RS。請求網絡配置,如DNS,IPv6網絡前綴。

ICMP type 134,表示路由器通告RA。要么用于回復RS,要么周期多播發送。

使用場景:

????????無狀態地址配置:RA中包含網絡前綴信息。

8.4.3 本地代理地址發現請求/應答

允許移動網絡IPv6節點在移動時保持其IPv6地址不變,并且可以在外部網絡上通過本地代理進行通信。

8.4.4 移動前綴請求/通告

當節點的本地地址將無效時,請求更新路由前綴。

8.4.5 移動IPv6快速切換報文

改善IP層切換延遲

8.4.6 組播偵聽查詢/報告/完成

允許節點查詢或報告本地鏈路上的組播組成員信息,并執行組播組成員的管理。

8.4.7 版本2組播偵聽發現

8.4.8 組播路由器發現

通過ICMPv6組播路由器發現報文,主機確定哪些路由器支持 IPv6 組播,從而決定是否啟用 IPv6 組播功能。

8.5 IPv6中的鄰居發現

鄰居發現:(Neighbor Discovery,ND),類似IPv4的ARP。

IPv6中沒有廣播地址。

ND用于在同一個鏈路或者網段的節點找到彼此,確定一個鄰居是否變得可用。

ND使用ICMPv6報文。

ND包含:

????????鄰居請求NS(Neighbor Solicitation),ICMP type為135。

????????鄰居通告NA(Neighbor Advertisement),ICMP type為136。

功能:地址解析,鄰居發現,地址自動配置。

8.5.1 ICMPv6路由器請求和通告

路由器通告(RA)報文:

????????通告網絡前綴,MTU,DNS,NTP服務器等配置。

????????通常會定期發送,或者用于響應路由器請求(RS)報文。

RS報文目的IP:ff02::2(所有路由器組播地址)

RA報文目的IP:ff02::1(所有節點的組播地址)或者單播RS主機

結合無狀態DHCPv6 SLAAC使用。

8.5.2 ICMPv6鄰居請求和通告

ICMPv6中的鄰居請求(NS)報文:取代IPv4 ARP

目的:

????????IPv6中ARP功能,獲取IPv6地址對應MAC。

????????檢測附近節點是否可達。

8.5.3 ICMPv6反向鄰居發現請求/通告

在幀中繼網絡中確定給定的MAC地址對應IPv6地址

8.5.4鄰居不可達檢測

(Neighbor Unreachability Detection, NUD)

定期檢測鄰居節點的存活狀態

如果檢測到鄰居不可達,更新鄰居表和路由表,切換到備用網絡。

8.5.5安全鄰居發現

安全鄰居發現(Secure Neighbor Discovery,SEND)

安全性增強的鄰居發現協議。

作用:

????????鄰居發現,且解決傳統IPv6鄰居發現過程安全漏洞。

8.5.6 ICMPv6鄰居發現選項

使用一些可選的選項(Options)來提供額外信息或配置。

源/目標鏈路層地址選項

前綴信息選項PIO

重定向頭部選項

MTU 選項

通告間隔選項

源和目標地址列表選項

時間戳選項

隨機數選項

證書選項

IP地址/前綴選項

鏈路層地址選項

鄰居通告確認選項

路由信息選項

遞歸DNS服務器選項

切換密鑰請求選項

切換密鑰應答選項

8.6 ICMPv4 和 ICMPv6 轉換

8.7 與ICMP相關的攻擊

分為3類:

泛洪(flood):DoS

炸彈(bomb):發送特殊構造報文,導致IP或者ICMP的處理崩潰。

信息泄露(information disclosure)

8.8 總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714254.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714254.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714254.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

劃分開始結束位置設置標記

劃分開始結束位置 初始音軌如下圖所示 在想開始地方單擊左鍵,長按直到你想要的結束位置松開。就可以劃分開始和結束位置 設置標記 方式1 :直接點擊該圖標 方式二:使用快捷鍵M 設置標記點可以自定義名稱方便檢索標記點

javaWebssh酒店客房管理系統myeclipse開發mysql數據庫MVC模式java編程計算機網頁設計

一、源碼特點 java ssh酒店客房管理系統是一套完善的web設計系統(系統采用ssh框架進行設計開發),對理解JSP java編程開發語言有幫助,系統具有完整的源代碼和數據庫,系統主要采用B/S模式開發。開發環境為TOMCAT7.0…

STL容器之string類

文章目錄 STL容器之string類1、 什么是STL2、STL的六大組件3、string類3.1、string類介紹3.2、string類的常用接口說明3.2.1、string類對象的常見構造3.2.2、string類對象的容量操作3.2.3、string類對象的訪問及遍歷操作3.2.4、 string類對象的修改操作3.2.5、 string類非成員函…

車輛維護和燃油里程跟蹤器LubeLogger

什么是 LubeLogger ? LubeLogger 是一個自托管、開源、基于網絡的車輛維護和燃油里程跟蹤器。 LubeLogger 比較適合用來跟蹤管理您的汽車的維修、保養、加油的歷史記錄,比用 Excel 強多了 官方提供了在線試用,可以使用用戶名 test 和密碼 123…

oracle-long類型轉clob類型及clob類型字段的導出導入

1、若oracle數據庫表字段類型有long類型,有時候我們需要模糊匹配long類型字段時,是查詢不出來結果的,此時使用TO_LOB,將long類型轉成clob類型,就可以模糊匹配信息。 例如:oracle數據庫查詢所有視圖內容中包…

機器學習-4

文章目錄 前言數組創建切片索引索引遍歷切片編程練習 總結 前言 本篇將介紹數據處理 Numpy 庫的一些基本使用技巧,主要內容包括 Numpy 數組的創建、切片與索引、基本運算、堆疊等等。 數組創建 在 Python 中創建數組有許多的方法,這里我們使用 Numpy 中…

機器學習-5

文章目錄 前言Numpy庫四則運算編程練習 前言 本片將介紹Numpy庫中的四則運算。 Numpy庫四則運算 Numpy庫可以直接進行一些四則運算,快速的處理兩個Numpy數組: a np.array([[1,2,3],[4,5,6]]) b np.array([[4,5,6],[1,2,3]])向量與向量之間 1.加法 …

14.最長公共前綴

題目:編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴,返回空字符串""。 解題思路:橫向掃描,依次遍歷每個字符串,更新最長公共前綴。另一種方法是縱向掃描。縱向掃描時,從前…

基于tomcat的JavaWeb實現

Tomcat服務器 免費,性能一般的服務器 安裝配置 基于Java,故需要配置環境變量,新加系統路徑JAVA_HOME,路徑為jdk的主目錄。 而后打開bin目錄下的startup.bat文件出現如下窗口說明配置成功 idea繼承tomcat服務器 使用java開發…

Linux 之壓縮與解壓相關命令的基礎用法

目錄 1、zip 與 unzip 2、gzip 命令 3、tar 命令 1、zip 與 unzip 在桌面新建一個文件和文件夾用于測試 在 test 目錄下有一個 1.txt 文件 我們使用 zip 命令對其壓縮 用法: zip 自定義壓縮包名 被壓縮文件路徑位置 zip myon.zip 1.txt 因為我們這里就是在 …

linux_day04

大綱:命令,vim,gcc,編譯工具,生成代碼,調試,庫makefile,系統編程 文件系統:文件屬性,文件內容,萬物皆文件(不在內存中的是文件&#…

ProtoBuf 是什么?

1. 序列化概念 序列化和反序列化 序列化:把對象轉換為字節序列的過程稱為對象的序列化。 反序列化:把字節序列恢復為對象的過程稱為對象的反序列化。 什么情況下需要序列化 存儲數據:當你想把的內存中的對象狀態保存到?個?件中或者存到數…

怎么壓縮成mp4視頻?

在數字化時代,視頻已經成為我們日常生活中不可或缺的一部分。然而,有時候我們可能會遇到視頻文件太大的問題,不便于傳輸、存儲或分享。那么,如何將視頻壓縮成MP4格式,以減小文件大小呢?本文將為您介紹幾種簡…

docker學習第一步:基于Linux安裝docker!

要求Linux下的CentOS 7.0 以上的版本 01、安裝docker版本倉庫 1、設置倉庫 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2、穩定倉庫 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 現在我也找了很…

醫學大數據|文獻閱讀|有關“胃癌+機器學習”的研究記錄

目錄 1.基于32基因特征構建的機器學習模型可有效預測胃癌患者的預后和治療反應 2.胃癌患者術后90天死亡率的機器學習風險預測模型 3.使用機器學習模型預測幽門螺桿菌根除患者胃癌患病風險 4.利用初始內窺鏡檢查和組織學結果進行個性化胃癌發病率預測 1.基于32基因特征構建的…

隨想錄算法訓練營第四十八天|121. 買賣股票的最佳時機、122.買賣股票的最佳時機II

121. 買賣股票的最佳時機 public class Solution {public int MaxProfit(int[] prices) {int result0;int lowint.MaxValue;for(int i0;i<prices.Length;i){if(prices[i]<low){lowprices[i];}else{resultMath.Max(result,prices[i]-low);}}return result;} } 先遍歷找到…

機器學習_10、集成學習-AdaBoost

AdaBoost AdaBoost&#xff08;Adaptive Boosting的簡稱&#xff09;是一種集成學習方法&#xff0c;它的核心思想在于將多個弱學習器組合起來&#xff0c;形成一個強學習器。通過這種方式&#xff0c;AdaBoost能夠顯著提高分類性能。下面詳細介紹AdaBoost的主要概念和工作原理…

查看網絡連接的netstat

netstat是一個監控TCP/IP網絡的非常有用的工具&#xff0c;可以顯示路由表、實際的網絡連接&#xff0c;以及每一個網絡接口設備的狀態信息&#xff0c;可以讓用戶得知目前都有哪些網絡連接正在運作。netstat用戶顯示與IP、TCP、UDP和ICMP協議相關的統計數據&#xff0c;一般用…

【Vue3】PostCss 適配

px 固定的單位&#xff0c;不會進行自適應。rem r root font-size16px 1rem16px&#xff0c;但是需要手動進行單位的換算vw vh 相對于視口的尺寸&#xff0c;不同于百分比&#xff08;相對于父元素的尺寸&#xff09;375屏幕 1vw 3.75px 利用插件進行 px&#xff08;設計稿&…

算法復習之二分【備戰藍橋杯】

二分模板一共有兩個&#xff0c;分別適用于不同情況。 算法思路&#xff1a;假設目標值在閉區間[l, r]中&#xff0c; 每次將區間長度縮小一半&#xff0c;當l r時&#xff0c;我們就找到了目標值。 版本一 當我們將區間[l, r]劃分成[l, mid]和[mid 1, r]時&#xff0c;其更…