網絡數據包解析


TCP/IP協議數據包,一般由應用層、傳輸層、網絡層、數據鏈路層封裝而成。

四層協議各自的作用:

  數據鏈路層實現了網卡接口的驅動程序。

  網絡層實現了數據包的選路和轉發。

  傳輸層為兩台主機上的應用程序提供端到端(end to end)的通信。

  應用層負責處理應用程序的邏輯。

#1先封裝的協議頭是傳輸層,傳輸層有TCP、UDP、TLS 、DCCP 、SCTP 、RSVP 、PPTP,常用的有TCP,UDP

TCP頭的結構(tcp頭總長度為 20個字節+options可選選項)

(1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。

(2)TCP目的端口(Destination Port):16位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。

(3)序列號(Sequence Number):32位 TCP連線發送方向接收方的封包順序號。

(4)確認序號(Acknowledge Number):32位 接收方回發的應答順序號。

(5)頭長度(Header Length):偏移量(4bit)和保留(4bit)總共8位  。 表示TCP頭的雙四字節數,如果轉化為字節個數需要乘以4。

(6)保留(2bit)和標記(6bit)總共8位

 標記位: 

  URG:是否使用緊急指針,0為不使用,1為使用。

  ACK:請求/應答狀態。0為請求,1為應答。

  PSH:以最快的速度傳輸數據。  

  RST:連線復位,首先斷開連接,然后重建。

  SYN:同步連線序號,用來建立連線。

  FIN:結束連線。如果FIN為0是結束連線請求,FIN為1表示結束連線。

(7)窗口大小(Window):16位  目的機使用16位的域告訴源主機,它想收到的每個TCP數據段大小。

(8)校驗和(Check Sum):16位  這個校驗和和IP的校驗和有所不同,不僅對頭數據進行校驗還對封包內容校驗。

(9)緊急指針(Urgent Pointer):16位  當URG為1的時候才有效。TCP的緊急方式是發送緊急數據的一種方式。

(10)可選選項(options)24位,類似IP,是可選選項。填充8位,使選項湊足32位

UDP頭的結構

源端口(2字節)

目的端口(2字節)

封報長度(2字節)

校驗和(2字節)

數據

(1)源端口(Source Port):16位的源端口域包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。

(2)目的端口(Destination Port):16位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。

(3)封包長度(Length):16位  UDP頭和數據的總長度。

(4)校驗和(Check Sum): 16位 和TCP和校驗和一樣,不僅對頭數據進行校驗,還對包的內容進行校驗。

#2、然后封裝的是網絡層,網絡層主要是IP協議,還有ICMP協議,IGMP協議等

IP協議頭(ip頭總長度根據IP頭的頭長來計算。一般IP沒有可選選項,長度為20字節,也就是對應頭長等於5):

 

1-1.版本4位,表示版本號,目前最廣泛的是4=B1000,即常說的IPv4;相信IPv6以后會廣泛應用,它能給世界上每個紐扣都分配

       一個IP地址。

1-2.頭長4位,數據包頭部長度。它表示數據包頭部包括多少個32位長整型,也就是多少個4字節的數據。無選項則為5(紅色部分)。

  這個字段表示了IP頭部的總長度,但它不是直接表示,因為它只占了4比特,最大也就15,實際的IP頭部長度等於首部長度字段表示的          值乘以4,單位是字節,也就是首部最長為15×4=60字節,一般IP數據報首部都沒有選擇項,長度為20字節,也就是對應頭長等於5。

1-3.服務類型,包括8個二進制位,每個位的意義如下:

       過程字段:3位,設置了數據包的重要性,取值越大數據越重要,取值范圍為:0(正常)~ 7(網絡控制)

       延遲字段:1位,取值:0(正常)、1(期特低的延遲)

       流量字段:1位,取值:0(正常)、1(期特高的流量)

       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

       成本字段:1位,取值:0(正常)、1(期特最小成本)

       保留字段:1位 ,未使用

1-4.包裹總長16位,當前數據包的總長度,單位是字節。當然最大只能是65535,及64KB。

2-1.重組標識16位,發送主機賦予的標識,以便接收方進行分片重組。

2-2.標志3位,他們各自的意義如下:

       保留段位(2):1位,未使用

       不分段位(1):1位,取值:0(允許數據報分段)、1(數據報不能分段)

       更多段位(0):1位,取值:0(數據包后面沒有包,該包為最后的包)、1(數據包后面有更多的包)

2-3.段偏移量13位,與更多段位組合,幫助接收方組合分段的報文,以字節為單位。

3-1.生存時間8位,經常ping命令看到的TTL(Time To Live)就是這個,每經過一個路由器,該值就減一,到零丟棄。

3-2.協議代碼8位,表明使用該包裹的上層協議,如TCP=6,ICMP=1,UDP=17等。

3-3.頭檢驗和16位,是IPv4數據包頭部的校驗和。由發送端填充,接收端對其使用CRC算法檢驗IP數據報頭部在傳輸過程中是否損壞。

4-1.源始地址,32位4字節,我們常看到的IP是將每個字節用點(.)分開,如此而已。

5-1.目的地址,32位,同上。

6-1.可選選項,主要是給一些特殊的情況使用,往往安全路由會當作攻擊而過濾掉,普聯(TP_LINK)的TL-ER5110路由就能這么做。

ICMP協議頭

ICMP報文就像是IP報文的小弟,總頂着IP報文的名頭出來混。因為ICMP報文是在IP報文內部的:

 

 

ICMP所有報文的前4個字節都是一樣的,但是剩下的其他字節不相同。

前四個字節統一的格式:類型(8位),代碼(8位),校驗和(16位)

類型和代碼決定了ICMP報文的類型。常見的有:

  類型8, 代碼0 ==> 表示回顯請求(ping請求)

  類型0, 代碼0 ==> 表示回顯應答(ping應答)

  類型11,代碼0 ==> 超時

檢驗和字段:包括數據在內的整個ICMP數據包的檢驗和;其計算方法和IP頭部檢驗和的計算方法一樣的。

 ICMP報文具體分為查詢報文差錯報文(對ICMP差錯報文有時需要做特殊處理,因此要對其進行區分。如:對ICMP差錯報文進行響應時,永遠不會生成另一份ICMP差錯報文,否則會出現死循環)

#3、最后封裝的是數據鏈路層,即以太網頭和FCS

以太網頭(總長度為14個字節)是由  6字節的目的MAC地址 + 6字節的源MAC地址 + 2字節的類型  組成。

以太的各種類型:

以太類型

協議

0x0800

Internet協議版本4(IPv4

0x0806

地址解析協議(ARP

0x8035

反向地址解析協議(RARP

三個數值

AppleTalk(Ethertalk)

0x80f3

AppleTalk地址解析協議(AARP)

為0x8100

IEEE 802.1Q標簽幀

三個數值

Novell IPX(alt)

0x8138

Novell公司

0x86DD

Internet協議版本6(IPv6

0x8819

CobraNet技術

0x88a8

提供商橋接(IEEE 802.1ad

0x8847

MPLS單播

0x8848

MPLS多播

0x8863

PPPoE發現階段

0x8864

PPPoE會話階段

0x888E

EAP over LAN(IEEE 802.1X

0x889A

HyperSCSI(以太網SCSI)

0x88A2

以太網ATA

0x88A4

EtherCAT協議

0x88CD

SERCOS-III

0x88D8

以太網電路仿真服務(MEF-8

0x88E5

MAC安全(IEEE 802.1AE

0x8906

以太網光纖通道

0x8914

FCoE初始化協議

0x9100

Q-in-Q的

0xCAFE

Veritas低延遲傳輸(LLT)

在不定長的數據字段(以太網頭后面的數據)后是4個字節的幀校驗序列(FCS)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM