一:摘要概述
網絡傳輸協議中TCP的重要性不言而喻,好不誇張的說只有深入掌握TCP協議才能在這條路上走的更遠。TCP上學時就接觸到它是一個可靠的、面向連接的、基於字節流的、雙全工協議。TCP系列文章中將會一一解答這些概括性定義,當然其中必不可少的將會使用到Wireshark、PacketDrill
等工具,也會深入解析netstat、nc、tcpdump、telnet
等常用Linux網絡命令
二:TCP/IP分層
優秀的架構設計理所當然的會保持應用的單一職責,TCP/IP協議模型將不同職責的協議劃分爲四個分層即:應用層、傳輸層、網絡層、鏈路層。每個層級的協議都相對應的擁有各自的職責,其中TCP協議位於傳輸層,其職責就是處理應用層數據包交給網絡層協議,併爲不靠譜的IP協議保駕護航
三:TCP協議結構
四:協議頭端口
網絡傳輸數據時順序爲:發送端應用層 -- 發送端傳輸層 -- 發送端網絡層 -- 發送端鏈路層 -- 接收端鏈路層 -- 接收端網絡層 -- 接收端傳輸層 -- 接收端應用層
,服務器上運行肯定不止一個應用,那麼數據包歸屬於具體的某個應用就需要依靠端口判斷,這也就是老生常談的應用監控端口
五:協議頭兩個號
序列號與確認號是保證TCP協議可靠安全的重要組成,在連接建立中進行初始值交互,後續的數據傳輸中序列號保證包順序,確認號保證數據包達到。後續會詳細講解連接創建的三次握手與數據包丟失的重傳過程,其中就可以看到兩者的長袖揮舞
六:協議頭標誌
通過WireShark抓包就可以詳細看到TCP協議中的這些標誌,標識的是包類型。其中握手環節會有SYN、ACK,揮手環節的FIN、以及關閉RST等等
六:協議頭窗口
TCP設計中的窗口後續會專門講解滑動窗口,就會衍生出發送端的發送窗口,接收端的接收窗口等等概念。這裏需要記住的是這個窗口僅僅是爲了告訴連接對方俺的接收窗口大小
七:協議頭校驗和
網絡傳輸過程中有着許多不可預測的因素存在,結果就是有可能會導致數據傳輸包的缺失。TCP協議既然是可靠的傳輸層協議,自然需要確保數據完整,校驗和的作用就在於接收方會根據這個數值判斷數據包的完整性
八:協議頭選項
選項中也會存有許多有意思的概念數據,例如比較重要的MSS、Window Scale、SACK等信息,這些信息都會在後續文章中詳細講解