1. 程式人生 > >ICMP(網路控制資訊協議 internet control message protocol)

ICMP(網路控制資訊協議 internet control message protocol)

1.IMCP協議介紹

前面講到了,IP協議並不是一個可靠的協議,它不保證資料被送達,那麼,自然的,保證資料送達的工作應該由其他的模組來完成。其中一個重要的模組就是ICMP(網路控制報文)協議。

當傳送IP資料包發生錯誤--比如主機不可達,路由不可達等等,ICMP協議將會把錯誤資訊封包,然後傳送回給主機。給主機一個處理錯誤的機會,這 也就是為什麼說建立在IP層以上的協議是可能做到安全的原因。ICMP資料包由8bit的錯誤型別和8bit的程式碼和16bit的校驗和組成。而前 16bit就組成了ICMP所要傳遞的資訊。

儘管在大多數情況下,錯誤的包傳送應該給出ICMP報文,但是在特殊情況下,是不產生ICMP錯誤報文的。如下

ICMP差錯報文不會產生ICMP差錯報文(出IMCP查詢報文)(防止IMCP的無限產生和傳送)
目的地址是廣播地址或多播地址的IP資料報。
作為鏈路層廣播的資料報。
不是IP分片的第一片。
源地址不是單個主機的資料報。這就是說,源地址不能為零地址、環回地址、廣播地 址或多播地址。
雖然裡面的一些規定現在還不是很明白,但是所有的這一切規定,都是為了防止產生ICMP報文的無限傳播而定義的。

ICMP協議大致分為兩類,一種是查詢報文,一種是差錯報文。其中查詢報文有以下幾種用途:

ping查詢
子網掩碼查詢(用於無盤工作站在初始化自身的時候初始化子網掩碼)
時間戳查詢(可以用來同步時間)
而差錯報文則產生在資料傳送發生錯誤的時候。就不贅述了。

2.ICMP的應用–ping

ping可以說是ICMP的最著名的應用,當我們某一個網站上不去的時候。通常會ping一下這個網站。ping會回顯出一些有用的資訊。一般的資訊如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255
Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Ping statistics for 10.4.24.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping這個單詞源自聲納定位,而這個程式的作用也確實如此,它利用ICMP協議包來偵測另一個主機是否可達。原理是用型別碼為0的ICMP發請 求,受到請求的主機則用型別碼為8的ICMP迴應。ping程式來計算間隔時間,並計算有多少個包被送達。使用者就可以判斷網路大致的情況。我們可以看到, ping給出來了傳送的時間和TTL的資料。我給的例子不太好,因為走的路由少,有興趣地可以ping一下國外的網站比如sf.net,就可以觀察到一些 丟包的現象,而程式執行的時間也會更加的長。
ping還給我們一個看主機到目的主機的路由的機會。這是因為,ICMP的ping請求資料報在每經過一個路由器的時候,路由器都會把自己的ip放到該數 據報中。而目的主機則會把這個ip列表複製到迴應icmp資料包中發回給主機。但是,無論如何,ip頭所能紀錄的路由列表是非常的有限。如果要觀察路由, 我們還是需要使用更好的工具,就是要講到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的應用–Traceroute

Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,儘管ping工具也可以進行偵測,但是,因為ip頭的限制,ping不能完全的記錄下所經過的路由器。所以Traceroute正好就填補了這個缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主機的IP後,首先給目的主機發送一個TTL=1(還記得TTL是什麼嗎?)的UDP(後面就 知道UDP是什麼了)資料包,而經過的第一個路由器收到這個資料包以後,就自動把TTL減1,而TTL變為0以後,路由器就把這個包給拋棄了,並同時產生 一個主機不可達的ICMP資料報給主機。主機收到這個資料報以後再發一個TTL=2的UDP資料報給目的主機,然後刺激第二個路由器給主機發ICMP資料 報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。從而避開了ip頭只能記錄有限路由IP的問題。

有人要問,我怎麼知道UDP到沒到達目的主機呢?這就涉及一個技巧的問題,TCP和UDP協議有一個埠號定義,而普通的網路程式只監控少數的幾個號碼較 小的埠,比如說80,比如說23,等等。而traceroute傳送的是埠號>30000(真變態)的UDP報,所以到達目的主機的時候,目的 主機只能傳送一個埠不可達的ICMP資料報給主機。主機接到這個報告以後就知道,主機到了。

相關推薦

ICMP(網路控制資訊協議 internet control message protocol)

1.IMCP協議介紹 前面講到了,IP協議並不是一個可靠的協議,它不保證資料被送達,那麼,自然的,保證資料送達的工作應該由其他的模組來完成。其中一個重要的模組就是ICMP(網路控制報文)協議。 當傳送IP資料包發生錯誤--比如主機不可達,路由不可達等等,ICMP協議將會把錯

ICMP網路控制資訊協議

ICMP(控制資訊協議) Internet Control Message Protocol經常被認為是IP層的一個組成部分。用於在IP主機,路由器之間傳遞控制訊息。 控制訊息是指網路通不通,主機是否可達,路由是否可用等網路本身的訊息。 目的:檢測網路的連線情況。 ICMP報文通常被I P層或更高

ICMP網路控制資訊協議(二)

ICMP重定向 •R1傳送一個重定向報文給主機172.16.1.1用R2作為閘道器去到達10.1.1.1 •何時傳送重定向報文: 1.資訊包進入路由器的介面是資訊包被髮送的同一個介面。 2.IP源地址的子網或網路是路由資訊包的下一跳IP地址的相同子網或網路。 3.資料包不來源路由。

RFC792- Internet控制資訊協議ICMP)中文版

【介紹】  在被稱為Catenet的系統中,IP協議被用作主機到主機的資料報服務。網路連線裝置稱為閘道器。這些閘道器通過閘道器到閘道器協議(GGP)相互交換用於控制的資訊。通常,閘道器或目的主機將和源主機通訊,例如,為報告在資料報過程中的錯誤。為了這個目的才使用了ICMP,它

Internet控制資訊協議(轉)

Internet控制資訊協議(ICMP) 1.介紹 在被稱為Catenet的系統中,IP協議被用作主機到主機的資料報服務。網路連線裝置稱為閘道器。這些閘道器通過閘道器到閘道器協議(GGP)相互交換用 於控制的資訊。通常,閘道器或目的主機將和源主機通訊,例如,為報告在資料報

ICMP網際控制報文協議分析

簡介        ICMP(Internet Control Message Protocol)網際控制報文協議。它是TCP/IP協議族的一個子協議,是一種面向無連線的協議,用於傳輸出錯報告控制資訊。用於在IP主機、路由器之間傳遞控制訊息。這些控制訊

ICMPInternet控制報文協議

con 報文 span 技術分享 取值 檢驗和 pro trace 17. ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個IP層子協議,用於在IP主機、路由器之間傳遞控制消息。控制消

TCP/IP詳解(四)---ICMPInternet控制報文協議

基本概念 ICMP(Internet Control Message Protocol,網路控制報文協議),屬於OSI七層模型中的網路層,與IP/UDP同屬一層,可以將其看成IP、UDP協議功能的一個補充,因為以前說過,IP協議是不可靠的,其可靠性需藉

TCP/IP詳解學習筆記(5)-- ICMPinternet 控制報文協議

1.概述      ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料

ICMP:Internet控制報文協議

ICPM:它傳遞差錯報文以及其他需要注意的資訊如果收到一份UDP資料報而目的埠與某個正在使用的程序不相符,那麼UDP返回一個ICMP不可達報文ICMP差錯報文必須包括生成該差錯報文的資料報IP首部,還必須至少包括跟在該IP首部後面的前8個位元組。當路由器收到一份IP資料報但又

Internet控制報文協議ICMP)之綜述

一、特點:  (1)ICMP本身是網路層的一個協議,但是它的報文不是直接傳送給資料鏈路層,而是要封裝成IP資料報,然後在傳送給資料鏈路層。  (2)從協議體系上看,ICMP的差錯和控制資訊傳輸只是要解決IP協議可能出現的不可靠問題,它不具有普遍意義上的傳輸機制,它也不是傳輸

【軟考】——網路資訊保安基礎知識(區域網、廣域網/協議

計算機網路的硬體裝置是承載計算機通訊的實體,但它們是怎樣有序地完成計算機之間通訊任務的呢???——》協議; 協議???——》規定通訊時的資料格式、資料傳送時序以及相應的控制資訊和應答訊號等內容;

TCP/IP詳解卷一之ICMPv4和ICMPv6:Internet 控制報文協議

1 處理ICMP報文 —一般來說,傳入的資訊類請求報文將被作業系統自動處理;而差錯類報文傳遞給使用者程序或傳輸層協議,如TCP。 —處理傳入的ICMPv6報文將應用以下規則: · 如果可能的話,未知的ICMPv6差錯報文必須傳遞給上層產生差錯報文的程序; · 未知的ICMPv6資訊類報文被丟

利用MQTT資訊協議控制piglow燈光

在先前的一篇文章"利用Snappy Ubuntu來控制piglow燈光"中,我們已經使用了webserver的方法來控制我們的piglow.在IoT世界裡,MQTT資訊協議也是用得非常多的一種協議.它是一個輕量級的通訊協議.它基於一種訂購(subscribe)及釋出(pub

通過python基於netconf協議獲取網路中網元的配置資料,助力企業網路控制自動化輕鬆實現!

摘要:在當今資訊化時代,大多數企業都需要網路支撐企業的ICT執行,提升企業執行效率,針對企業網路中的網元裝置(包括交換機,路由器,防火牆等),很多企業希望根據自身的業務特點定製網路管理,比如可以實現網路的執行狀態視覺化,網路配置自動化等,如下就以華為的NE40E網元為例,說明如何通過python基於netco

Azure ARM (16) 基於角色的訪問控制 (Role Based Access Control, RBAC) - 使用默認的Role

not 問控制 https 所有 嘗試 介紹 admin ima 服務管理   《Windows Azure Platform 系列文章目錄》   今天上午剛剛和客戶溝通過,趁熱打鐵寫一篇Blog。   熟悉Microsoft Azure平臺的讀者都知道,在

Azure ARM (17) 基於角色的訪問控制 (Role Based Access Control, RBAC) - 自定義Role

結果 del role environ db4 lis sele logs ini   《Windows Azure Platform 系列文章目錄》      在上面一篇博客中,筆者介紹了如何在RBAC裏面,設置默認的Role。   這裏筆者將介紹如何使用自定的Ro

計算機網路多層協議

為了能夠在面試的時候被面試官問道關於計算機網路的知識時,不至於啞口無言,我就默默的在這裡多計算機網路的基礎知識進行了一個大致的複習。陸續還會繼續更新。。。 常識: 網際網路地址:也就是IP地址,一般為網路號+子網號+主機號 Message報文:應用層資訊分組。 Segmen

網路資訊保安應急處置預案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

網路基礎筆記_網路傳輸層協議(TCP/UDP)知識點

  網路層負責把分組傳送到目的主機,但是真正通訊的並不是主機而是主機中的程序。傳輸層提供了程序間的邏輯通訊,傳輸層向高層使用者遮蔽了下面網路層的核心細節,使應用程式看起來像是在兩個傳輸層實體之間有一條端到端的邏輯通訊通道。 一.傳輸層中的兩種協議UDP / TCP