網絡抓包作業(TCP、UDP、IP、ICMP及數據鏈路層幀格式)———第五小組


wireshark抓包作業

抓包網址:www.cnblogs.com/

本機ip地址172.31.120.93

目的ip地址 101.37.225.65

 

一、分析傳輸層協議(TCP、UDP)的報文格式,TCP協議的連接管理

1.1  TCP報文格式

 

1、端口號:用來標識同一台計算機的不同的應用進程。

1)源端口:源端口和IP地址的作用是標識報文的返回地址。

2)目的端口:端口指明接收方計算機上的應用程序接口。

TCP報頭中的源端口號和目的端口號同IP數據報中的源IP與目的IP唯一確定一條TCP連接。

2、序號和確認號:是TCP可靠傳輸的關鍵部分。序號是本報文段發送的數據組的第一個字節的序號。在TCP傳送的流中,每一個字節一個序號。e.g.一個報文段的序號為300,此報文段數據部分共有100字節,則下一個報文段的序號為400。所以序號確保了TCP傳輸的有序性。確認號,即ACK,指明下一個期待收到的字節序號,表明該序號之前的所有數據已經正確無誤的收到。確認號只有當ACK標志為1時才有效。比如建立連接時,SYN報文的ACK標志位為0。

3、數據偏移/首部長度:4bits。由於首部可能含有可選項內容,因此TCP報頭的長度是不確定的,報頭不包含任何任選字段則長度為20字節,4位首部長度字段所能表示的最大值為1111,轉化為10進制為15,15*32/8 = 60,故報頭最大長度為60字節。首部長度也叫數據偏移,是因為首部長度實際上指示了數據區在報文段中的起始偏移值。

4、保留:為將來定義新的用途保留,現在一般置0。

5、控制位:URG  ACK  PSH  RST  SYN  FIN,共6個,每一個標志位表示一個控制功能。

1)URG:緊急指針標志,為1時表示緊急指針有效,為0則忽略緊急指針。

2)ACK:確認序號標志,為1時表示確認號有效,為0表示報文中不含確認信息,忽略確認號字段。

3)PSH:push標志,為1表示是帶有push標志的數據,指示接收方在接收到該報文段以后,應盡快將這個報文段交給應用程序,而不是在緩沖區排隊。

4)RST:重置連接標志,用於重置由於主機崩潰或其他原因而出現錯誤的連接。或者用於拒絕非法的報文段和拒絕連接請求。

5)SYN:同步序號,用於建立連接過程,在連接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而連接應答捎帶一個確認,即SYN=1和ACK=1。

6)FIN:finish標志,用於釋放連接,為1時表示發送方已經沒有數據發送了,即關閉本方數據流。

6、窗口:滑動窗口大小,用來告知發送端接受端的緩存大小,以此控制發送端發送數據的速率,從而達到流量控制。窗口大小時一個16bit字段,因而窗口大小最大為65535。

7、校驗和:奇偶校驗,此校驗和是對整個的 TCP 報文段,包括 TCP 頭部和 TCP 數據,以 16 位字進行計算所得。由發送端計算和存儲,並由接收端進行驗證。

8、緊急指針:只有當 URG 標志置 1 時緊急指針才有效。緊急指針是一個正的偏移量,和順序號字段中的值相加表示緊急數據最后一個字節的序號。 TCP 的緊急方式是發送端向另一端發送緊急數據的一種方式。

9、選項和填充:最常見的可選字段是最長報文大小,又稱為MSS(Maximum Segment Size),每個連接方通常都在通信的第一個報文段(為建立連接而設置SYN標志為1的那個段)中指明這個選項,它表示本端所能接受的最大報文段的長度。選項長度不一定是32位的整數倍,所以要加填充位,即在這個字段中加入額外的零,以保證TCP頭是32的整數倍。

10、數據部分: TCP 報文段中的數據部分是可選的。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。

附:tcp抓包圖

 

1.2  UDP報文格式

 

 ●源、目標端口號字段:占16比特。作用與TCP數據段中的端口號字段相同,用來標識源端和目標端的應用進程。

●長度字段:占16比特。標明UDP頭部和UDP數據的總長度字節。

●校驗和字段:占16比特。用來對UDP頭部和UDP數據進行校驗。和TCP不同的是,對UDP來說,此字段是可選項,而TCP數據段中的校驗和字段是必須有的。

 附:udp抓包圖

 

 

1.3 TCP協議的連接管理

TCP三次握手/建立連接

 

步驟1  A的TCP向B發出連接請求報文段,其首部中的同步位SYN=1,並選擇序號seq=x,表明第一次傳送數據時的第一個數據字節的序號是x。

步驟2  B的TCP收到連接請求報文段,如同意,則發回確認。ACK=1,其確認號ack=x+1。同時B向A發起連接請求,應使SYN=1,自己選擇的序號seq=y。

步驟3  A收到此報文段后向B給出確認,其ACK=1,確認號ack=y+1。A的TCP通知上層應用進程,連接已經建立。

下面是抓包三次握手示意圖

第一條TCP報文: 其中將seq設置為0 , SYN = 1 , ack = 0;

 

 

第二條TCP報文: 其中ack = 1(第一條報文中的seq+1) , SYN = 1 , 再將seq設置為1;

 

 

 

第三條TCP報文:  ack = 1第二條報文中seq+1) ; seq =1(第一條報文中seq+1) ; SYN=0

 

 

二、分析網絡層協議的報文格式(IP、ICMP)的報文格式。

2.1  IP報文格式

 

 

版本:IP協議的版本,目前的IP協議版本號為4,下一代IP協議版本號為6。

首部長度:IP報頭的長度。固定部分的長度(20字節)和可變部分的長度之和。共占4位。最大為1111,即10進制的15,代表IP報頭的最大長度可以為15個32bits(4字節),也就是最長可為15*4=60字節,除去固定部分的長度20字節,可變部分的長度最大為40字節。

服務類型:Type Of Service。

總長度:IP報文的總長度。報頭的長度和數據部分的長度之和。

標識:唯一的標識主機發送的每一分數據報。通常每發送一個報文,它的值加一。當IP報文長度超過傳輸網絡的MTU(最大傳輸單元)時必須分片,這個標識字段的值被復制到所有數據分片的標識字段中,使得這些分片在達到最終目的地時可以依照標識字段的內容重新組成原先的數據。

標志:共3位。R、DF、MF三位。目前只有后兩位有效,DF位:為1表示不分片,為0表示分片。MF:為1表示“更多的片”,為0表示這是最后一片。

片位移:本分片在原先數據報文中相對首位的偏移位。(需要再乘以8)

生存時間:IP報文所允許通過的路由器的最大數量。每經過一個路由器,TTL減1,當為0時,路由器將該數據報丟棄。TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64。發送 ICMP 回顯應答時經常把 TTL 設為最大值 255。

協議:指出IP報文攜帶的數據使用的是那種協議,以便目的主機的IP層能知道要將數據報上交到哪個進程(不同的協議有專門不同的進程處理)。和端口號類似,此處采用協議號,TCP的協議號為6,UDP的協議號為17。ICMP的協議號為1,IGMP的協議號為2.

首部校驗和:計算IP頭部的校驗和,檢查IP報頭的完整性。

IP地址:標識IP數據報的源端設備。

目的IP地址:標識IP數據報的目的地址。

 附:抓包圖

 

2.2  ICMP的報文格式

 

 

各字段說明

1.   類型:占8位

2.   代碼:占8位

3.   檢驗和:占16位

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

4.標識:占2字節,用於標識本ICMP進程,但僅適用於回顯請求和應答ICMP報文,對於目標不可達ICMP報文和超時ICMP報文等,該字段的值為0。

5.其它字段都ICMP報文類型不同而不同。

1>  ICMP報文的前4個字節是統一的格式,共有三個字段:即類型,代碼和檢驗和。

2>  8位類型和8位代碼字段一起決定了ICMP報文的類型。

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

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

類型11,代碼0:超時

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

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

附:Icmp抓包圖

 

 

三、分析數據鏈路層的幀格式

數據鏈路層實現的三大功能分別為:

(1) 封裝成幀

(2) 透明傳輸

(3) 差錯控制

 

1、封裝成幀

封裝成幀就是在一段數據前后分別添加首部和尾部,構成了一個幀。

接收端在收到物理層上交的比特流后,能根據首部跟尾部的標記,從收到的比特流識別幀的開始和結束。

此外,首部跟尾部還包括許多必要的控制信息。在發送幀時,是從幀首部開始發送。各種數據鏈路層協議都要對幀首尾部格式有明確的規定。每一種協議都限定了幀的數據部分長度上限-----最大傳輸單元MTU。

附:最大傳輸單元MTU

一個UDP報文能傳輸的最大數據為多大?

以太網的數據鏈路層規定了最大傳輸單元MTU=1500(字節),那么實際上一個IP數據報最長也就是1500 字節,而IP數據報又是由UDP報文或TCP流封裝得到的,那么一個UDP報文最大長度為1500-20=1480.20為IP數 據報的首部長度。而在運輸層,UDP也有自己的首部(8字節),所以在應用層一個UDP報文能傳遞的最大數據 為1500-20-8=1472(字節)

 

 

2、透明傳輸

什么是透明傳輸,為什么需要透明傳輸?看下圖:

 

 

解決透明傳輸的方法:

1、發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”(其十六進制編碼是 1B)。

2、字節填充或字符填充——接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符。

3、如果轉義字符也出現數據當中,那么應在轉義字符前面插入一個轉義字符。當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。 

實現方法見下圖:

 

 

3、差錯檢測

在傳輸過程中可能會產生比特差錯:1 可能會變成 0 而 0 也可能變成 1。

為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢測措施。 

CRC循環冗余檢測

在數據鏈路層傳送的幀中,廣泛使用了循環冗余檢驗 CRC 的檢錯技術。

發送端執行的操作:

在發送端,先把數據划分為組。假定每組 k 個比特。 

假設待傳送的一組數據 M = 101001(現在 k = 6)。我們在 M 的后面再添加供差錯檢測用的 n 位冗余碼一起發送。  

冗余碼計算實例:

現在 k = 6, M = 101001。

n = 3, 除數 P = 1101,(除數P是我們自己約定的,n的取值是 P的位數減1)

被除數是 (2^n)M = 101001000。 (對M從后開始補0,一共補n位)

2 運算的結果是:商 Q = 110101,(計算結果見下圖)

            余數 R = 001。

把余數 R 作為冗余碼添加在數據 M 的后面發送出去。發送的數據是:101001001,共 (k + n) 位。 

 

 

CRC 是一種常用的檢錯方法,而 FCS 是添加在數據后面的冗余碼。

接收端執行的操作:

從發送端接收到數據M:101001001(包含冗余碼FCS)

發送端、接收端約定的除數 P = 1101

M%P 運算結果若為0,表示無比特差錯

M%P 運算結果不為0,表示比特差錯,丟棄該幀

僅用循環冗余檢驗 CRC 差錯檢測技術只能做到無差錯接受。“無差錯接受”是指:“凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認為這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端數據鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)。要做到“可靠傳輸”(即發送什么就收到什么)就必須再加上確認和重傳機制。  

附:抓包圖

 


免責聲明!

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



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