久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

通訊系統(tǒng)經(jīng)驗(yàn)談【一】TCP連接狀態(tài)分析:SYNC

 WindySky 2016-05-24

面試時看到應(yīng)聘者簡歷中寫精通網(wǎng)絡(luò),,TCP編程,,我常問一個問題,TCP建立連接需要幾次握手,?95%以上的應(yīng)聘者都能答對是3次,。問TCP斷開連接需要幾次握手,70%的應(yīng)聘者能答對是4次通訊,。再問CLOSE_WAIT,,TIME_WAIT是什么狀態(tài),怎么產(chǎn)生的,對服務(wù)有什么影響,,如何消除,?有一部分同學(xué)就回答不上來。不是我扣細(xì)節(jié),,而是在通訊為主的前端服務(wù)器上,,必須有能力處理各種TCP狀態(tài)。比如統(tǒng)計(jì)在本廠的一臺前端機(jī)上高峰時間TCP連接的情況,,統(tǒng)計(jì)命令:

 

 

Linux shell代碼  收藏代碼
  1. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  
 

 

結(jié)果:

 

除了ESTABLISHED,,可以看到連接數(shù)比較多的幾個狀態(tài)是:FIN_WAIT1, TIME_WAIT, CLOSE_WAIT, SYN_RECV和LAST_ACK;下面的文章就這幾個狀態(tài)的產(chǎn)生條件,、對系統(tǒng)的影響以及處理方式進(jìn)行簡單描述,。

 

TCP狀態(tài)

TCP狀態(tài)如下圖所示:

可能有點(diǎn)眼花繚亂?再看看這個時序圖


 

下面看下大家一般比較關(guān)心的三種TCP狀態(tài)

SYN_RECV 

服務(wù)端收到建立連接的SYN沒有收到ACK包的時候處在SYN_RECV狀態(tài),。有兩個相關(guān)系統(tǒng)配置:

 

1,,net.ipv4.tcp_synack_retries :INTEGER

默認(rèn)值是5

對于遠(yuǎn)端的連接請求SYN,內(nèi)核會發(fā)送SYN + ACK數(shù)據(jù)報,,以確認(rèn)收到上一個 SYN連接請求包,。這是所謂的三次握手( threeway handshake)機(jī)制的第二個步驟。這里決定內(nèi)核在放棄連接之前所送出的 SYN+ACK 數(shù)目,。不應(yīng)該大于255,,默認(rèn)值是5,對應(yīng)于180秒左右時間,。通常我們不對這個值進(jìn)行修改,,因?yàn)槲覀兿M鸗CP連接不要因?yàn)榕紶柕膩G包而無法建立。

2,,net.ipv4.tcp_syncookies

一般服務(wù)器都會設(shè)置net.ipv4.tcp_syncookies=1來防止SYN Flood攻擊,。假設(shè)一個用戶向服務(wù)器發(fā)送了SYN報文后突然死機(jī)或掉線,那么服務(wù)器在發(fā)出SYN+ACK應(yīng)答報文后是無法收到客戶端的ACK報文的(第三次握手無法完成),,這種情況下服務(wù)器端一般會重試(再次發(fā)送SYN+ACK給客戶端)并等待一段時間后丟棄這個未完成的連接,,這段時間的長度我們稱為SYN Timeout,一般來說這個時間是分鐘的數(shù)量級(大約為30秒-2分鐘),。

 

這些處在SYNC_RECV的TCP連接稱為半連接,,并存儲在內(nèi)核的半連接隊(duì)列中,在內(nèi)核收到對端發(fā)送的ack包時會查找半連接隊(duì)列,,并將符合的requst_sock信息存儲到完成三次握手的連接的隊(duì)列中,,然后刪除此半連接。大量SYNC_RECV的TCP連接會導(dǎo)致半連接隊(duì)列溢出,,這樣后續(xù)的連接建立請求會被內(nèi)核直接丟棄,,這就是SYN Flood攻擊,。

 

能夠有效防范SYN Flood攻擊的手段之一,就是SYN Cookie,。SYN Cookie原理由D. J. Bernstain和 Eric Schenk發(fā)明,。SYN Cookie是對TCP服務(wù)器端的三次握手協(xié)議作一些修改,專門用來防范SYN Flood攻擊的一種手段,。它的原理是,,在TCP服務(wù)器收到TCP SYN包并返回TCP SYN+ACK包時,不分配一個專門的數(shù)據(jù)區(qū),,而是根據(jù)這個SYN包計(jì)算出一個cookie值。在收到TCP ACK包時,,TCP服務(wù)器在根據(jù)那個cookie值檢查這個TCP ACK包的合法性,。如果合法,再分配專門的數(shù)據(jù)區(qū)進(jìn)行處理未來的TCP連接,。

 

觀測服務(wù)上SYN_RECV連接個數(shù)為:7314,,對于一個高并發(fā)連接的通訊服務(wù)器,這個數(shù)字比較正常,。

CLOSE_WAIT

發(fā)起TCP連接關(guān)閉的一方稱為client,,被動關(guān)閉的一方稱為server。被動關(guān)閉的server收到FIN后,,但未發(fā)出ACK的TCP狀態(tài)是CLOSE_WAIT,。出現(xiàn)這種狀況一般都是由于server端代碼的問題,如果你的服務(wù)器上出現(xiàn)大量CLOSE_WAIT,,應(yīng)該要考慮檢查代碼,。

TIME_WAIT

根據(jù)TCP協(xié)議定義的3次握手?jǐn)嚅_連接規(guī)定,發(fā)起socket主動關(guān)閉的一方 socket將進(jìn)入TIME_WAIT狀態(tài)。TIME_WAIT狀態(tài)將持續(xù)2個MSL(Max Segment Lifetime),在Windows下默認(rèn)為4分鐘,,即240秒,。TIME_WAIT狀態(tài)下的socket不能被回收使用. 具體現(xiàn)象是對于一個處理大量短連接的服務(wù)器,如果是由服務(wù)器主動關(guān)閉客戶端的連接,將導(dǎo)致服務(wù)器端存在大量的處于TIME_WAIT狀態(tài)的socket,, 甚至比處于Established狀態(tài)下的socket多的多,嚴(yán)重影響服務(wù)器的處理能力,,甚至耗盡可用的socket,停止服務(wù),。

 

為什么需要TIME_WAIT,?TIME_WAIT是TCP協(xié)議用以保證被重新分配的socket不會受到之前殘留的延遲重發(fā)報文影響的機(jī)制,是必要的邏輯保證。

 

和TIME_WAIT狀態(tài)有關(guān)的系統(tǒng)參數(shù)有一般由3個,,本廠設(shè)置如下:

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 30

 

net.ipv4.tcp_fin_timeout,,默認(rèn)60s,減小fin_timeout,,減少TIME_WAIT連接數(shù)量,。

 

net.ipv4.tcp_tw_reuse = 1表示開啟重用,。允許將TIME-WAIT sockets重新用于新的TCP連接,默認(rèn)為0,,表示關(guān)閉,;

net.ipv4.tcp_tw_recycle = 1表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認(rèn)為0,,表示關(guān)閉,。

 

下一篇:http://maoyidao./blog/1744309 “通訊系統(tǒng)經(jīng)驗(yàn)談【二】解讀內(nèi)核參數(shù) - socket/文件句柄資源限制參數(shù)”會向大家介紹本廠網(wǎng)絡(luò)相關(guān)設(shè)置中的其他選項(xiàng),特別是系統(tǒng)資源限制相關(guān)的內(nèi)核配置,。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多