HTTP事務的時延

MSL是Maximum Segment Lifetime英文的縮寫,中文能夠譯爲「報文最大生存時間」,他是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。
MSS:最大報文段長度算法

TCP鏈接的握手時延

  1. tcp創建須要時間
  2. 一般HTTP事務都不會交換太多數據,此時,SYN/SYN+ACK握手(參見上圖-8a和上圖-8b)會產生一個可測量的時延。TCP鏈接的ACK分組(參見上圖-8c)一般都足夠大,能夠承載整個HTTP請求報文,並且不少HTTP服務器響應報文均可以放入一個IP分組中去(好比,響應是包含了裝飾性圖片的小型HTML文件,或者是對瀏覽器高速緩存請求產生的304 Not Modified響應)。
  3. 最後的結果是,小的HTTP事務可能會在TCP創建上花費50%,或更多的時間

延遲確認

因爲因特網自身沒法確保可靠的分組傳輸(因特網路由器超負荷的話,能夠隨意丟棄分組),因此TCP實現了本身的確認機制來確保數據的成功傳輸。每一個TCP段都有一個序列號和數據完整性校驗和。每一個段的接收者收到無缺的段時,都會向發送者回送小的確認分組。
若是發送者沒有在指定的窗口時間內收到確認信息,發送者就認爲分組已被破壞或損毀,並重發數據。因爲確認報文很小,因此TCP容許在發往相同方向的輸出數據分組中對其進行「捎帶」。TCP將返回的確認信息與輸出的數據分組結合在一塊兒,能夠更有效地利用網絡。爲了增長確認報文找到同向傳輸數據分組的可能性,不少TCP棧都實現了一種「延遲確認」算法。延遲確認算法會在一個特定的窗口時間(一般是100~200毫秒)內將輸出確認存放在緩衝區中,以尋找可以捎帶它的輸出數據分組。若是在那個時間段內沒有輸出數據分組,就將確認信息放在單獨的分組中傳送。瀏覽器

TCP慢啓動

TCP數據傳輸的性能還取決於TCP鏈接的使用期(age)。TCP鏈接會隨着時間進行自我「調諧」,起初會限制鏈接的最大速度,若是數據成功傳輸,會隨着時間的推移提升傳輸的速度。這種調諧被稱爲TCP慢啓動(slow start),用於防止因特網的忽然過載和擁塞。
TCP慢啓動限制了一個TCP端點在任意時刻能夠傳輸的分組數。簡單來講,每成功接收一個分組,發送端就有了發送另外兩個分組的權限。若是某個HTTP事務有大量數據要發送,是不能一次將全部分組都發送出去的。必須發送一個分組,等待確認;而後能夠發送兩個分組,每一個分組都必須被確認,這樣就能夠發送四個分組了,以此類推。這種方式被稱爲「打開擁塞窗口」。緩存

Nagle算法

Nagle算法鼓勵發送全尺寸(mss)(LAN上最大尺寸的分組大約是1500字節,在因特網上是幾百字節)的段。服務器

if there is new data to send #有數據要發送
        # 發送窗口緩衝區和隊列數據 >=mss,隊列數據(available data)爲原有的隊列數據加上新到來的數據
        # 也就是說緩衝區數據超過mss大小,nagle算法儘量發送足夠大的數據包
        if the window size >= MSS and available data is >= MSS 
            send complete MSS segment now # 當即發送
        else
            if there is unconfirmed data still in the pipe # 前一次發送的包沒有收到ack
                # 將該包數據放入隊列中,直到收到一個ack再發送緩衝區數據
                enqueue data in the buffer until an acknowledge is received 
            else
                send data immediately # 當即發送
            end if
        end if
    end if 

Nagle算法的規則
(1)若是包長度達到MSS,則容許發送;
(2)若是該包含有FIN(關閉鏈接標識),則容許發送;
(3)設置了TCP_NODELAY選項,則容許發送;默認狀況下,發送數據採用Nagle 算法。這樣雖然提升了網絡吞吐量,可是實時性卻下降了,在一些交互性很強的應用程序來講是不容許的,使用TCP_NODELAY選項能夠禁止Nagle 算法。
(4)以前發生的包都已經確認了,則容許發送;
(5)上述條件都未知足,但發生了超時(通常爲200ms),則當即發送。網絡

TIME_WAIT累積與端口耗盡

當某個TCP端點關閉TCP鏈接時,會在內存中維護一個小的控制塊,用來記錄最近所關閉鏈接的IP地址和端口號。這類信息只會維持一小段時間,一般是所估計的最大分段使用期的兩倍(稱爲2MSL,一般爲2分鐘左右,以確保在這段時間內不會建立具備相同地址和端口號的新鏈接。實際上,這個算法能夠防止在兩分鐘內建立、關閉並從新建立兩個具備相同IP地址和端口號的鏈接。tcp

但因爲可用源端口的數量有限(好比,60000個),並且在2MSL秒(好比,120秒)內鏈接是沒法重用的,鏈接率就被限制在了60000/120=500次/秒性能

相關文章
相關標籤/搜索