<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    結合Wireshark捕獲分組深入理解TCP/IP協議之IP協議

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    摘要:

        本文簡單介紹了網絡層理論知識,詳細講解了IP數據報各個字段,并從Wireshark俘獲分組中選取IP數據報進行分析,也闡述了分組和分片的區別。

     

    一、IPv4數據報

        網絡層是處理端到端數據傳輸的最低層。網絡層關注如何將分組從源端沿著網絡路徑送達目的端,期間可能需要經過許多跳中間路由器。即提供轉發(數據從路由器那個接口出去)、選路(發送方與接收方間的路徑)、網絡建立(如ATM、幀中繼)。這里以IPv4為例,關于IPv6報文格式詳見博文《IPv4與IPv6數據報格式詳解》。

    RFID設備管理軟件

    圖1 IPv4數據報格式

    版本號(version)

        不同的IP協議版本使用不同的數據報格式。

    首部長度(HL, Internet Head Length)

        確定IP數據報中數據部分實際從哪里開始,包含可變數量的選項。若IP數據報沒有包含選項,則IP數據報首部長度為20字節。

    服務類型(TOS, Type Of Service)

        更好地服務不同類型IP數據報(如實時數據報IP電話應用、非實時通信流FTP),Cisco將TOS前3位標識不同服務等級,即優先級。

    數據報長度(TL, Total Length)

        IP數據報長度,即首部+數據。

    分片:標識(identification)、標志(flags)、段位移(Fragment Offset)

        這3個字段跟IP分片有關,當目的主機從同一個源收到一批數據報時,需要確定這些數據報是完整數據報還是分片后的數據報,數據報首部標識字段解決這個問題,檢查數據報的標識號確定哪些數據報真正是同一個較大數據報的片;如何判斷最后一個分片已收到,數據報首部標志字段解決這個問題,將最后一片的標志為0,其他標記為1;如何順序重組這些片,這就需要記錄每個片的在數據報有效凈荷的偏移量,這也確定了片是否丟失。若丟失某些片,則丟棄這個不完整的數據報(不會交給傳輸層)。需要可靠傳輸怎么辦呢,由傳輸層讓源重傳原始數據攝中的數據(如TCP)。

    壽命(TTL, Time To Live)

        每次數據報經過一臺路由器時,該字段的值減1,若TTL字段減為0,則丟棄該數據報,從而確保數據報不會永遠在網絡循環

    上層協議(Protocol)

        該字段用于指明IP數據報的數據部分應該交給哪個傳輸層協議(6為TCP、17為UDP)。

    首部檢查和(Header Checksum)

        只是對IP首部進行檢驗,對整個TCP/UDP報文段檢驗交由TCP/UDP完成。將首部中的每兩個字節當作一個數,用反碼運算對這些數求和,該和按1補碼值存放在檢查和字段。當路由器收到IP數據報時,計算其首部檢查和,與該字段值比較,若出錯則丟棄該數據報。

        注:因為TTL字段及選項字段可能改變,所以每個路由器上的檢查和都須重新計算并存放在原處。(檢查后,再更新)

    源和目的IP地址(Source/Destination Address)

    選項(Options)

        選項字段允許IP首部被擴展,由此導致數據報首部長度可變,故不能預先確定數據字段從何開始,同時也使路由器處理一個IP數據報所需時間差異很大(有的要處理選項,有的不需要)。

    數據(Data)

        當使用TCP/UDP協議時,數據即為傳輸層報文段(TCP/UDP)。數據字段也可承載其他類型數據,如ICMP報文段。

     

    二、實例解析

        以請求百度首頁基本HTML為例,因HTTP報文太大(3835字節),網絡層對其進行分片,共4片,如下圖(截自Wireshark俘獲的HTTP響應報文):

    RFID設備管理軟件

    圖2 數據分片實例

    整個HTTP報文傳輸示意圖如下:

    RFID設備管理軟件

    圖3 HTTP報文傳輸實例示意圖

    2.1 分片

        IP數據報首部字段的標識(identification)、標志(flags)、段位移(Fragment Offset) 用來處理分片。當目的主機從同一個源收到一批數據報時,需要確定這些數據報是完整數據報還是分片后的數據報,數據報首部標識字段解決這個問題,檢查數據報的標識號確定哪些數據報真正是同一個較大數據報的片;如何判斷最后一個分片已收到,數據報首部標志字段解決這個問題,將最后一片的標志為0,其他標記為1;如何順序重組這些片,這就需要記錄每個片的在數據報有效凈荷的偏移量,這也確定了片是否丟失。若丟失某些片,則丟棄這個不完整的數據報(不會交給傳輸層)。需要可靠傳輸怎么辦呢,由傳輸層讓源重傳原始數據攝中的數據(如TCP)。

        將該4個IP數據報(組成該完整的HTTP報文)的標識、標志、段位移部分抽出來,如下圖所示:

    RFID設備管理軟件

    圖4 HTTP響應報文的4個IP數據報

        可以看出,IP數據報并沒有分片,這是因為這些IP數據報封裝成幀并沒有超過MTU(以太網MTU為1500字節)。蠻想找一個有分片的IP數據報分析下,可惜俘獲的分組沒有:-(

        不盡要問,當報文太大時,什么時候劃分報文呢?主要是在兩個地方:傳輸層TCP分組、網絡層IP分片。

    (1)分組

        TCP把應用程序交給它的報文分成合適的小塊交給下面網絡層,要不要分取決于應用層報文是否大于MSS(想想TCP連接建立時最大報文段MSS大小的協商,注MSS僅包含TCP報文段的凈荷數據,不包括TCP首部),怎么分取決于特定的分組算法。本例將3836字節長度HTTP報文分成:411+1440+1440+545。

    (2)分片

        IP數據報在發送方與目的地間傳輸可能選擇不同的路徑,路徑上的每段鏈路可能使用不同的鏈路層協議,協議可能具有不同的最大傳輸單(MTU,鏈路層數據報能承載的最大數據量)。當出鏈路的MTU比IP數據報的長度小時,需要將過大的IP數據報分片。IPv4數據報首部字段標識、標志、偏移量解決這個問題。

        值得注意的是,IP數據報分片在網絡層重組,重組好了,再交給傳輸層。TCP報文段在傳輸層重組,重組好了,再交給應用層。

    2.2 IP數據報實例

    接下來,取一個完整IP數據報分析(以第一個數據報為例,即27),如下:

    RFID設備管理軟件

    圖4 IP數據報實例

        IP數據報首部沒有選項字段,長度為20字節,數據報長度451=IP數據報首部長度20(沒有選項字段)+TCP首部長度20(沒有選項字段)+TCP報文段的數據字段411(實為HTTP報文前411字節)。

     

     

    參考資料:

    [1] Andrew S.Tanenbaum.計算機網絡[M].

    [2] 《計算機網絡--自頂向下方法與Internet特色》[M].

    RFID設備管理軟件 HTTP報文傳輸實例.rar   

    RFID設備管理軟件 IPv4和IPv6數據報格式.rar   

    from:http://blog.chinaunix.net/uid-9112803-id-3213492.html

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全