TCP連接的三次握手和連接關閉的四次揮手
一、文章大綱圖
二、建立TCP連接三次握手過程
- 第一次握手,由客戶端發送syn報文給服務器端。
- 第二次握手,服務器端返回ack(確認)+syn報文給客戶端。
- 第三次握手,客戶端發送ack(確認)報文確認。
三、TCP連接關閉四次揮手過程
- 第一次揮手,由客戶端發送FIN報文(Finish)給服務器端。
- 第二次揮手,由服務器端發送ack確認,表示收到報文。
- 第三次揮手,由服務器端發送未傳送完的Data報文後,將FIN報文給客戶端。
- 第四次揮手,由客戶端發送ack報文,表示收到報文。
- 在等待最長報文存在時間後,客戶端纔會變爲CLOSED狀態。
四、關於TCP連接的部分問題
1、爲啥需要三次握手才能連接,兩次不行麼?
設想一種情況,當客戶端發出syn報文後,syn報文由於各種各樣的原因延遲到達服務器端,這便是一個失效的報文,這時,服務器端以爲客戶端請求連接,便發送確認報文,由於兩次握手,兩者便建立連接。但是此時的客戶端並沒有發起連接請求,便不會理會服務器端發出的確認報文,也不傳送任何數據,於是服務器端的資源就會白白浪費。
2、爲啥要四次揮手才能斷開連接?
在收到客戶端發出的FIN報文之後,服務器端有可能無法馬上的關閉連接,但是會先發送一個ACK報文表示確認收到了FIN報文,只有當所有的數據傳輸完了,纔會發送FIN報文,所以FIN報文和ACK報文無法一起發送給客戶端。
3、爲什麼在報文全部發送完畢還需要等待一段時間才能讓客戶端進入CLOSED狀態?
因爲防止發出的ACK報文,服務器端未能收到,最後超時重發了FIN和ACK報文,這段時間以內,客戶端便可以接收到重發的報文,並重新發出ACK報文,再重置計時器。
五、TCP和UDP的區別
1、TCP提供的是面向連接的、可靠的數據流傳輸;
2、UDP提供的是非面向連接的、不可靠的數據流傳輸。
3、TCP提供可靠的服務,通過TCP連接傳送的數據,無差錯、不丟失,不重複,按序到達;UDP盡最大努力交付,即不保證可靠交付。
4、TCP面向字節流;
5、UDP面向報文。
6、TCP連接只能是點到點的;
7、UDP支持一對一、一對多、多對一和多對多的交互通信。