國內(nèi)最新疫情福州seo服務(wù)
目錄
學(xué)前必會(huì)
三次握手詳解
和打電話一樣
為什么必須要三次?
四次揮手詳解
和掛電話一樣
為什么要四次揮手?
第四次為何要等待 2*MSL?
相關(guān)面試題:
- 說一下三次握手、四次揮手的過程
- 三次握手四次揮手的目的是什么?
- 為什么要三次握手?兩次不行嗎?
- 為什么揮手要四次?
- 每次的狀態(tài)是什么樣的?
學(xué)前必會(huì)
三次握手四次揮手的作用
在TCP/IP模型中,我們都知道在傳輸層的TCP協(xié)議是面向連接的能保證可靠的數(shù)據(jù)傳輸,而學(xué)習(xí)三次握手、四次揮手其實(shí)就是學(xué)習(xí)TCP協(xié)議的連接斷開過程!
三次握手四次揮手需要標(biāo)志位
而學(xué)習(xí)三次握手四次揮手,我們需要用到的有標(biāo)志位的幾個(gè)內(nèi)容
- ACK:acknowledgement 確認(rèn)報(bào)文
- seq:sequence 順序
- SYN:synchronous 建立聯(lián)機(jī)
- FIN:finish 結(jié)束
三次握手詳解
三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數(shù)據(jù)的發(fā)送與接收,而三次握手最主要的目的就是雙方確認(rèn)自己與對方的發(fā)送與接收是正常的。
第一次:客戶端發(fā)送一個(gè)帶有SYN( sql=x )標(biāo)志的數(shù)據(jù)包給服務(wù)端,客戶端狀態(tài)變?yōu)閟yn_sent狀態(tài)。
第二次:服務(wù)端接收成功后,回傳一個(gè)帶有SYN(sql=y)/ACK(sql=x+1)標(biāo)志的數(shù)據(jù)包傳遞確認(rèn)信息。其中syn代表詢問你能否收到我的信息,ack應(yīng)答我收到了你的信息。
第三次:客戶端再回傳一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包,表示我知道了,握手結(jié)束。
和打電話一樣
三次詢問可以確定我們都能說話,且都能聽到對方說話。
其實(shí)三次握手就是確定客戶端和服務(wù)區(qū)能收能發(fā)的過程。
為什么必須要三次?
從打電話那個(gè)圖我們也可以很好理解
三次握手就能確認(rèn)雙方收發(fā)功能都正常,缺一不可。
若缺少第三次握手,服務(wù)器是無法確定自己可以發(fā)送信息的,而四次又沒有必要,所以三次剛好,即能完成任務(wù)又不浪費(fèi)資源~
四次揮手詳解
揮手其實(shí)就是斷開連接的過程!
第一次揮手:客戶端發(fā)送一個(gè)FIN(seq=x)的數(shù)據(jù)包給服務(wù)器,告訴對方我發(fā)完了,自己進(jìn)入FIN-WAIT-1狀態(tài)。
第二次揮手:服務(wù)區(qū)收到后,發(fā)送一個(gè)ACK(ack=x+1)的數(shù)據(jù)包給客戶端,然后服務(wù)器變?yōu)镃LOSE-WAIT狀態(tài),客戶端收到后進(jìn)入FIN-WAIT-2狀態(tài)。
第三次揮手:服務(wù)器發(fā)送一個(gè)FIN(seq=y)的數(shù)據(jù)包給客戶端,服務(wù)器變?yōu)長AST-ACK狀態(tài)。
第四次揮手:客戶端收到服務(wù)器的FIN后,返回給服務(wù)器一個(gè)ACK(seq=y+1)的數(shù)據(jù)包,客戶端進(jìn)入TIME-WAIT狀態(tài),服務(wù)器收到ACK后進(jìn)入CLOSE狀態(tài)。如果客戶端等到2msl后依舊沒有收到信息則默認(rèn)服務(wù)器已正常關(guān)閉,然后自己也進(jìn)入關(guān)閉狀態(tài)。
和掛電話一樣
為什么要四次揮手?
TCP 是全雙工通信,可以雙向傳輸數(shù)據(jù)。
任何一方都可以在數(shù)據(jù)傳送結(jié)束后發(fā)出連接釋放的通知,待對方確認(rèn)后進(jìn)入半關(guān)閉狀態(tài)。
當(dāng)另一方也沒有數(shù)據(jù)再發(fā)送的時(shí)候,則發(fā)出連接釋放通知,對方確認(rèn)后就完全關(guān)閉了 TCP 連接。
和三次握手一樣,但是揮手多了一次就是因?yàn)?中間可能還有信息沒有發(fā)完,所以第二次和第三次的ACK和FIN不能合并發(fā)送!沒有發(fā)完的信息在這兩次回收之前發(fā)完!
這就好像打電話時(shí)候的 "你等我把話說完" "巴拉巴拉巴拉~~" "好了,掛了吧"
第四次為何要等待 2*MSL?
第四次揮手時(shí),客戶端發(fā)送給服務(wù)器的 ACK 有可能丟失,如果服務(wù)端因?yàn)槟承┰蚨鴽]有收到 ACK 的話,服務(wù)端就會(huì)重發(fā) FIN,如果客戶端在 2*MSL 的時(shí)間內(nèi)收到了 FIN,就會(huì)重新發(fā)送 ACK 并再次等待 2MSL,防止 Server 沒有收到 ACK 而不斷重發(fā) FIN。