文章目錄
- 一 UDP詳解
- 二 TCP首部各個欄位詳解
一 UDP詳解

在傳輸層中,有兩個協議UDP和TCP,通常UDP都是比較簡單的協議欄位,因為UDP不需要面向連接,也就是說,發送UDP資料包過去時候,不需要先建立連接再發送,可以直接發送,并且UDP不保證可靠性,也就是說,發送資料包過去不保證對方是否收到,UDP的資料包不管這個;

埠

常見的埠號


二 TCP首部各個欄位詳解

TCP首部,相對于UDP首部比較復雜,UDP首部只需要8個位元組就可以表達想要的意思,而TCP至少需要20個位元組才可以表達TCP主要的意思;
我們看看TCP的資料偏移欄位:
資料偏移欄位主要是用來計算TCP首部長度的,它占4個bit,TCP實際長度是資料偏移欄位再乘于4得到的,由于TCP至少需要20個位元組,所以說,資料偏移的最小值就是5,也就是二進制的0101;
而資料偏移4個bit能表示最大值為1111,所以說可以根據資料偏移欄位算出TCP首部長度為4*15 = 60;
所以說TCP的首部取值范圍是:20-60位元組;
為什么資料偏移欄位是算TCP的首部長度的呢?
其實也很好理解,我們的TCP報文,就是首部+資料部分的,而資料部分相對于首部偏移的位元組不就是首部的長度了嘛!
不知道有木有人想過一個問題:為什么TCP首部值記錄了TCP首部長度沒有記錄TCP資料長度呢?
其實TCP的資料部分是可以推算出來的,我們可以通過IP資料包推算出來,因為IP資料包的首部有,總長度和首部長度的資訊,而IP資料包總長度-IP資料包首部長度= IP資料的長度; 而我們的IP資料的長度通常就是TCP傳輸下來的資料包,所以說IP資料部分就可以表示TCP的長度了,由于TCP又記錄了TCP首部長度,那么IP資料部分-去TCP首部,就得到了TCP的資料長度了!
抓個包觀察以下:


通過上面兩個我們知道TCP的資料包長度為536位元組;
假如我們再觀察IP資料包的資料部分,如果也是536,那么就是正確的驗證了TCP資料部分的計算方式

也就是說,我們的IP包總長度為556-IP首部20 = 536,剛好等于TCP資料包的長度!!!!
所以驗證是對的!
保留欄位:
其實保留欄位就是TCP設計者留給以后用的,至今者6個bit的保留位都還沒有使用過!
檢驗和欄位:
了解即可!!!!

標志位欄位:

一般來說,URG欄位都是為0,很少見到是1的情況,比較不常見;
PSH標志位一般在互聯網開發也不怎么使用;
RST為1時候,一般都是該TCP包出錯了,表示需要重新釋放,可以抓個包給你們看看RST為1的情況;


SYN為1,且ACK為0時候,表明這個TCP包是建立連接請求;
什么是建立連接請求呢?是TCP傳輸資料時候,需要先三次握手,第一次握手就是建立連接請求,后面都會詳細講到這個問題;
SYN1,且ACK1時候,表明對方同一建立鏈接;也就是第二次握手時候,我們可以看到;

序號和確認好欄位:

我們要清楚,傳輸的資料是位元組流,每個位元組都有自己的編號,類似于變數在記憶體中又自己的地址編號一樣,
而確認號,和序號它們在建立連接前和建立連接后都是由不同含義的,
我們先討論的是建立連接之后的情況,也就是三次握手之后的情況,那么也就是開始發TCP資料包過去的情況;
我們知道建立建立后,需要發送TCP資料包過去,序號是用來記錄這一次發送過去的資料包的資料部分的第一個位元組是什么;
舉個例子:
比如我們有一個客戶端和一個服務器,建立連接后,服務器發送300位元組的資料包給客戶端,假設分三次發送過去,那么第一次發送過去就是發送了1-100個位元組,此時這個資料包的TCP首部的序號就是為1,表示這一次發送過去的第一個位元組編號為1;那么服務器繼續發101-200過去,此時第二次的TCP首部的序號就是101,第三次那么它的序號就是201;
畫個簡易圖理解以下確認號的意思:

而確認號是說明期待下一次發過來的TCP資料是部分的第一個位元組編號是多少!
比如上面的哪個例子服務器發了給我一個1-100的資料包,我作為客戶端,也會發一個TCP資料包給服務器,這個TCP資料包中是有一個確認號為101的編號,表示希望接下來接收到的位元組是從101開始的,
***‘
視窗欄位:

也是大致說了以下各個欄位的主要意思,其實需要結合TCP的要點理解才可以,知道各個欄位是具體是如何發揮作用的,比如可靠傳輸,流量控制,擁塞控制,連接管理,建立管理,釋放管理!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/382842.html
標籤:其他
上一篇:H3C構建一個中小型企業局域網
下一篇:?老生常談:MySQL高可用架構


