tcp、udp、ip、icmp報文格式分析

 

 

 

TCP 、UDP 、IP、 ICMP協議報文格式分析服務器

 

Tcp報文格式:網絡

 

Wireshark抓包如圖:tcp

 

 

源端口/目的端口(16bit)測試

在TCP報文中包涵了源端口/目的端口,源端口標識了發送進程,目的端口標識了接收方進程。由上圖能夠看出在此報文中咱們的源端口號是54160, 目的端口是cichlid(1377)。spa

 

序列號(32bit):3d

Sequence Number這個是發送序列號,用來標識從源端向目的端發送的數據字節流,它表示在這個報文端中的第一個數據字節的順序號,序列號是32位的無符號類型,序列號表達達到2^32 - 1後又從0開始, 當創建一個新的鏈接時,SYN標誌爲1,系列號將由主機隨機選擇一個順序號ISN(Initial Sequence Number)。此報文中的序列號是0x37e3d3a9以下圖:指針

 

 

確認號(32bit) code

Acknowledgment Number它包涵了發送確認一端所指望收到的下一個順序號。所以確認序列號應當是上次成功接收到數據的順序號加1。只有ACK標誌爲1時確認序號字段纔有效。TCP爲應用層提供全雙工服務,這意味着數據能在兩個方向上獨立的進行傳輸,所以鏈接的兩斷必需要保證每一個方向上的傳輸數據順序。由圖能夠看出此報文的確認號爲0xaa09ab7b。orm

 

 

偏移(4bit):blog

這裏的偏移實際指的是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)

 

RevervedNonceCWREcn-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,表示爲回顯應答;標示符和序列號都是同樣的,表示這兩個報文是配對的。

 

 

 數據鏈路層幀格式分析:

實際中,咱們會發現,大多數應用程序的以太網數據包都是Ethernet II幀的,如HTTP/Telnet/FTP/SMTP/POP3等應用。其格式如圖:

幀頭:6個字節的目的MAC地址和6字節的源MAC地址。2字節的類型字段,表示封裝在數據中的數據類型。

數據:46-1500字節的數據字段。

幀尾:4字節的幀效驗序列。

 

抓包如圖:

 

 

可見,其目的mac地址爲c8:5b:76: 1d:c1:9e,mac地址爲04:f9:38:c9:6a:22,類型爲0x0800指示了該幀包含了ipv4數據報,另外0x86dd表示該幀包含的是ipv6數據報,0x0806代表指示了該幀包含了ARP幀,0x8100指示了該幀包含了IEEE 802.1Q幀。

 

Tcp三次握手:

 

 

網絡抓包:

 

 

第一次握手,客戶端請求鏈接,此時客戶端發送一個tcp,標誌位爲SYN,序列號爲0;

 

 

第二次握手,服務器發回確認包, 標誌位爲 SYN,ACK. 將確認序號(Acknowledgement Number)設置爲客戶的I S N加1,如圖

 

 

第三次握手,客戶端再次發送確認包(ACK) SYN標誌位爲0,ACK標誌位爲1.而且把服務器發來ACK的序號字段+1,放在肯定字段中發送給對方.而且在數據段放寫ISN的+1, 如圖

 

 

 

Tcp四次揮手:

網絡抓包:

 

 

第一次揮手,主動方發送一個FIN,用來關閉主動方到被動方的數據傳送;

 

 

第二次揮手,被動方收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1,和SYN同樣,一個FIN將佔用一個序號;

 

 

第三次揮手,被動方關閉與主動方的鏈接,發送一個FIN給主動方;

 

 

第四次揮手,主動方發回ACK報文確認,並將確認序號設置爲收到序號加1;被動方關閉鏈接。

 

相關文章
相關標籤/搜索