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