tcp、udp、ip、icmp報文格式分析
TCP 、UDP 、IP、 ICMP協議報文格式分析
Tcp報文格式:
Wireshark抓包如圖:
源埠/目的埠(16bit):
在TCP報文中包涵了源埠/目的埠,源埠標識了傳送程序,目的埠標識了接收方程序。由上圖可以看出在此報文中我們的源埠號是54160, 目的埠是cichlid(1377)。
序列號(32bit):
Sequence Number這個是傳送序列號,用來標識從源端向目的端傳送的資料位元組流,它表示在這個報文端中的第一個資料位元組的順序號,序列號是32位的無符號型別,序列號表達達到2^32 - 1後又從0開始, 當建立一個新的連線時,SYN標誌為1,系列號將由主機隨機選擇一個順序號ISN(Initial Sequence Number)。此報文中的序列號是0x37e3d3a9如下圖:
確認號(32bit):
Acknowledgment Number它包涵了傳送確認一端所期望收到的下一個順序號。因此確認序列號應當是上次成功接收到資料的順序號加1。只有ACK標誌為1時確認序號欄位才有效。TCP為應用層提供全雙工服務,這意味著資料能在兩個方向上獨立的進行傳輸,因此連線的兩斷必須要保證每個方向上的傳輸資料順序。由圖可以看出此報文的確認號為0xaa09ab7b。
偏移(4bit):
這裡的偏移實際指的是TCP首部的長度,它用來表明TCP首部中32bit字的數目,通過它可以知道一個TCP包它的使用者資料從哪裡開始,這個欄位佔4bit,若此欄位的值為1000,則說明TCP首部的長度是8 * 4 = 32位元組,所以TCP首部的最大長度是該欄位的值為1111 = 15, 15 * 4 =60位元組。此報文我們的偏移量在0x50中,又因它佔4bit,0x50等於二進位制的0101 0000 所以我們的偏移量是 0101=5,所以我們的TCP報文首部長度為5* 4 = 20位元組。
標誌(Flags):
Reverved、Nonce、CWR、Ecn-Echo(6bit):目前沒有使用,它們的值都為0,作為保留,留待以後開發新技術時使用。
URG(Urgent Pointer Field Significant):緊急指標標誌,用來保證TCP連線不被中斷,並且督促中間裝置儘快處理這些資料
ACK(Acknowledgement Field Signigicant):確認號欄位,該欄位為1時表示應答欄位有效,即TCP應答號將包含在TCP報文中。
PSH(Push Function): 推送功能,所謂推送功能指的是接收端在接收到資料後立即推送給應用程式,而不是在緩衝區中排隊。
RST(Reset the connection): 重置連線,不過一般表示斷開一個連線,
SYN(Synchronize sequence numbers):同步序列號,用來發起一個連線請求。
FIN(No more data from sender):表示傳送端傳送任務已經完成(即斷開連線)。
視窗大小(16bit):
表示現在執行對方傳送的資料量。也就是告訴對方,從本報文段的確認號開始允許對方傳送的資料量,由下圖可以看出該視窗允許傳送65536的資料量。
校驗和(16bit)
包含TCP首部和TCP資料段,這是一個強制性的欄位,一定是由傳送端計算和儲存,由接收端進行驗證。
UDP報文格式:
網路抓包如圖:
由圖可知源埠號(Source port)為64668,目的埠號(Destination port)為10019,使用者數據報長度(Length)為136bit,校驗和(checksum)為0x8e67=36455,另外存在128bytes的資料(Data)。
IP報文格式:
網路抓包如下圖:
版本(Version):IP協議的版本,目前的IP協議版本號為4,下一代IP協議版本號為6。
首部長度(Header length):IP報頭的長度。固定部分的長度(20位元組)和可變部分的長度之和。共佔4位。最大為1111,即10進位制的15,代表IP報頭的最大長度可以為15個32bits(4位元組),也就是最長可為15*4=60位元組,除去固定部分的長度20位元組,可變部分的長度最大為40位元組。
總長度(Total Length):IP報文的總長度。報頭的長度和資料部分的長度之和。此IP報文的總長度為52位元組。
標識(Identification):唯一的標識主機發送的每一分資料報。通常每傳送一個報文,它的值加一。當IP報文長度超過傳輸網路的MTU(最大傳輸單元)時必須分片,這個標識欄位的值被複制到所有資料分片的標識欄位中,使得這些分片在達到最終目的地時可以依照標識欄位的內容重新組成原先的資料。故該欄位標記當前分片為第幾個分片,在資料報重組時很有用。由圖可知當前分片為第17919個分片。
標誌(Flags):共3位。R(Reserved bit)、DF(Don’t fragment)、MF(More fragment)三位。目前只有後兩位有效,DF位:為1表示不分片,為0表示分片。MF:為1表示不是最後一片,還有其他分片,為0表示這是最後一片。
片偏移(Fragment offset):該欄位是與ip分片後,相應的ip片在總的ip片的位置。該欄位的單位是8位元組。比如,一個長度為4000位元組的ip報文,到達路由器。這是超過了鏈路層的MTU,需要進行分片,4000位元組中,20位元組為包頭,3980位元組為資料,需要分成3個ip片(鏈路層MTU為1500),那麼第一個分片的片偏移就是0,表示該分片在3980的第0位開始,第1479位結束。第二個ip片的片偏移為185(1480/8),表示該分片開始的位置在原來ip的第1480位,結束在2959。第三片的片偏移為370(2960/8),表示開始的時候是2960位,結束的時候在3979位。
生存時間(Time to live):IP報文所允許通過的路由器的最大數量。每經過一個路由器,TTL減1,當為0時,路由器將該資料報丟棄。TTL 欄位是由傳送端初始設定一個 8 bit欄位.推薦的初始值由分配數字 RFC 指定,當前值為 54,表明此資料包經過了64-54=10臺路由器。
協議(Protocol):指出IP報文攜帶的資料使用的是那種協議,以便目的主機的IP層能知道要將資料報上交到哪個程序(不同的協議有專門不同的程序處理)。和埠號類似,此處採用協議號,TCP的協議號為6,UDP的協議號為17。ICMP的協議號為1,IGMP的協議號為2.
首部校驗和(Header checksum):計算IP頭部的校驗和,檢查IP報頭的完整性。由圖中的correct可知該IP報頭是完整的。
源IP地址(source):標識IP資料報的源端裝置,由圖可知該源IP地址為183.232.173.182
目的IP地址(destination):標識IP資料報的目的地址,由圖可知該目的IP地址為172.31.116.155
Icmp報文格式:
網路抓包如圖:
實驗原理:ping是用來測試網路連通性的命令,一旦發出ping命令,主機會發出連續的測試資料包到網路中,在通常的情況下,主機會收到迴應資料包,ping採用的是ICMP協議。
在這次實驗中可以發現,日常進行的ping操作的icmp報文就只有兩種,請求(request)和應答(reply)。這兩個報文的type不一樣,8代表請求,0代表應答;code都為0,表示為回顯應答;標示符和序列號都是一樣的,表示這兩個報文是配對的。