TCP的報文詳細解讀

在這裏插入圖片描述
這張圖好像挺有名的,其實一開始我看見的時候是一臉懵逼的,但是通過翻書(大學時代最害怕的計算機網絡),查閱他人博客等等辦法,最後終於有了一個系統的瞭解,當然,這裏知識點多而雜,大家可以多看幾遍,結合上面那張圖,這張圖實際上非常清楚,大家看完底下的內容再回來看這張圖一定會恍然大悟。
首先,大家先看這張圖,要先從底下往上看,下面這個左邊是綠色右邊是紅色的長方形實際上是一個數據包:
IP首部:
這個地方實際上是IP地址,是我們要發送到的機器的IP地址

IP數據部分:
這個裏面東西就非常多了,有目標IP地址的目標端口信息,還有我們要發送的數據等等很多東西,也就是TCP的報文段,具體有些啥下面我會說到。

說完這裏以後我們再往上看,有個左邊黃色右邊藍色的長方形,這個就是我們剛纔說的TCP報文段,也就是我們剛纔說的IP數據部分,它也分兩個部分:TCP首部和TCP數據部分
TCP首部:
這個首部東西還挺多的,分別都有自己的功能,所以這個首部很像是功能性的內容,比如這個數據包給哪個端口啊,是用來做什麼的之類的,下面會講到。
TCP數據部分:
這部分實際上就是我們的數據部分,就是我們要傳輸的數據

現在再往上看,我們會發現上面這個大塊黃色的其實就是下面的小塊黃色的長方形,也就是我們的TCP首部,圖中詳細的畫出了其各個部分,甚至還標出了其各個部分的大小,下面我仔細講一下各個部分的功能和作用:
我們先豎着看,可以看到整個叫做TCP首部,前五行叫做20字節的固定首部,說明前五行一共是20字節,並且這五行內容格式是固定的。並且五行一共20字節,那麼一行4字節,也就是32位,橫着看發現最上方已經寫出來了32位,也就是用於來標識下方各個區域的大小是多少的刻度。
然後我們從上往下一行一行的看:
第一行我們看到了兩個端口,端口這個概念是計算機裏面的一個很常見的概念,分爲物理端口和虛擬端口。所謂物理端口,那肯定是實際存在的,就像是交換機上面那些接口們,虛擬端口就比較有意思了,它是一個虛擬的概念,不可見,存在於計算機內部,我們知道計算機運行時是有非常多進程的,我們的數據肯定是傳遞給特定的一個進程,那用什麼來唯一確定這個進程呢?就用端口號即可。每個進程都有自己對應的端口號,計算機虛擬端口號是一個16位數,也就是說,計算機一共有2的16次方-1這麼多個端口號可以使用,也就是65535個,在圖中,兩個端口分別佔用16位,便是這個原因。下面是具體各個部分的功能和定義:

源端口:
源端口我們一看就知道是指發送方計算機發送數據的出來的那個端口號

目的端口:
目的端口同理,指的是接收方計算機所接收數據的那個端口號

序號(seq):
seq號,我們知道一個數據可能是由多個數據包組成,序號的作用就是來標識各個數據包的先後順序,序號佔用32bit,那麼序號最多有2的32次方-1個,那假如超過了這個個數怎麼辦呢?就從0開始重新編號,這個seq號比較重要,後面的三次握手的內容需要用到

確認號(ack):
ack號,注意ack號和下面的ACK標識是不一樣的,ack=seq+1時說明發送方和接收方配對成功了。這個確認號是數據接收方反饋給發送方的一個屬性,假如確認號爲N,那麼表示接收方已經接收到了N-1及其以前的數據

接下來的第四行東西有點多,如下:

數據偏移:
這個數據偏移是針對TCP報文段來說的,指的是從TCP報文段到TCP數據部分之間的距離,也就是TCP首部的大小,一般來說是20個字節,但是我們從圖中可以發現第六行有個可變長度,所以有的時候其不是20個字節。

保留:
保留表示現在沒有被使用,這段長度是可以被使用的。

URG:
URG=1時表示此報文爲緊急報文,所以這個報文優先級最高,會被髮送方放到最開頭傳輸,需配合我們下面要說到的緊急指針一起使用

ACK:
ACK是用來指明連接是否建立的屬性,當ACK=1時說明連接已經建立了,建立連接後的所有報文ACK都必須爲1,並且規定只有當ACK=1時確認號纔會有效

PSH:
這個屬性是用於一端的應用進程希望在鍵入一個命令後立即就能收到對方的響應時使用,TCP可進行推送操作

RST:
這個字段其實就是reset,當我們的TCP連接出現嚴重錯誤時,我們需要將連接進行重置,這時候需要釋放連接,重新建立新的連接

SYN:
這個屬性比較重要,當它等於1時用於表示此報文爲連接請求或者連接接受報文,當SYN=1且ACK=0時,那就說明此時是連接請求報文。當SYN=1且ACK=1時,說明此時是連接接受報文,並且當SYN=1時是不允許攜帶數據的,並且會消耗一個序號。

FIN:
此屬性用於釋放連接,是finnish的縮寫,當發送方將FIN置1時,說明數據已經完全發送完畢,要求釋放連接

窗口:
窗口是用來控制傳輸速率的屬性,它表示接收方允許對方發送的數據量,來解決帶寬不一致的問題

校驗和:
用於校驗首部和數據兩部分

緊急指針:
當URG=1時,說明此報文爲緊急報文,緊急指針指出本報文中緊急數據的字節數,緊急數據處理完畢TCP會告訴應用程序恢復正常工作,並且,窗口爲0時也可以發送緊急數據

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