TCP Listen backlog

水平有限嫉沽,如有紕漏呀潭,敬請(qǐng)指正昔逗!

TCP有限狀態(tài)機(jī)

TCP服務(wù)

創(chuàng)建TCP服務(wù)的四個(gè)基本步驟:

  1. socket – 創(chuàng)建socket套接字降传。
  2. bind – 綁定要監(jiān)聽(tīng)的IP地址。
  3. listen – 開(kāi)始監(jiān)聽(tīng)客戶端連接請(qǐng)求勾怒。
  4. accept – 獲取TCP握手成功的連接婆排。

其中,第3步控硼,開(kāi)始監(jiān)聽(tīng)客戶端的連接請(qǐng)求時(shí)泽论,需要指定一個(gè)backlog的參數(shù):

int listen(int sockfd, int backlog);

這個(gè)backlog參數(shù)有什么作用呢艾少?不同的操作系統(tǒng)可能有不同的意義卡乾,本文只討論backlog參數(shù)在Linux環(huán)境下的作用

TCP連接

建立TCP連接有一個(gè)“三次握手”的過(guò)程:

  1. 客戶端向服務(wù)端發(fā)起連接請(qǐng)求缚够,發(fā)送SYN包幔妨。
  2. 服務(wù)端收到客戶端的SYN包后向客戶端響應(yīng)ACK+SYN包,同時(shí)在內(nèi)存中建立一個(gè)狀態(tài)為SYN-RECEIVED的連接谍椅,將連接放進(jìn)incomplete connection queue误堡。
  3. 客戶端收到服務(wù)端的回包后,向服務(wù)發(fā)送ACK包雏吭。服務(wù)端收到ACK后锁施,TCP連接進(jìn)入ESTABLISHED狀態(tài),將連接放進(jìn)complete connection queue杖们,等待應(yīng)用程序進(jìn)行accept悉抵。
  • 在Linux內(nèi)核中,步驟2的未完成TCP連接由一個(gè)incomplete connection queue維護(hù)摘完,其最大長(zhǎng)度為/proc/sys/net/ipv4/tcp_max_syn_backlog姥饰。
  • 步驟3的已完成TCP連接由一個(gè)complete connection queue維護(hù),其最大長(zhǎng)度為listen函數(shù)的參數(shù)backlog孝治。
  • 畫(huà)個(gè)簡(jiǎn)圖列粪,總結(jié)一下上面的內(nèi)容:
TCP握手連接小結(jié)

當(dāng)隊(duì)列滿了……

SYN cookie

SYN cookie是一種用于對(duì)抗SYN flood攻擊的技術(shù)审磁,可以避免在incomplete connection queue被填滿時(shí)無(wú)法建立新的TCP連接。對(duì)于使用SYN Cookie的服務(wù)來(lái)說(shuō)岂座, 當(dāng)incomplete connection queue被填滿時(shí)态蒂,服務(wù)器會(huì)表現(xiàn)得像SYN隊(duì)列擴(kuò)大了一樣。對(duì)于隊(duì)列填滿后的新TCP連接费什,服務(wù)器會(huì)返回適當(dāng)?shù)腟YN+ACK響應(yīng)包吃媒,但會(huì)丟棄對(duì)應(yīng)的SYN隊(duì)列條目(因?yàn)殛?duì)列已經(jīng)滿了)。如果服務(wù)器收到客戶端隨后的ACK響應(yīng)吕喘,服務(wù)器能夠使用編碼在 TCP 序號(hào)內(nèi)的信息重構(gòu) SYN 隊(duì)列條目赘那。

incomplete connection queue

  • 關(guān)閉syncookies(net.ipv4.tcp_syncookies = 0):當(dāng)隊(duì)列滿時(shí),不在接受新的連接氯质。
  • 開(kāi)啟syncookies(net.ipv4.tcp_syncookies = 1):當(dāng)隊(duì)列滿時(shí)募舟,不受影響。

complete connection queue

當(dāng)complete connection queue滿了闻察,已經(jīng)完成三次握手的TCP連接該怎么辦拱礁?

內(nèi)核收到客戶端的ACK包后,會(huì)執(zhí)行函數(shù)tcp_check_req辕漂,進(jìn)行一些檢查后呢灶,準(zhǔn)備把TCP連接放到complete connection queue中:

child = inet_csk(sk)->icsk_af_ops->syn_recv_sock(sk, skb, req, NULL, req, &own_req);
if (!child)
  goto listen_overflow;

對(duì)于ipv4來(lái)說(shuō),執(zhí)行的是函數(shù)tcp_v4_syn_recv_sock

if (sk_acceptq_is_full(sk))
    goto exit_overflow;

exit_overflow處的代碼會(huì)進(jìn)行一些清理工作钉嘹,然后返回NULL鸯乃,最后執(zhí)行l(wèi)isten_overflow處的代碼:

listen_overflow:
    if (!sysctl_tcp_abort_on_overflow) {
        inet_rsk(req)->acked = 1;
        return NULL;
    }
  • 當(dāng)sysctl_tcp_abort_on_overflow為0時(shí),Linux內(nèi)核只丟棄客戶端的ACK包跋涣,然后“什么都不做”缨睡。
  • 當(dāng)sysctl_tcp_abort_on_overflow非0時(shí),Linux內(nèi)核會(huì)返回RST包陈辱,reset TCP連接奖年。
  • sysctl_tcp_abort_on_overflow對(duì)應(yīng)的設(shè)置是/proc/sys/net/ipv4/tcp_abort_on_overflow

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沛贪,一起剝皮案震驚了整個(gè)濱河市陋守,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌利赋,老刑警劉巖水评,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隐砸,居然都是意外死亡之碗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門季希,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)褪那,“玉大人幽纷,你說(shuō)我怎么就攤上這事〔┚矗” “怎么了友浸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)偏窝。 經(jīng)常有香客問(wèn)我收恢,道長(zhǎng),這世上最難降的妖魔是什么祭往? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任伦意,我火速辦了婚禮,結(jié)果婚禮上硼补,老公的妹妹穿的比我還像新娘驮肉。我一直安慰自己,他們只是感情好已骇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布离钝。 她就那樣靜靜地躺著,像睡著了一般褪储。 火紅的嫁衣襯著肌膚如雪卵渴。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天鲤竹,我揣著相機(jī)與錄音浪读,去河邊找鬼。 笑死宛裕,一個(gè)胖子當(dāng)著我的面吹牛瑟啃,可吹牛的內(nèi)容都是我干的论泛。 我是一名探鬼主播揩尸,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屁奏!你這毒婦竟也來(lái)了岩榆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坟瓢,失蹤者是張志新(化名)和其女友劉穎勇边,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體折联,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粒褒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诚镰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奕坟。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祥款,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出月杉,到底是詐尸還是另有隱情刃跛,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布苛萎,位于F島的核電站桨昙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腌歉。R本人自食惡果不足惜蛙酪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翘盖。 院中可真熱鬧滤否,春花似錦、人聲如沸最仑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泥彤。三九已至欲芹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吟吝,已是汗流浹背菱父。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剑逃,地道東北人浙宜。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蛹磺,于是被迫代替她去往敵國(guó)和親粟瞬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1萤捆、TCP狀態(tài)linux查看tcp的狀態(tài)命令:1)裙品、netstat -nat 查看TCP各個(gè)狀態(tài)的數(shù)量2)、lso...
    北辰青閱讀 9,410評(píng)論 0 11
  • 預(yù)備知識(shí) TCP 頭格式 截圖來(lái)源 TCP的包是沒(méi)有IP地址的俗或,那是IP層上的事市怎。但是有源端口和目標(biāo)端口。一個(gè)TC...
    vedon_fu閱讀 790評(píng)論 0 2
  • 18.1 引言 TCP是一個(gè)面向連接的協(xié)議辛慰。無(wú)論哪一方向另一方發(fā)送數(shù)據(jù)之前区匠,都必須先在雙方之間建立一條連接。本章將...
    張芳濤閱讀 3,347評(píng)論 0 13
  • 轉(zhuǎn)載:關(guān)于TCP 半連接隊(duì)列和全連接隊(duì)列 最近碰到一個(gè)client端連接異常問(wèn)題帅腌,然后定位分析并查閱各種資料文章驰弄,...
    meng_philip123閱讀 990評(píng)論 0 23
  • 2014揩懒,1月什乙。距離高考還有5個(gè)多月,我在緊張的備考當(dāng)中已球,漫天飛舞的試卷臣镣,老師苦口婆心的叮嚀囑咐卻依舊沒(méi)能抵擋得過(guò)...
    咚_閱讀 328評(píng)論 0 0