SYN:同步標(biāo)志刚梭。
ACK:確認(rèn)標(biāo)志肠阱。
FIN: 結(jié)束標(biāo)志。
三次握手朴读,建立Tcp連接屹徘。
例子一:
比如在紅軍時(shí)代,A連和B連分在左右翼衅金,約定在幾時(shí)幾分一同發(fā)起打擊噪伊。這個(gè)幾時(shí)幾分的信息就需要人工通過(guò)通訊員來(lái)走路傳遞。所以A連指揮官派出通訊員氮唯。這是第一次鉴吹。
假設(shè)通訊員到達(dá)了B連,并且告知了B連指揮官幾時(shí)幾分惩琉,B連指揮官一定會(huì)讓通訊員再回去通知A連指揮官豆励,可憐的通訊員只能冒著危險(xiǎn)返回A連,因?yàn)锳連指揮官看不到通訊員返回的話,不知道幾時(shí)幾分這個(gè)信息到底傳達(dá)到了B連沒(méi)有良蒸。
這是第二次技扼。
現(xiàn)在B連指揮官開(kāi)始擔(dān)心通訊員是否回到了A連,如果沒(méi)回到嫩痰,B連指揮官會(huì)設(shè)身處地的想一想A連指揮官見(jiàn)不到返回的通訊員剿吻,肯定是不敢打的,所以B連指揮官最盼望的是再次看到通訊員出現(xiàn)在B連串纺,所以A連指揮官會(huì)讓通訊員再回B連一次丽旅。
這是第三次。
例子二:
晚上11點(diǎn)造垛,到該睡覺(jué)的時(shí)間了魔招。
A:“11點(diǎn)了,該睡了五辽。(SYN)”
B:“好的。晚安外恕。(SYN+ACK)”
A:“晚安杆逗。(ACK)”
然后兩個(gè)人都睡覺(jué)了。
這就是三次握手鳞疲。
客戶端和客戶端建立了Tcp連接后罪郊,之間就可以相互通信,客戶端發(fā)請(qǐng)求尚洽,服務(wù)端處理請(qǐng)求或向客戶端發(fā)送文件悔橄。
四次揮手,斷開(kāi)Tcp連接腺毫。
注意:中斷連接端可以是Client端癣疟,也可以是Server端。
下圖是客戶端中斷連接:
假設(shè)Client端發(fā)起中斷連接請(qǐng)求潮酒,也就是發(fā)送FIN報(bào)文睛挚。Server端接到FIN報(bào)文后,意思是說(shuō)"我Client端沒(méi)有數(shù)據(jù)要發(fā)給你了"急黎,但是如果你還有數(shù)據(jù)沒(méi)有發(fā)送完成扎狱,則不必急著關(guān)閉Socket,可以繼續(xù)發(fā)送數(shù)據(jù)勃教。所以你先發(fā)送ACK淤击,"告訴Client端,你的請(qǐng)求我收到了故源,但是我還沒(méi)準(zhǔn)備好污抬,請(qǐng)繼續(xù)你等我的消息"。這個(gè)時(shí)候Client端就進(jìn)入FIN_WAIT狀態(tài)心软,繼續(xù)等待Server端的FIN報(bào)文壕吹。當(dāng)Server端確定數(shù)據(jù)已發(fā)送完成著蛙,則向Client端發(fā)送FIN報(bào)文,"告訴Client端耳贬,好了踏堡,我這邊數(shù)據(jù)發(fā)完了,準(zhǔn)備好關(guān)閉連接了"咒劲。Client端收到FIN報(bào)文后顷蟆,"就知道可以關(guān)閉連接了,但是他還是不相信網(wǎng)絡(luò)腐魂,怕Server端不知道要關(guān)閉帐偎,所以發(fā)送ACK后進(jìn)入TIME_WAIT狀態(tài),如果Server端沒(méi)有收到ACK則可以重傳蛔屹∠鞣“,Server端收到ACK后兔毒,"就知道可以斷開(kāi)連接了"漫贞。Client端等待了2MSL后依然沒(méi)有收到回復(fù),則證明Server端已正常關(guān)閉育叁,那好迅脐,我Client端也可以關(guān)閉連接了。Ok豪嗽,TCP連接就這樣關(guān)閉了谴蔑!
在TIME_WAIT狀態(tài)中,如果TCP client端最后一次發(fā)送的ACK丟失了龟梦,它將重新發(fā)送隐锭。TIME_WAIT狀態(tài)中所需要的時(shí)間是依賴于實(shí)現(xiàn)方法的。典型的值為30秒变秦、1分鐘和2分鐘成榜。等待之后連接正式關(guān)閉,并且所有的資源(包括端口號(hào))都被釋放蹦玫。
2MSL等待的原因:報(bào)文段有生存時(shí)間赎婚,當(dāng)連接關(guān)閉時(shí),有可能收到遲到的報(bào)文段樱溉。這時(shí)挣输,若立馬就建立新的連接(同一端口),那么新的連接就會(huì)接收遲到的報(bào)文福贞,誤以為是發(fā)給自己的撩嚼。另一個(gè)原因是可靠的實(shí)現(xiàn)全雙工連接的終止。
嗯。不打王者榮耀了完丽,換時(shí)間來(lái)學(xué)習(xí)A导肌(堅(jiān)定臉= =)