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


緣起
什么是TCP

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


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

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

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

TCP三次握手

第一次握手:建立連接時(shí),客戶端發(fā)送 SYN 包到服務(wù)器,并進(jìn)入 SYN_SEND 狀態(tài),等待服務(wù)器確認(rèn)。
第二次握手:服務(wù)器收到 SYN 包,必須確認(rèn)客戶的 SYN ,同時(shí)自己也發(fā)送一個(gè) SYN 包,即 SYN+ACK 包,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài)。
第三次握手 :客戶端收到服務(wù)器的 SYN + ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入 ESTABLISHE 態(tài)。
連接建立中的異常
建連接時(shí)SYN超時(shí)問題
關(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ù)學(xué)系韋東奕爆紅!拒絕哈佛offer,留任北大! ? 他是世界上最杰出程序員之一,1 個(gè)月寫了個(gè)操作系統(tǒng),退休后去做飛行員! ? 開掛的00后!17歲「天才少女」被8所世界名校錄取,最終選擇MIT計(jì)算機(jī)系 ? 微信沙雕功能“炸屎”上線!網(wǎng)友:滿屏的粑粑真可愛
評(píng)論
圖片
表情

