上回,我們對TCP_CORK選項如何減少網絡傳輸包的數(shù)量做了一番原理性的解釋。減少網絡流量當然是非常重要的優(yōu)化舉措之一,不過這種手段也僅僅是實現(xiàn)高性能網絡數(shù)據(jù)傳輸領域的一個方面。其他TCP選項也可能顯著提供傳輸性能同時在某些條件下減少服務器的響應時間延遲。下面就讓我們來了解一些此類選項。
TCP_DEFER_ACCEPT
我們首先考慮的第1個選項是TCP_DEFER_ACCEPT(這是Linux系統(tǒng)上的叫法,其他一些操作系統(tǒng)上也有同樣的選項但使用不同的名字)。為了理解TCP_DEFER_ACCEPT選項的具體思想,我們有必要大致闡述一下典型的HTTP客戶/服務器交互過程。請回想下TCP是如何與傳輸數(shù)據(jù)的目標建立連接的。在網絡上,在分離的單元之間傳輸?shù)男畔⒎Q為IP包(或IP 數(shù)據(jù)報)。一個包總有一個攜帶服務信息的包頭,包頭用于內部協(xié)議的處理,并且它也可以攜帶數(shù)據(jù)負載。服務信息的典型例子就是一套所謂的標志,它把包標記代表TCP/IP協(xié)議棧內的特殊含義,例如收到包的成功確認等等。通常,在經過“標記”的包里攜帶負載是完全可能的,但有時,內部邏輯迫使TCP/IP協(xié)議棧發(fā)出只有包頭的IP包。這些包經常會引發(fā)討厭的網絡延遲而且還增加了系統(tǒng)的負載,結果導致網絡性能在整體上降低。
現(xiàn)在服務器創(chuàng)建了一個套接字同時等待連接。TCP/IP式的連接過程就是所謂“3次握手”。首先,客戶程序發(fā)送一個設置SYN標志而且不帶數(shù)據(jù)負載的TCP包(一個SYN包)。服務器則以發(fā)出帶SYN/ACK標志的數(shù)據(jù)包(一個SYN/ACK包)作為剛才收到包的確認響應?蛻綦S后發(fā)送一個ACK包確認收到了第2個包從而結束連接過程。在收到客戶發(fā)來的這個ACK包之后,服務器會喚醒一個接收進程等待數(shù)據(jù)到達。當3次握手完成后,客戶程序即開始把“有用的”的數(shù)據(jù)發(fā)送給服務器。通常,一個HTTP請求的量是很小的而且完全可以裝到一個包里。但是,在以上的情況下,至少有4個包將用來進行雙向傳輸,這樣就增加了可觀的延遲時間。此外,你還得注意到,在“有用的”數(shù)據(jù)被發(fā)送之前,接收方已經開始在等待信息了。
相關推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |