什么是三次握手四次揮手?tcp為什么要三次握手?為了防止已失效的連接請(qǐng)求報(bào)文段突然又傳送到了服務(wù)端,因而產(chǎn)生錯(cuò)誤。
第一次握手:建立連接時(shí),客戶端發(fā)送 syn 包(syn=j)到服務(wù)器,并進(jìn)入 SYN_SEND 狀態(tài),等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到 syn 包,必須確認(rèn)客戶的 SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè) SYN包(syn=k),即 SYN+ACK 包,此時(shí)服務(wù)器進(jìn)入 SYN_RECV 狀態(tài);
第三次握手:客戶端收到服務(wù)器的 SYN+ACK 包,向服務(wù)器發(fā)送確認(rèn)包 ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入 ESTABLISHED 狀態(tài),完成三次握手。
完成三次握手:客戶端與服務(wù)器開始傳送數(shù)據(jù),客戶端先發(fā)送 FIN,進(jìn)入 FIN_WAIT1 狀態(tài),用來(lái)關(guān)閉 Client 到 Server 的數(shù)據(jù)傳送,服務(wù)端收到 FIN,發(fā)送 ACK,進(jìn)入 CLOSE_WAIT 狀態(tài),客戶端收到這個(gè) ACK,進(jìn)入 FIN_WAIT2狀態(tài)。
服務(wù)端發(fā)送 FIN,進(jìn)入 LAST_ACK 狀態(tài),用來(lái)關(guān)閉 Server 到 Client 的數(shù)據(jù)傳送,客戶端收到 FIN,發(fā)送 ACK,進(jìn)入 TIME_WAIT 狀態(tài),服務(wù)端收到 ACK,進(jìn)入 CLOSE 狀態(tài)(等待 2MSL 時(shí)間,約 4 分鐘。主要是防止最后一個(gè) ACK 丟失。)
第一次揮手:主動(dòng)關(guān)閉方發(fā)送一個(gè) FIN,用來(lái)關(guān)閉主動(dòng)方到被動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是主動(dòng)關(guān)閉方告訴被動(dòng)關(guān)閉方:我已經(jīng)不 會(huì)再給你發(fā)數(shù)據(jù)了(當(dāng)然,在 fin 包之前發(fā)送出去的數(shù)據(jù),如果沒有收到對(duì)應(yīng)的 ack 確認(rèn)報(bào)文,主動(dòng)關(guān)閉方依然會(huì)重發(fā)這些數(shù)據(jù)),但是,此時(shí)主動(dòng)關(guān)閉方還可以接受數(shù)據(jù)。
第二次揮手:被動(dòng)關(guān)閉方收到 FIN 包后,發(fā)送一個(gè) ACK 給對(duì)方,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN 相同,一個(gè) FIN 占用一個(gè)序號(hào))。
第三次揮手:被動(dòng)關(guān)閉方發(fā)送一個(gè) FIN,用來(lái)關(guān)閉被動(dòng)關(guān)閉方到主動(dòng)關(guān)閉方的數(shù)據(jù)傳送,也就是告訴主動(dòng)關(guān)閉方,我的數(shù)據(jù)也發(fā)送完了,不會(huì)再給你發(fā)數(shù)據(jù)了。
第四次揮手:主動(dòng)關(guān)閉方收到 FIN 后,發(fā)送一個(gè) ACK 給被動(dòng)關(guān)閉方,確認(rèn)序號(hào)為收到序號(hào)+1,至此,完成四次揮手。
更多關(guān)于“網(wǎng)絡(luò)安全培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽。