TCP連接的三次握手和連接關閉的四次揮手

TCP連接的三次握手和連接關閉的四次揮手

    一、文章大綱圖

    二、建立TCP連接三次握手過程

  1. 第一次握手,由客戶端發送syn報文給服務器端。
  2. 第二次握手,服務器端返回ack(確認)+syn報文給客戶端。
  3. 第三次握手,客戶端發送ack(確認)報文確認。

    三、TCP連接關閉四次揮手過程

  1. 第一次揮手,由客戶端發送FIN報文(Finish)給服務器端。
  2. 第二次揮手,由服務器端發送ack確認,表示收到報文。
  3. 第三次揮手,由服務器端發送未傳送完的Data報文後,將FIN報文給客戶端。
  4. 第四次揮手,由客戶端發送ack報文,表示收到報文。
  5. 在等待最長報文存在時間後,客戶端纔會變爲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支持一對一、一對多、多對一和多對多的交互通信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章