TCP協(xié)議的三次握手和四次揮手 電腦知識(shí)
電腦知識(shí) 由小雪供稿TCP/IP協(xié)議是傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺(tái)聯(lián)網(wǎng)設(shè)備規(guī)定一個(gè)地址。那么你知道這個(gè)協(xié)議為什么要三次揮手嗎?為什么要四次揮手嗎?以下是9252兒童網(wǎng)小編為你整理的TCP協(xié)議的三次握手和四次揮手的相關(guān)資料,希望能幫到你。
IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是否按順序發(fā)送的或者有沒有被破壞,IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。
TCP是面向連接的通信協(xié)議,通過三次握手建立連接,通訊完成時(shí)要拆除連接,由于TCP是面向連接的所以只能用于端到端的通訊。TCP提供的是一種可靠的數(shù)據(jù)流服務(wù),采用“帶重傳的肯定確認(rèn)”技術(shù)來實(shí)現(xiàn)傳輸?shù)目煽啃?。TCP還采用一種稱為“滑動(dòng)窗口”的方式進(jìn)行流量控制,所謂窗口實(shí)際表示接收能力,用以限制發(fā)送方的發(fā)送速度。
TCP協(xié)議的三次握手和四次揮手:
注:seq:"sequance"序列號(hào);ack:"acknowledge"確認(rèn)號(hào);SYN:"synchronize"請(qǐng)求同步標(biāo)志;;ACK:"acknowledge"確認(rèn)標(biāo)志";FIN:"Finally"結(jié)束標(biāo)志。
TCP連接建立過程:首先Client端發(fā)送連接請(qǐng)求報(bào)文,Server段接受連接后回復(fù)ACK報(bào)文,并為這次連接分配資源。Client端接收到ACK報(bào)文后也向Server段發(fā)生ACK報(bào)文,并分配資源,這樣TCP連接就建立了。
TCP連接斷開過程:假設(shè)Client端發(fā)起中斷連接請(qǐng)求,也就是發(fā)送FIN報(bào)文。Server端接到FIN報(bào)文后,意思是說"我Client端沒有數(shù)據(jù)要發(fā)給你了",但是如果你還有數(shù)據(jù)沒有發(fā)送完成,則不必急著關(guān)閉Socket,可以繼續(xù)發(fā)送數(shù)據(jù)。所以你先發(fā)送ACK,"告訴Client端,你的請(qǐng)求我收到了,但是我還沒準(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端沒有收到ACK則可以重傳。“,Server端收到ACK后,"就知道可以斷開連接了"。Client端等待了2MSL后依然沒有收到回復(fù),則證明Server端已正常關(guān)閉,那好,我Client端也可以關(guān)閉連接了。Ok,TCP連接就這樣關(guān)閉了!
為什么要三次揮手?
在只有兩次“握手”的情形下,假設(shè)Client想跟Server建立連接,但是卻因?yàn)橹型具B接請(qǐng)求的數(shù)據(jù)報(bào)丟失了,故Client端不得不重新發(fā)送一遍;這個(gè)時(shí)候Server端僅收到一個(gè)連接請(qǐng)求,因此可以正常的建立連接。但是,有時(shí)候Client端重新發(fā)送請(qǐng)求不是因?yàn)閿?shù)據(jù)報(bào)丟失了,而是有可能數(shù)據(jù)傳輸過程因?yàn)榫W(wǎng)絡(luò)并發(fā)量很大在某結(jié)點(diǎn)被阻塞了,這種情形下Server端將先后收到2次請(qǐng)求,并持續(xù)等待兩個(gè)Client請(qǐng)求向他發(fā)送數(shù)據(jù)...問題就在這里,Cient端實(shí)際上只有一次請(qǐng)求,而Server端卻有2個(gè)響應(yīng),極端的情況可能由于Client端多次重新發(fā)送請(qǐng)求數(shù)據(jù)而導(dǎo)致Server端最后建立了N多個(gè)響應(yīng)在等待,因而造成極大的資源浪費(fèi)!所以,“三次握手”很有必要!
為什么要四次揮手?
試想一下,假如現(xiàn)在你是客戶端你想斷開跟Server的所有連接該怎么做?第一步,你自己先停止向Server端發(fā)送數(shù)據(jù),并等待Server的回復(fù)。但事情還沒有完,雖然你自身不往Server發(fā)送數(shù)據(jù)了,但是因?yàn)槟銈冎耙呀?jīng)建立好平等的連接了,所以此時(shí)他也有主動(dòng)權(quán)向你發(fā)送數(shù)據(jù);故Server端還得終止主動(dòng)向你發(fā)送數(shù)據(jù),并等待你的確認(rèn)。其實(shí),說白了就是保證雙方的一個(gè)合約的完整執(zhí)行!
使用TCP的協(xié)議:FTP(文件傳輸協(xié)議)、Telnet(遠(yuǎn)程登錄協(xié)議)、SMTP(簡(jiǎn)單郵件傳輸協(xié)議)、POP3(和SMTP相對(duì),用于接收郵件)、HTTP協(xié)議等。