三次握手四次揮手
1和悦、三次握手(建立連接)
第一次握手
客戶端向服務(wù)端發(fā)送連接請求報文段。該報文段中包含自身的數(shù)據(jù)通訊初始序號豌汇。請求發(fā)送后借卧,客戶端便進入 SYN-SENT
狀態(tài)。
第二次握手
服務(wù)端收到連接請求報文段后敦姻,如果同意連接瘾境,則會發(fā)送一個應(yīng)答,該應(yīng)答中也會包含自身的數(shù)據(jù)通訊初始序號镰惦,發(fā)送完成后便進入 SYN-RECEIVED
狀態(tài)迷守。
第三次握手
當(dāng)客戶端收到連接同意的應(yīng)答后,還要向服務(wù)端發(fā)送一個確認(rèn)報文旺入《以洌客戶端發(fā)完這個報文段后便進入 ESTABLISHED
狀態(tài),服務(wù)端收到這個應(yīng)答后也進入 ESTABLISHED 狀態(tài)茵瘾,此時連接建立成功礼华。
注:第三次握手中可以包含數(shù)據(jù),通過快速打開(TFO)技術(shù)就可以實現(xiàn)這一功能拗秘。其實只要涉及到握手的協(xié)議圣絮,都可以使用類似 TFO 的方式,客戶端和服務(wù)端存儲相同的 cookie雕旨,下次握手時發(fā)出 cookie 達(dá)到減少 RTT 的目的扮匠。
注:RTT:該指標(biāo)表示發(fā)送端發(fā)送數(shù)據(jù)到接收到對端數(shù)據(jù)所需的往返時間。
2凡涩、四次揮手(斷開鏈接)
第一次握手
若客戶端 認(rèn)為數(shù)據(jù)發(fā)送完成棒搜,則它需要向服務(wù)端 發(fā)送連接釋放請求。
第二次握手
服務(wù)端 收到連接釋放請求后活箕,會告訴應(yīng)用層要釋放 TCP 鏈接帮非。然后會發(fā)送 ACK 包,并進入 CLOSE_WAIT
狀態(tài)讹蘑,此時表明 客戶端 到 服務(wù)端 的連接已經(jīng)釋放,不再接收 客戶端 發(fā)的數(shù)據(jù)了筑舅。但是因為 TCP 連接是雙向的座慰,所以 服務(wù)端 仍舊可以發(fā)送數(shù)據(jù)給 客戶端。
第三次握手
服務(wù)端 如果此時還有沒發(fā)完的數(shù)據(jù)會繼續(xù)發(fā)送翠拣,完畢后會向 客戶端 發(fā)送連接釋放請求版仔,然后 服務(wù)端 便進入 LAST-ACK
狀態(tài)。
注:通過延遲確認(rèn)的技術(shù)(通常有時間限制,否則對方會誤認(rèn)為需要重傳)蛮粮,可以將第二次和第三次握手合并益缎,延遲 ACK 包的發(fā)送。
第四次握手
客戶端 收到釋放請求后然想,向 服務(wù)端 發(fā)送確認(rèn)應(yīng)答莺奔,此時 客戶端進入 TIME-WAIT 狀態(tài)。該狀態(tài)會持續(xù) 2MSL(最大段生存期变泄,指報文段在網(wǎng)絡(luò)中生存的時間令哟,超時會被拋棄) 時間,若該時間段內(nèi)沒有 服務(wù)端 的重發(fā)請求的話妨蛹,就進入 CLOSED
狀態(tài)屏富。當(dāng) 服務(wù)端 收到確認(rèn)應(yīng)答后,也便進入 CLOSED 狀態(tài)蛙卤。
為什么客戶端要進入TIME-WAIT
狀態(tài)狠半,等待 2MSL 時間后才進入 CLOSED 狀態(tài)?
為了保證 服務(wù)端 能收到客戶端的確認(rèn)應(yīng)答颤难。若客戶端發(fā)完確認(rèn)應(yīng)答后直接進入 CLOSED 狀態(tài)神年,如果確認(rèn)應(yīng)答因為網(wǎng)絡(luò)問題一直沒有到達(dá),那么會造成 服務(wù)端 不能正常關(guān)閉乐严。