TCP 連接的前世今生
點擊上方“碼農(nóng)突圍”,馬上關(guān)注 這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包 真愛,請設(shè)置“星標”或點個“在看
前言


緣起
什么是TCP

面向連接:一定是「一對一」才能連接,不能像 UDP 協(xié)議可以一個主機同時向多個主機發(fā)送消息,也就是一對多是無法做到的。 可靠交付:無論的網(wǎng)絡(luò)鏈路中出現(xiàn)了怎樣的鏈路變化,TCP 都可以保證一個報文一定能夠到達接收端。 面向字節(jié)流:也就是說僅僅把上層協(xié)議傳遞過來的數(shù)據(jù)當成字節(jié)傳輸。
網(wǎng)絡(luò)模型
七層模型


應(yīng)用層報頭:Ppplication Header, 簡稱 AH。 表示層報頭:Presentation Header, 簡稱 PH。 會話層報頭:Session Header, 簡稱 SH。 傳輸層報頭:Transport Header, 簡稱 TH。 網(wǎng)絡(luò)層報頭:Network Header, 簡稱 NH。 數(shù)據(jù)鏈路層報頭:Data link Header, 簡稱 DH。 應(yīng)用層協(xié)議數(shù)據(jù)單元:Protocol Data Unit,簡稱 PDU。 數(shù)據(jù)鏈路層報尾:Data link Termination,簡稱 DT。
五層網(wǎng)絡(luò)模型
應(yīng)用層:確定進程之間通信的性質(zhì),以滿足用戶需求。應(yīng)用層協(xié)議有很多。如支持萬維網(wǎng)應(yīng)用的 HTTP 協(xié)議、支持電子郵件的 SMTP 協(xié)議、等等。 傳輸層:負責主機間不同進程的通信。這一層中的協(xié)議有面向連接的 TCP (傳輸控制協(xié)議)、無連接的 UDP (用戶數(shù)據(jù)報協(xié)議);數(shù)據(jù)傳輸?shù)膯挝环Q為報文段或用戶數(shù)據(jù)報。 網(wǎng)絡(luò)層:負責分組交換網(wǎng)中不同主機間的通信。作用為:發(fā)送數(shù)據(jù)時,將運輸層中的報文段或用戶數(shù)據(jù)報封裝成 IP 數(shù)據(jù)報,并選擇合適路由。 數(shù)據(jù)鏈路層:負責將網(wǎng)絡(luò)層的 IP 數(shù)據(jù)報組裝成幀。 物理層 :透明地傳輸比特流。
四層網(wǎng)絡(luò)模型

網(wǎng)絡(luò)接口層:包括用于協(xié)作 IP 數(shù)據(jù),在已有網(wǎng)絡(luò)介質(zhì)上傳輸?shù)膮f(xié)議。實際上 TCP/IP 標準并不定義與 ISO 數(shù)據(jù)鏈路層和物理層相對應(yīng)的功能 。相反,它定義了像 ARP (地址解析協(xié)議)這樣的協(xié)議,提供 TCP/IP 協(xié)議的數(shù)據(jù)結(jié)構(gòu)和實際物理硬件之間的接口。 網(wǎng)絡(luò)層:網(wǎng)絡(luò)層對應(yīng)于 OSI 七層參考模型的網(wǎng)絡(luò)層。本層包含 IP 協(xié)議、RIP 協(xié)議(路由信息協(xié)議),負責數(shù)據(jù)的包裝、尋址和路由。同時還包含 ICMP (網(wǎng)間控制報文協(xié)議)用來提供網(wǎng)絡(luò)診斷信息。 傳輸層:傳輸層對應(yīng)于 OSI 七層參考模型的傳輸層,它提供兩種端到端的通信服務(wù)。其中 TCP協(xié)議提供可靠的數(shù)據(jù)流運輸服務(wù), UDP 協(xié)議提供不可靠的用戶數(shù)據(jù)報服務(wù)。 應(yīng)用層:應(yīng)用層對應(yīng)于 OSI 七層參考模型的應(yīng)用層和表示層。因特網(wǎng)的應(yīng)用層協(xié)議包括 FTP (文件傳輸協(xié)議)HTTP (超文本傳輸協(xié)議)、 Telent (遠程終端協(xié)議)、SMTP (簡單郵件傳送協(xié)議)、 IRC (因特網(wǎng)中繼會話)、NNTP (網(wǎng)絡(luò)新聞傳輸協(xié)議)等。
TCP頭格式

URG 標志,表示緊急指針是否有效。 ACK 標志,表示確認號是否有效,一般稱攜帶 ACK 標志的 TCP 報文段為"確認報文段"。 PSH 標志,提示接收端應(yīng)用程序應(yīng)該立即從 TCP 接收緩沖區(qū)中讀走數(shù)據(jù),為接收后續(xù)數(shù)據(jù)騰出空間(如果應(yīng)用程序不將接收到的數(shù)據(jù)讀走,它們就會直停留在 TCP 接收緩沖區(qū)中)。 RST 標志,表示要求對方重新建立連接,一般稱攜帶 RST 標志的 TCP 報文段為"復(fù)位報文段"。 SYN 標志,表示請求建立 個連接,一般稱攜帶 SYN 標志的 TCP 報文段為"同步報文段"。FIN 標志,表示通知對方本端要關(guān)閉連接了,一般稱攜帶 FIN 標志的 TCP 報文段為"結(jié)束報文段"。

TCP三次握手

第一次握手:建立連接時,客戶端發(fā)送 SYN 包到服務(wù)器,并進入 SYN_SEND 狀態(tài),等待服務(wù)器確認。
第二次握手:服務(wù)器收到 SYN 包,必須確認客戶的 SYN ,同時自己也發(fā)送一個 SYN 包,即 SYN+ACK 包,此時服務(wù)器進入 SYN_RECV 狀態(tài)。
第三次握手 :客戶端收到服務(wù)器的 SYN + ACK 包,向服務(wù)器發(fā)送確認包 ACK,此包發(fā)送完畢,客戶端和服務(wù)器進入 ESTABLISHE 態(tài)。
連接建立中的異常
建連接時SYN超時問題
關(guān)于SYN Flood攻擊
避免方式
TCP四次揮手

TCP的連接斷開
為什么建連接要三次握手,斷連接需要四次揮手?
斷開連接中的異常
TIME_WAIT數(shù)量太多
優(yōu)化法一:tcp_tw_reuse
優(yōu)化法二:tcp_max_tw_buckets
TCP狀態(tài)流轉(zhuǎn)

總結(jié)
- END - 最近熱文
? 韋神!北大數(shù)學系韋東奕爆紅!拒絕哈佛offer,留任北大! ? 他是世界上最杰出程序員之一,1 個月寫了個操作系統(tǒng),退休后去做飛行員! ? 開掛的00后!17歲「天才少女」被8所世界名校錄取,最終選擇MIT計算機系 ? 微信沙雕功能“炸屎”上線!網(wǎng)友:滿屏的粑粑真可愛
評論
圖片
表情

