• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ICMP端口不可達差錯

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    ICMP查詢報文—地址掩碼和時間戳查詢及應答?,F在來分析一種ICMP差錯報文,即端口不可達報文,它是ICMP目的不可到達報文中的一種,以此來看一看ICMP差錯報文中所附加的信息。使用UDP來查看它。 UDP的規則之一是,如果收到一份UDP數據報而目的端口與某個正在

    ICMP查詢報文—地址掩碼和時間戳查詢及應答?,F在來分析一種ICMP差錯報文,即端口不可達報文,它是ICMP目的不可到達報文中的一種,以此來看一看ICMP差錯報文中所附加的信息。使用UDP來查看它。
    UDP的規則之一是,如果收到一份UDP數據報而目的端口與某個正在使用的進程不相符,那么UDP返回一個ICMP不可達報文??梢杂肨FTP來強制生成一個端口不可達報文。
    對于TFTP服務器來說,UDP的公共端口號是69。但是大多數的TFTP客戶程序允許用connect命令來指定一個不同的端口號。這里,我們就用它來指定08端口:

    c o n n e c t命令首先指定要連接的主機名及其端口號,接著用g e t命令來取文件。敲入g e t 命令后,一份U D P數據報就發送到主機s v r 4上的8 8 8 8端口。t c p d u m p命令引起的報文交換結果如圖6 - 8所示。

    圖6-8 由TFTP產生的ICMP端口不可達差錯
    在U D P數據報送到s v r 4之前,要先發送一份A R P請求來確定它的硬件地址(第1行)。接著返回A R P應答(第2行),然后才發送U D P數據報(第3行)(在t c p d u m p的輸出中保留A R P請求和應答是為了提醒我們,這些報文交換可能在第一個I P數據報從一個主機發送到另一個主機之前是必需的。在本書以后的章節中,如果這些報文與討論的題目不相關,那么我們將省略它們)。
    一個I C M P端口不可達差錯是立刻返回的(第4行)。但是,T F T P客戶程序看上去似乎忽略了這個I C M P報文,而在5秒鐘之后又發送了另一份U D P數據報(第5行)。在客戶程序放棄之前重發了三次。
    注意,I C M P報文是在主機之間交換的,而不用目的端口號,而每個2 0字節的U D P數據報則是從一個特定端口(2 9 2 4)發送到另一個特定端口(8 8 8 8)。
    跟在每個U D P后面的數字2 0指的是U D P數據報中的數據長度。在這個例子中,2 0字節包括T F T P的2個字節的操作代碼,9個字節以空字符結束的文件名t e m p . f o o,以及9個字節以空字符結束的字符串n e t a s c i i。
    如果用- e選項運行同樣的例子,我們可以看到每個返回的I C M P端口不可達報文的完整長度。這里的長度為7 0字節,各字段分配如圖6 - 9所示。

    圖6-9 “UDP端口不可達”例子中返回的ICMP報文
    I C M P的一個規則是,I C M P差錯報文(參見圖6 - 3的最后一列)必須包括生成該差錯報文的數據報I P首部(包含任何選項),還必須至少包括跟在該I P首部后面的前8個字節。在我們的例子中,跟在I P首部后面的前8個字節包含U D P的首部。
    一個重要的事實是包含在U D P首部中的內容是源端口號和目的端口號。就是由于目的端口號(8 8 8 8)才導致產生了I C M P端口不可達的差錯報文。接收I C M P的系統可以根據源端口號(2 9 2 4)來把差錯報文與某個特定的用戶進程相關聯(在本例中是T F T P客戶程序)。
    導致差錯的數據報中的I P 首部要被送回的原因是因為I P首部中包含了協議字段,使得I C M P可以知道如何解釋后面的8個字節(在本例中是U D P首部)。如果我們來查看T C P首部,可以發現源端口和目的端口被包含在T C P首部的前8個字節中。I C M P不可達報文的一般格式如圖6 - 1 0所示。

    圖6-10 ICMP不可達報文
    在圖6 - 3中,我們注意到有1 6種不同類型的I C M P不可達報文,代碼分別從0到1 5。I C M P端口不可達差錯代碼是3。另外,盡管圖6 - 1 0指出了在I C M P報文中的第二個32 bit字必須為0,但是當代碼為4時(“需要分片但設置了不分片比特”),路徑M T U發現機制卻允許路由器把外出接口的MTU填在這個32 bit字的低16 bit中。我們在11.6節中給出了一個這種差錯的例子。盡管I C M P規則允許系統返回多于8個字節的產生差錯的I P數據報中的數據,但是大多數從伯克利派生出來的系統只返回8個字節。Solaris 2.2 的i p _ i c m p _ r e t u r n _ d a t a _ b y t e s選項默認條件下返回前6 4個字節。
    我們還要以時間系列的格式給出t c p d u m p命令的輸出,如圖6 - 11 所示。

    圖6-11 發送到無效端口的TFTP請求的時間系列
    時間隨著向下而遞增,在圖左邊的時間標記與t c p d u m p命令的輸出是相同的(見圖6 - 8)。位于圖頂部的標記是通信雙方的主機名和端口號。需要指出的是,隨著頁面向下的y坐標軸與真正的時間值不是成比例的。當出現一個有意義的時間段時,在本例中是每5秒之間的重發,我們就在時間系列的兩側作上標記。當U D P或T C P數據正在被傳送時,我們用粗線的行來表示。
    當I C M P報文返回時,為什么T F T P客戶程序還要繼續重發請求呢?這是由于網絡編程中的一個因素,即B S D系統不把從插口( s o c k e t )接收到的I C M P報文中的U D P數據通知用戶進程,除非該進程已經發送了一個c o n n e c t命令給該插口。標準的BSD TFTP 客戶程序并不發送c o n n e c t命令,因此它永遠也不會收到I C M P差錯報文的通知。
    這里需要注意的另一點是T F T P客戶程序所采用的不太好的超時重傳算法。它只是假定5 秒是足夠的,因此每隔5秒就重傳一次,總共需要2 5秒鐘的時間。在后面我們將看到T C P有一個較好的超時重發算法。
    T F T P客戶程序所采用的超時重傳算法已被R F C所禁用。不過,在作者所在子網上的三個系統以及Solaris 2.2仍然在使用它。AIX 3.2.2采用一種指數退避方法來設置超時值,分別在0、5、1 5和3 5秒時重發報文,這正是所推薦的方法。
    最后需要指出的是,I C M P報文是在發送U D P數據報3.5 ms后返回的,這與第7章我們所看到的P i n g應答的往返時間差不多。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>