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