傳輸層協議 TCP(1)
TCP 協議
TCP 全稱為 “傳輸控制協議(Transmission Control Protocol”). 人如其名, 要對數據的傳輸進行一個詳細的控制;
TCP 協議段格式
? 源/目的端口號: 表示數據是從哪個進程來, 到哪個進程去;
? 32 位序號/32 位確認號: 后面詳細講;
? 4 位 TCP 報頭長度: 表示該 TCP 頭部有多少個 32 位 bit(有多少個 4 字節); 所以TCP 頭部最大長度是 15 * 4 = 60
? 6 位標志位:
○ URG: 緊急指針是否有效
○ ACK: 確認號是否有效
○ PSH: 提示接收端應用程序立刻從 TCP 緩沖區把數據讀走
○ RST: 對方要求重新建立連接; 我們把攜帶 RST 標識的稱為復位報文段
○ SYN: 請求建立連接; 我們把攜帶 SYN 標識的稱為同步報文段
○ FIN: 通知對方, 本端要關閉了, 我們稱攜帶 FIN 標識的為結束報文段
? 16 位窗口大小: 后面再說
? 16 位校驗和: 發送端填充, CRC 校驗. 接收端校驗不通過, 則認為數據有問題. 此處的檢驗和不光包含 TCP 首部, 也包含 TCP 數據部分.
? 16 位緊急指針: 標識哪部分數據是緊急數據;
? 40 字節頭部選項: 暫時忽略;
類比文件:把數據到文件做寫入,把文件打開,在內核中創建一個struct file對象,把文件對應的屬性載入到內核中,以innode的形式讓我們能通過struct file結構體找到它
struct file有對應的緩沖區,文件緩沖區,把數據從應用層通過write或系統調用把數據寫入對應的文件,并不是把數據寫到對應的外設,而是把數據寫入到該文件的內核,緩沖區里,操作系統把數據刷新到外設中
刷新的過程:從自己的TCP數據緩存區放送到對方的數據緩沖區,發送的多少叫刷新的策略
報頭和有效載荷分離?
4比特位,從二進制角度來說是[0,15],但是起步要二十個字節,所以有規定:基本單位是4字節,所以實際上是[20,60],TCP報頭一定要能整除四個字節
怎么沒有報文大小,只有報頭大小?
因為TCP是面向字節流的,數據的大小由上層決定
TCP的可靠性
1.具有應答,可以保證對歷史消息的可靠性
2。通信中最新的報文永遠無法應答,最新可靠性無法保證
3.保證可靠性,處于核心地位:確認應答機制
我們不能夠對應答做出應答,這會處于無限循環
這是有確認序號,確認序號是在原有序號基礎上加1,在指定報文序號前把所有信息收集起來,下一次發送開始從確認序號開示,
服務端不只有應答,還有報頭加上有效載荷
比如:一段對話
李雷:你吃了嗎
韓梅梅:我吃了我吃的餃子
李雷:我吃的壽司
。。。
也會有出現亂序的情況,這是不可靠的,所以雙方傳遞的TCP報文必須有報頭