(一)三次握手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權威指南》