tcp工作原理
?
?
?
?
?
TCP 三次握手建立連接
?
TCP 建立連接全過程解釋
?
?
?
?
TCP 四次揮手釋放連接:
TCP 為什么要進行四次揮手?
1:TCP 為什么要進行四次揮手? / 為什么 TCP 建立連接需要三次,而釋放連接則需要四次?
答案:因為 TCP 是全雙工模式,客戶端請求關(guān)閉連接后,客戶端向服務(wù)端的連接關(guān)閉(一二次揮手),服務(wù)端繼續(xù)傳輸之前沒傳完的數(shù)據(jù)給客戶端(數(shù)據(jù)傳輸),服務(wù)端向客戶端的連接關(guān)閉(三四次揮手)。所以 TCP 釋放連接時服務(wù)器的 ACK 和 FIN 是分開發(fā)送的(中間隔著數(shù)據(jù)傳輸),而 TCP 建立連接時服務(wù)器的 ACK 和 SYN 是一起發(fā)送的(第二次握手),所以 TCP 建立連接需要三次,而釋放連接則需要四次。
2:為什么 TCP 連接時可以 ACK 和 SYN 一起發(fā)送,而釋放時則 ACK 和 FIN 分開發(fā)送呢?(ACK 和 FIN 分開是指第二次和第三次揮手)
答案:因為客戶端請求釋放時,服務(wù)器可能還有數(shù)據(jù)需要傳輸給客戶端,因此服務(wù)端要先響應(yīng)客戶端 FIN 請求(服務(wù)端發(fā)送 ACK),然后數(shù)據(jù)傳輸,傳輸完成后,服務(wù)端再提出 FIN 請求(服務(wù)端發(fā)送 FIN);而連接時則沒有中間的數(shù)據(jù)傳輸,因此連接時可以 ACK 和 SYN 一起發(fā)送。
3:為什么客戶端釋放最后需要 TIME-WAIT 等待 2MSL 呢?
答案:
1:為了保證客戶端發(fā)送的最后一個 ACK 報文能夠到達服務(wù)端。若未成功到達,則服務(wù)端超時重傳 FIN+ACK 報文段,客戶端再重傳 ACK,并重新計時。
2:防止已失效的連接請求報文段出現(xiàn)在本連接中。TIME-WAIT 持續(xù) 2MSL 可使本連接持續(xù)的時間內(nèi)所產(chǎn)生的所有報文段都從網(wǎng)絡(luò)中消失,這樣可使下次連接中不會出現(xiàn)舊的連接報文段。
socket編程流程:
?
總結(jié)
- 上一篇: CentOS 7 利用Docker搭建
- 下一篇: html5 java 图片上传_java