12 ICMP查詢報告報文

2021-08-19 06:00:12 字數 2039 閱讀 2174

icmp查詢報告報文分為2大類:乙個是request請求報文,乙個是reply應答報文,型別為8就代表是請求,型別為0就代表是應答。

icmp查詢報告報文:

型別為8代表請求報文

型別為0代表應答報文

**為0:無論是請求報文還是應答報文,**都是為0

前面已經多次介紹過校驗和,識別符號,序列號,這裡不再說明。

資料部分:由請求報文傳送指定資料,然後應答報文把指定資料在重**回來。

現在我們通過使用ping命令來抓乙個icmp包來具體說明一下,如下圖所示:

圖1我們可以看到圖2中的icmp資料報中的type的值是8,括號中的ping表示是通過ping命令產生的icmp資料報,後面request就代表請求資料報,通過這些資訊基本可以確定這是乙個icmp請求資料報。

圖2我們可以看到圖3中的icmp資料報中的type的值是0,括號中的ping表示是通過ping命令產生的icmp資料報,後面reply就代表應答資料報,通過這些資訊基本可以確定這是乙個icmp應答資料報。

圖3

圖4原始時間戳:源主機給目的主機傳送乙個資料報的時間點就是原始時間戳。

接收時間戳:目的主機接收到源主機傳送的資料報的時間點就是接收時間戳。

傳送時間戳:目的主機給源主機發回應答報文的時間點就是傳送時間戳

傳送時間=接收時間戳的值 - 原始時間戳的值

接收時間=分組返回的時間 - 傳送時間戳的值

往返時間=傳送時間 + 接收時間

這裡只解釋傳送時間和接收時間,往返時間自然就明白了,傳送時間就是源主機傳送資料報目的主機花費的時間,接收時間就是目的主機傳送應答報文給源主機所用的時間。

如果主機a知道找誰請求子網掩碼的話,那麼主機a在傳送位址掩碼請求會以單播的形式找指定主機請求子網掩碼位址

如果主機a不知道找誰請求子網掩碼的話,會以廣播的形式請求同一網段下的主機,能提供掩碼的主機會傳送乙個位址掩碼回答報文告訴主機a掩碼位址。

圖5另外,在傳送位址掩碼請求報文的時候,位址掩碼是以0來填充的,在傳送位址掩碼應答報文時,這時位址掩碼已經確定,所以會以正確的值來填充,並把這個位址掩碼發回給源主機。

比如主機a給主機b傳送乙個資料報,主機a必須知道這個資料報在網路中的路線是怎麼走的,如果主機a不知道給主機b傳送的資料報在網路傳輸過程中走的路線(經過了哪些路由器),這時主機a會以廣播的形式或者以多播的形式傳送乙個icmp路由器詢問和通告報文,向網路中的路由裝置詢問資料報在網路中經過的路線,知道路線的路由器會發回乙個icmp路由器通告報文。

icmp路由詢問和通告報文格式:

圖6icmp路由詢問和通告報文:

型別為9表示這是乙個icmp路由詢問和通告報文,

**為0

生存期:路由發回給源主機的路由資訊的有效時間,一旦過了有效時間路由資訊就會失效。

一般來說,即便源主機不主動詢問路由資訊,網路中的路由器都會自動發回路由通告報文。路由器發回icmp路由器通告報文中的路由資訊帶著路由器ip位址和位址優先順序,且位址優先順序預設是0。

比如:路由器a發回的路由路線資訊的優先順序是0,路由器b發回的路由路線資訊的優先順序是2,那麼源主機傳送資料時有很大的可能就會走路由b發回的路由路線,因為路由器b的優先順序更高。

實驗12 ICMP 協議程式設計

實驗7 icmp 協議程式設計 實驗要求 1 根據icmp 協議,編寫乙個類似 ping 的程式,具體的要求是 程式發出乙個 icmp 包到 目的 ip,然後等待接收回應的包 echo 2 根據 icmp 協議,向乙個固定的 ip 發出一系列的 ttl 逐次增大的 icmp 的包,這些包的 ttl ...

ICMP型別查詢表

型別 取值 描述查詢錯誤0 0echo reply 回顯應答 ping應答 x3 0network unreachable 網路不可達x3 1host unreachable 主機不可達x3 2protocol unreachable 協議不可達x3 3port unreachable 埠不可達x3...

解決Python字典查詢報Keyerror的問題

python的字典一般都直接查詢key 比如 dict print dict a 比如你要檢視print dict d 由於這個時候dict裡面並沒有這個key 所以就會直接報錯,那麼這個時候其實python給我們提供了一種很棒的解決方法,那就是用 setdefault,用法如下 dict.setd...