TCP鏈接的握手

(一)三次握手git

創建一條新的TCP鏈接時,是指是在發送任意數據以前,TCP鏈接之間交換一些的IP分組,對鏈接的有關參數進行溝通(以下圖),若是鏈接只用來傳送少許數據,這些交換就會嚴重下降HTTP的性能。github

TCP鏈接握手須要通過如下幾個步驟。服務器

(1) 請求新的TCP鏈接時,客戶端要向服務端發送一個曉得TCP分組(一般是40-60個字節)。這個分組中設置了一個特殊的SYN標記,說明這是一個鏈接請求tcp

(2)若是服務器接受了鏈接,就會對一些鏈接參數進行計算,並向客戶端回送一個TCP分組,這個分組中的SYN和ACK標記都被置位,說明鏈接已被接受。性能

(3)最後,客戶端想服務器會送一條確認信息,通知它鏈接已成功創建。現代的TCP棧都容許客戶端在這個確認分組中發送數據。blog

位碼即tcp標誌位,有6種標示:SYN(synchronous創建聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)
Sequence number(順序號碼) Acknowledge number(確認號碼)路由

(二)確保消息可靠性it

因爲因特網自身沒法確保可靠的分組傳輸(因特網路由器超負荷的話,能夠隨意丟地分組),因此TCP實現了本身的確認機制來確保數據的成功傳輸。路由器

每個TCP段都有一個序列號和數據完整性校驗和。每一個段的接收者收到無缺的段時,都會向發送者回送小的確認分組,若是發送者沒有在指定的窗口時間內收到確認信息,發送者就認爲分組已被破壞或者損毀,並從新發送數據。請求

參考:https://github.com/jawil/blog/issues/14

        《HTTP權威指南》

相關文章
相關標籤/搜索