一、IP協議報文詳解
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報頭的實際例子:
二、 TCP報文分析
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報頭信息例子如下:
TCP三次握手四次分手
我們可以從TCP的報文信息中瞭解到,其6位的的操作位是比較重要的,控制着TCP整個傳輸和連接。從TCP建立連接到斷開連接,基本起碼需要經過三次握手,傳輸數據,然後到四次分手,過程中都少不了對控制位的使用。
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報文
UDP(User Datagram Protocol)用戶數據報協議是一種面向非連接的傳輸協議,同樣也屬於傳輸層,它僅僅提供有限的錯誤檢查,不保證傳輸的可靠性,但是傳輸速度比較快,在進程應用於語音流和視頻流的傳輸,UDP的報文結構如下:
1、16位源端口號:應用服務提供的端口號;
2、16位目標端口號:目標主機應用程序開放的端口號;
3、16位UDP長度:報文的長度,包括報頭和數據的長度;
4、16位UDP檢驗和:將前面的報頭信息做一個檢驗和。
UDP報頭的實際例子如下: