我對TCP 協議的理解
- 基本常識 :
- 網卡的(邏輯:我認為的)結構
- TCP 是啥:
- TCP 的特點:
- TCP 協議格式:
- TCP 的機制
- 1.確認應答(ACK)機制
- 2.超時重傳機制
- 連接管理機制(三次握手,四次揮手)
- 三次握手建立連接解釋:
- 四次揮手 解釋
- 滑動視窗
- 先到這里吧,有點累了,下次補充,欲知后事如何,請關注我!!!
基本常識 :
- ip :用于確定網路中的一臺設備;
- 網卡 : 計算機上用于網路資訊交換的的I/O設備;
- Socket :java 對網卡的抽象;
- 埠 : 為了資料準確的在行程之間傳輸,為需要網路資源的行程配置專門的埠;//可以理解成快遞 發送到了你的小區(ip),但要到達你的手上要知道你家住那個房子(埠),
- 行程 : 在計算機中運行著的程式,一個行程可以對應多個埠,但一個埠最多對應一個行程;
網卡的(邏輯:我認為的)結構
- 一塊記憶體,(主要)用于資料緩沖;
- 一個介面,同行程之間資料互動;
- 一個程式,用于校驗資料的完整性,正確性;
- 一個控制器,管理網卡的資源;
TCP 是啥:
- TCP 是一個由大佬們規定的網路傳輸的協議;
- 是網路中資料傳輸的規范;
- TCP 是面向位元組流的網路資料傳輸協議;
TCP 的特點:
談論TCP 的特性,需要介紹一下另外一個傳輸協議;
UDP : 面向資料包的傳輸協議,特點是,無連接(類似與早期村口的廣播,收到了就是收到了,收不到也不會再次重傳,不要求連接)、不可靠(可能丟包,丟包就丟了,不會重新發的)、面向資料報(類似與肥料運輸,一包一包的 傳輸);
相對與UDP ,TCP 具有:
- 穩定; (10個機制導致 )
- 可靠; (10個機制導致 )
- 面向位元組流;
TCP 協議格式:

解釋 :
-
源/目的埠號 : (源) 資料出自那個行程,(目的)資料要去哪個行程;
-
32 位序號/32位確認序號:TCP 將每個位元組的資料都進行了編號,即為序列號;接受端收到資料報會創建一個新的TCP資料報,并將其ACK 位置 1 ,并寫入確認序號(表示之前的資料已經收到,下一次發送資料從那個序列號開始發送),再將這個TCP 資料報發送到發送端,通常我們稱 這個資料報的名字叫 ACK ;
-
4位TCP 報頭長度:表示改TCP頭部有多少個32 位bit(多少個int);所以TCP 頭部最大長度是2^4 * 4 個位元組的長度;
-
6 個標志位: 根據標志位 有效性 可以確定TCP 傳輸的是什么型別的資料報;
- (1)URG : 緊急指標是否有效 (有效當前位為 1);
- (2)ACK : 確認號是否有效;
- (3)PSH :提示接收端應用程式立刻從TCP緩沖區將資料讀走(類似生產者消費者模式);
- (4)RST : 對方要求重新建立連接;把攜帶RST標識的資料報文稱為“復位報文段”;
- (5)SYN : 請求建立連接;把寫下SYN標識的資料報稱為“同步報文段”;
- (6)FIN : 本端關閉通知標識,通知對方本端準備要關閉了;把攜帶FIN標識的資料報稱“結束報文段”;
-
16 位視窗大小 :流量控制機制的資訊,(在流量控制機制詳細解釋);
-
16 位校驗和 :由發送端寫入,用于校驗資料報的正確性(包括TCP 頭部以及資料),當校驗結果與發送端寫入的校驗和不同,則說明資料損壞;
-
16 位緊急指標 : 標識那部分資料是緊急資料;
-
40 位元組頭部選項 :(暫時還沒學習到,待到學習到了補充~ 這里放一個定時器~);
TCP 的機制
1.確認應答(ACK)機制
- 由于 TCP 每個資料報都 將其每一個字都編號了,也就是說 當發送端將 TCP資料報 發送到 接受端,如果接受端成功收到這個資料報,則會給發送端給以回應,即發送一個ACK 并 在確認序號中寫入下一次希望發送的資料是從那個序列號開始;

2.超時重傳機制
- 在主機之間發送資料時,有可能出現一些網路問題,導致 主機 A 給 主機B 發送的資料丟了,主機B 沒接收到 主機A 發來的資料,因為應答機制的原因 主機A 沒有接受到主機B 的回應,于是主機A 會 等待一段時間 如果 主機B 還是沒有回應,那么主機A就會重新發送資料;

連接管理機制(三次握手,四次揮手)
- 正常情況下 TCP 要經過三次握手建立連接,四次揮手斷開連接;
三次握手建立連接解釋:
- 例如主機 A 與 主機B 要建立連接 ,在建立連接之前首先(兩臺主機)要確定建立連接的雙方有無資料發送和接收的能力,此時 主機A 向 主機B 發送 SYN (建立連接的資料報 即,這個資料報中沒有主要的資料 只有 一個SYN 位置 為1),只有當 主機B 有接收TCP 報文能力的情況下才可能接收到主機A 發送的SYN ,(如果確認主機B 的接收能力沒有問題,但可能是網路原因沒有收到 ,就會由 超時重傳機制保證接受的可能 ),當主機B 接收到了 主機A 的 SYN 則,主機B 可以知道,主機·A的發送能力沒有問題 主機B 自己的接收能力沒有問題, 接下來 由于應答機制 主機B 向 主機A 發送 SYN + ACK ,如果主機B 的發送能力沒有問題,且主機A 的接收能力沒有問題,則 由 超時重傳機制 保證成功接收, 當主機A 接收到了主機B 的SYN + ACK 時 主機A 已經確認雙方的通信正常 ,但主機B 此時并不知道 自己的 發送能力 和 主機A 的接收能力是否ok,所以,主機A 會 發送 ACK 給主機 B,當主機 B 收到 主機A 發送的 ACK ,主機B 也確認雙方發送和接收能力ok ,雙方算是建立了連接,接下來就可以資料互動了;

四次揮手 解釋
- 當主機A與主機B之間完成了資料互動 ,雙方需要進行連接的斷開操作;
- 此時 主機 A(此時主機A 在 FIN_WAIT1 狀態) 會向 主機 B 發送 FIN (斷開連接的親求),當主機B 收到主機A 發送的 FIN 由于 應答機制主機B 發送給主機A 一個 ACK (表示我知道了),當主機A 收到 主機B 的 ACK 會處于FIN_WAIT2 (準備斷開等待狀態), 此時主機 A 已經確認雙方可以關閉,當主機B 處理完資料緩沖區的內容,向主機A 發送 FIN ,并等待主機A回復 ACK,當主機B 接收到 主機A 發來的ACK 雙方連接斷開;

滑動視窗
- 目的 在穩定性的前提下,要盡可能的提高效率;
- 方式 : 發送資料報時,一次性發送多組資料報,并建立相應的ACK 回應視窗,一但視窗中的序列號被回應了,則可以向后滑動視窗 ;
- 當發送途中出現了 資料丟包或回應丟包,發送端會根據回應端的回應訊息,決定下次發送那個資料報,以及超時重發,由于每個網卡都有緩沖區域(我的物理模型),并且發送的所有資料位元組都有序列號,因此,TCP 有良好的去重能力,即發送的資料包被重復接收沒有啥影響,并且能準確的解決 先發后至問題,對于中間丟包也能完美的要求重發;
先到這里吧,有點累了,下次補充,欲知后事如何,請關注我!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/390351.html
標籤:其他
