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