IP TCP UDP報文

一、IP協議報文詳解

1240

IP協議在網絡層,IP協議主要提供了IP編址,讓主機可以在不同網段之間通信,報頭信息解析如下:

1、4位版本號(Version):一般是IPv4或IPv6;

2、4位頭部長度(Header Length):IP報頭長度;

3、8位服務類型(Type of Service)

4、16位總長度(Total Length):IP報文的總長度,包括報頭和數據;

5、16位標識符(Identification),標識每個已切分的數據包;

6、3位標記(Flags):第一位保留,第二位爲DF(爲1不將數據分包),第三位爲MF(爲1表示後面還有數據包);

7、13位包偏移(Fragmenet Offset):表示IP包在原數據包中的位置;

8、8位TTL,數據包的存活時長;

9、協議(Protocol):IP報頭後面的報文協議;

10、頭部檢查和(Header Checksum)

11、源IP地址(Source Address):本機IP地址;

12、目的IP地址(Destination):目的IP地址。

下面是一個IP報頭的實際例子:

1240

二、 TCP報文分析

1240

TCP協議在網絡五層模型中的傳輸層,TCP提供端到端的傳輸,保證傳輸的可靠性,面向連接,需要預先檢測連接狀態和條件,另一個重要的功能就是提供多路複用,主要通過應用程序提供不同的端口實現。

具體對TCP協議的理解就是它的報文格式了,對任一種協議都是這樣,報文格式是協議的主要內容。TCP報文包含的字段和作用如下:

1、16位源端口(Source Port):源主機即本機的端口,由應用程序提供,端口範圍爲1-65535,1-1023爲系統端口,1024-65535爲用戶自定義端口。平時我們編寫服務器都會提供端口,而客戶端一般不用,但是客戶端同樣還是有端口的,只不過沒有指定的話會由系統指定。

2、16位目標端口(Destination Port):需要主動連接的主機端口。

3、32位序列號(Sequence Number):受SYN控制位影響,表示初始序列號或數據分段的標識。

4、32確認號(Acknowledgement Number):是否確認收到對應序列號的數據包,確認收到的話序列號+1表示確認。

5、4位首部長度(Headr Length):TCP頭的長度。

6、6位保留位(Reserved bits):全部位都是0,留在將來定義新功能。

7、控制位

(1)URG(Urgent):緊急位,指定緊急指針是否有效,配合緊急指針使用,爲1則指明緊急數據包。

(2)ACK(Acknowledgement):確認位,指定該數據包是否是確認數據包,指定確認號是否有效。

(3)PSH(Push):推送位,表示有數據需要處理。

(4)RST(Reset):重置位,爲1則需要重新連接,一般重連次數是3次。

(5)SYN(Synchronize):同步序列或初始化,表明是否需要新建鏈接,是否爲首次連接的初始序列,指定序列號是否有效。

(6)FIN(Finish):結束位,爲1表示請求斷開連接。

8、16位窗口大小:類似於緩衝區的大小,這是主機雙方協議好的大小,可以在這裏做流量控制。

9、16位校驗和(Checksum):對這個TCP報文的校驗和。

10、緊急指針(Urgent Pointer):URG控制位設置爲1時纔有效。

11、選項(Options):長度不確定,長度爲32位。

12、數據內容(Data)。

一個實際的TCP報頭信息例子如下:

1240

TCP三次握手四次分手

我們可以從TCP的報文信息中瞭解到,其6位的的操作位是比較重要的,控制着TCP整個傳輸和連接。從TCP建立連接到斷開連接,基本起碼需要經過三次握手,傳輸數據,然後到四次分手,過程中都少不了對控制位的使用。

strip

1、TCP三次握手過程

主機client主動發送SYN數據包到服務器server,即Seq=x,SYN=1,序列號隨機生成爲x,SYN位置1表示32位序列號爲初始序列號,主機client需要和server建立連接。

服務器server收到請求並響應主機client,向client發送SYN+ACK數據包,即Seq=y,Ack=x+1,SYN=1,ACK=1。ACK爲1表示這是一個確認包,Ack爲32位確認位,將x序列號+1表示已經收到x+1之前的所有數據包。Seq=1,SYN=y,表示服務器也需要和client建立連接。

主機client收到服務器server的數據包,向服務器發送ACK報文數據,即Seq=x+1,Ack=y+1,ACK=1,ACK爲1表示一個確認包,確認內容爲y+1,現在可以開始建立TCP連接了。

2、TCP四次分手過程

首先主機client需要和服務器server斷開連接,於是向server發送FIN/ACK數據包,即FIN=1,ACK=1,FIN置1表示請求斷開連接。

服務器server迴應請求併發送ACK報文,即ACK=1,這時主機已和服務器斷開連接。

服務器server也向主機client請求斷開連接,同樣向client發送FIN/ACK報文,即FIN=1,ACK=1.

主機client同樣迴應斷開請求,發送ACK報文,ACK=1,此時服務器已和主機端口連接,整個TCP連接完整結束。

三、UDP報文

1240

UDP(User Datagram Protocol)用戶數據報協議是一種面向非連接的傳輸協議,同樣也屬於傳輸層,它僅僅提供有限的錯誤檢查,不保證傳輸的可靠性,但是傳輸速度比較快,在進程應用於語音流和視頻流的傳輸,UDP的報文結構如下:

1、16位源端口號:應用服務提供的端口號;

2、16位目標端口號:目標主機應用程序開放的端口號;

3、16位UDP長度:報文的長度,包括報頭和數據的長度;

4、16位UDP檢驗和:將前面的報頭信息做一個檢驗和。

UDP報頭的實際例子如下:

1240


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章