1、三次握手
三次握手是建立連接的過程
如圖大致為三次握手的流程圖:
當客戶端對服務(wù)端發(fā)起連接時,會先發(fā)一個包連接請求數(shù)據(jù),去詢問能否建立連接,該數(shù)據(jù)包稱為 “SYN”包
然后,如果對方同意連接,那么對方將會回復一個 “SYN+ACK”包
客戶端收到后,回復一個 “ACK”包,連接就建立了
因為該過程中,互相發(fā)送了三包數(shù)據(jù),所以稱為 “三次握手”
但是為什么是 “三次握手” , 而不是 “兩次握手”,明明服務(wù)端回復完 “SYN+ACK”包后就能建立連接
這是為了防止已失效的請求報文,忽然又傳到服務(wù)器,從而引起錯誤
比如:
當發(fā)送請求包時,因為某些原因,該包并沒有到達服務(wù)器,在某個節(jié)點產(chǎn)生了滯留,然而客戶端為了建立連接會重新發(fā)送 “SYN”包,正常送達后回復 “SYN+ACK”包建立連接,但是,第一個包滯留的包突然恢復,又送達到服務(wù)端,這時服務(wù)端會誤以為客戶端又發(fā)送了一個連接請求,這時,服務(wù)端認為是兩個連接,二客戶端認為只有一個連接,造成了狀態(tài)不一致。
如果在 “三次握手”的情況下
客戶端沒有回復 “ACK”包,就無法建立連接,解決了網(wǎng)絡(luò)信道不可靠的問題
2、四次揮手
四次揮手大致流程圖
第一次揮手
客戶端向服務(wù)端發(fā)送 “FIN”包,表示要關(guān)閉連接,自己則進入終止等待1狀態(tài),這是第一次揮手,如圖
第二次揮手
服務(wù)端接收到 “FIN”包 ,回復一個 “ACK”包 ,表示自己進入關(guān)閉等待狀態(tài),而客戶端同時進入終止等待2狀態(tài),這是第二次揮手,如圖
PS:服務(wù)端此時還可以發(fā)送未發(fā)送的數(shù)據(jù),而客戶端也還可以接收數(shù)據(jù)
第三次揮手
待服務(wù)端發(fā)送完數(shù)據(jù)后,會發(fā)送一個 “FIN”包,進入最后確認狀態(tài),這是第三次揮手
第四次揮手
客戶端收到后,回復 “ACK”包,進入超時等待狀態(tài),經(jīng)過超時時間后關(guān)閉連接,而服務(wù)端收到 “ACK”包后立即關(guān)閉連接
為什么客戶端需要 “等待超時時間”
這是為了保證 服務(wù)端已收到 “ACK”包,因為假設(shè)客戶端發(fā)送完 “ACK”包后就斷開連接,一旦 “ACK”包在網(wǎng)絡(luò)中丟失,服務(wù)端就一直停留在最后確認狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-698605.html
而有了 “等待超時時間”
服務(wù)端會因為沒有收到 “ACK”包,會對客戶端重新發(fā) “FIN”包,此時,客戶端會再對服務(wù)端發(fā)送 “ACK”包,并且刷新超時時間,這也是為了在不可靠的網(wǎng)絡(luò)連接中,可以可靠進行地連接斷開。文章來源地址http://www.zghlxwxcb.cn/news/detail-698605.html
到了這里,關(guān)于TCP的三次握手和四次揮手······詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!