TCP/IP 三次握手和四次揮手

  • tcp/ip架構:OSI七層模型、TCP/IP四層模型、五層體系結構

  1. TCP協議是面向連接、可靠的協議,效率低(字節流)
  2. UDP協議是面向無連接不可靠的協議,效率高(報文)
  • TCP三次握手(確保傳輸可靠)

  • 三次握手操作
  1. 客戶端先發送一個建立連接的報文給服務端(SYN=1,seq=x(隨機序號))
  2. 服務端收到請求後,向客戶端回傳消息(SYN=1,seq=y,ACK=1,ack=x+1)
  3. 客戶端收到應答後,最後通知服務端(ACK=1,ack=y+1此時建立連接成功
  • 爲什麼不是兩次握手
  1. 第三次握手是讓客戶端確認服務端返回的響應是否是正確,如果不正確則不建立連接
  2. 如果在第二次握手的時候就建立了連接,不能避免因爲網絡延遲造成不必要的服務器開銷,每次過來消息都會建立一個新的連接
  • 四次揮手

  1. 客戶端發送一個斷開連接的報文給服務端(FIN=1,seq=x(增長序號))
  2. 服務端收到請求後,可能手頭還有數據沒處理完,所以先回復確認消息給客戶端(ACK=1,ack=x+1)
  3. 服務端處理完數據後,通知客戶端斷開連接(FIN=1,seq=y)此時服務端停止發送數據,保持接收
  4. 客戶端收到響應後通知服務端(ACK=1,ack=y+1)客戶端等待2MSL後關閉,此時斷開連接
  • 爲什麼不是三次揮手?

釋放連接時,服務端是很被動的,突然接到客戶端釋放連接的請求不能立馬釋放,而是先返回確
認報文,等數據處理完再返回釋放連接的響應,對比三次握手,服務器在響應時多了一步操作

  • 爲什麼要等待2MSL?
MSL是一段TCP報文在傳輸過程中的最大生存期,服務器端在1MSL內沒有收到客戶端發出的確認報文會再次向客戶端發出同意關閉請求
客戶端等待2MSL再關閉,在此期間沒有收到服務端的請求,說明服務端已經正常關閉
 
  1. 應用數據被分割成TCP認爲最適合發送的數據塊。
  2. 超時重傳:當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
  3. TCP給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。
  4. 校驗和:TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。
  5. TCP的接收端會丟棄重複的數據。
  6. 流量控制:TCP連接的每一方都有固定大小的緩衝空間,TCP的接收端只允許發送端發送接收端緩衝區能接納的我數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP使用的流量控制協議是可變大小的滑動窗口協議。
  7. 擁塞控制:當網絡擁塞時,減少數據的發送。

參考於:https://frank-lam.github.io/fullstack-tutorial/#/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C?id=%ef%bc%886%ef%bc%89%e5%a6%82%e4%bd%95%e4%bf%9d%e8%af%81%e5%8f%af%e9%9d%a0%e4%bc%a0%e8%be%93

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