1. TFO
為了改善web應用相應時延,google發布了通過修改TCP協議利用三次握手時進行數據交換的TFO(TCP fast open,RFC 7413)。
TFO允許在TCP握手期間發送和接收初始SYN分組中的數據。如果客戶端和服務器都支持TFO功能,則可以減少建立到同一服務器的多個TCP連接的延遲。這是通過在初始TCP握手之后在客戶端上存儲TFO cookie來實現的。如果客戶端稍后重新連接,則此TFO cookie將發送到服務器,從而允許連續的TCP握手跳過一個往返延遲,從而減少延遲。
2. TFO原理
第一次連接:
- 客戶端發送SYN數據包,帶有Fast open選項并且里面的cookie值是空的
- 客戶端收到SYN,以后生成Cookie,并且放進ACK+SYN包的fast Open選項里面,發回給客戶端
- 客戶端收到cookie以后就存起來了、
第一次連接斷開了,開始第二次連接了:
-
客戶端發ACK給服務器的時候,把剛剛緩存的cookie也帶上,并且把數據也帶上了
-
服務器校驗收到的cookie合法性。如果不合法的話,就把當前的包丟掉,走正常的三次握手。如果合法的話,服務器就給客服端發ACK+SYN并且帶上數據包
-
客戶端發ACK確認給服務器
3. TFO的好處
以兩次建立連接和發送請求為例
第二次請求的時候,TFO可以將請求報文和響應報文,放在前面兩次握手的過程中,因此第二次請求中,可以在一個RTT內就能拿到響應數據了