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