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