導航:首頁 > 操作系統 > Linuxtcp時間戳

Linuxtcp時間戳

發布時間:2022-08-16 13:38:00

① 一般優化linux的內核,需要優化什麼參數

方法只對擁有大量TIME_WAIT狀態的連接導致系統資源消耗有效,如果不是這種情況下,效果可能不明顯。可以使用netstat命令去查TIME_WAIT狀態的連接狀態,輸入下面的組合命令,查看當前TCP連接的狀態和對應的連接數量:
#netstat -n | awk 『/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}』
這個命令會輸出類似下面的結果:
LAST_ACK 16
SYN_RECV 348
ESTABLISHED 70
FIN_WAIT1 229
FIN_WAIT2 30
CLOSING 33
TIME_WAIT 18098
我們只用關心TIME_WAIT的個數,在這里可以看到,有18000多個TIME_WAIT,這樣就佔用了18000多個埠。要知道埠的數量只有65535個,佔用一個少一個,會嚴重的影響到後繼的新連接。這種情況下,我們就有必要調整下Linux的TCP內核參數,讓系統更快的釋放TIME_WAIT連接。

用vim打開配置文件:#vim /etc/sysctl.conf
在這個文件中,加入下面的幾行內容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
輸入下面的命令,讓內核參數生效:#sysctl -p
簡單的說明上面的參數的含義:
net.ipv4.tcp_syncookies = 1
#表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
#表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
#表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉;
net.ipv4.tcp_fin_timeout
#修改系統默認的 TIMEOUT 時間。
在經過這樣的調整之後,除了會進一步提升伺服器的負載能力之外,還能夠防禦小流量程度的DoS、CC和SYN攻擊。
此外,如果你的連接數本身就很多,我們可以再優化一下TCP的可使用埠范圍,進一步提升伺服器的並發能力。依然是往上面的參數文件中,加入下面這些配置:
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#這幾個參數,建議只在流量非常大的伺服器上開啟,會有顯著的效果。一般的流量小的伺服器上,沒有必要去設置這幾個參數。
net.ipv4.tcp_keepalive_time = 1200
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。
net.ipv4.ip_local_port_range = 10000 65000
#表示用於向外連接的埠范圍。預設情況下很小:32768到61000,改為10000到65000。(注意:這里不要將最低值設的太低,否則可能會佔用掉正常的埠!)
net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。
net.ipv4.tcp_max_tw_buckets = 6000
#表示系統同時保持TIME_WAIT的最大數量,如果超過這個數字,TIME_WAIT將立刻被清除並列印警告信息。默 認為180000,改為6000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT的最大數量,避免Squid伺服器被大量的TIME_WAIT拖死。
內核其他TCP參數說明:
net.ipv4.tcp_max_syn_backlog = 65536
#記錄的那些尚未收到客戶端確認信息的連接請求的最大值。對於有128M內存的系統而言,預設值是1024,小內存的系統則是128。
net.core.netdev_max_backlog = 32768
#每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.somaxconn = 32768
#web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調整這個值。
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216 #最大socket讀buffer,可參考的優化值:873200
net.core.wmem_max = 16777216 #最大socket寫buffer,可參考的優化值:873200
net.ipv4.tcp_timestsmps = 0
#時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號。時間戳能夠讓內核接受這種「異常」的數據包。這里需要將其關掉。
net.ipv4.tcp_synack_retries = 2
#為了打開對端的連接,內核需要發送一個SYN並附帶一個回應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄連接之前發送SYN+ACK包的數量。
net.ipv4.tcp_syn_retries = 2
#在內核放棄建立連接之前發送SYN包的數量。
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
# 開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接。
net.ipv4.tcp_wmem = 8192 436600 873200
# TCP寫buffer,可參考的優化值: 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
# TCP讀buffer,可參考的優化值: 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
# 同樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力。
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段。
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket。
上述內存單位是頁,而不是位元組。可參考的優化值是:786432 1048576 1572864
net.ipv4.tcp_max_orphans = 3276800
#系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。
如果超過這個數字,連接將即刻被復位並列印出警告信息。
這個限制僅僅是為了防止簡單的DoS攻擊,不能過分依靠它或者人為地減小這個值,
更應該增加這個值(如果增加了內存之後)。
net.ipv4.tcp_fin_timeout = 30
#如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端可以出錯並永遠不關閉連接,甚至意外當機。預設值是60秒。2.2 內核的通常值是180秒,你可以按這個設置,但要記住的是,即使你的機器是一個輕載的WEB伺服器,也有因為大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,因為它最多隻能吃掉1.5K內存,但是它們的生存期長些。

② 如何讀懂tcpmp的輸出

tcpmp 是 Linux 下的抓包工具,使用參數比較多,輸出條目比較細。
tcpmp的命令行格式
tcpmp [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
[ -i 網路介面 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達式 ]

tcpmp的參數選項
-A:以ASCII編碼列印每個報文(不包括鏈路層的頭),這對分析網頁來說很方便;
-a:將網路地址和廣播地址轉變成名字;
-c<數據包數目>:在收到指定的包的數目後,tcpmp就會停止;
-C:用於判斷用 -w 選項將報文寫入的文件的大小是否超過這個值,如果超過了就新建文件(文件名後綴是1、2、3依次增加);
-d:將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd:將匹配信息包的代碼以c語言程序段的格式給出;
-ddd:將匹配信息包的代碼以十進制的形式給出;
-D:列出當前主機的所有網卡編號和名稱,可以用於選項 -i;
-e:在輸出行列印出數據鏈路層的頭部信息;
-f:將外部的Internet地址以數字的形式列印出來;
-F<表達文件>:從指定的文件中讀取表達式,忽略其它的表達式;
-i<網路界面>:監聽主機的該網卡上的數據流,如果沒有指定,就會使用最小網卡編號的網卡(在選項-D可知道,但是不包括環路介面),linux 2.2 內核及之後的版本支持 any 網卡,用於指代任意網卡;
-l:如果沒有使用 -w 選項,就可以將報文列印到 標准輸出終端(此時這是默認);
-n:顯示ip,而不是主機名;
-N:不列出域名;
-O:不將數據包編碼最佳化;
-p:不讓網路界面進入混雜模式;
-q:快速輸出,僅列出少數的傳輸協議信息;
-r<數據包文件>:從指定的文件中讀取包(這些包一般通過-w選項產生);
-s<數據包大小>:指定抓包顯示一行的寬度,-s0表示可按包長顯示完整的包,經常和-A一起用,默認截取長度為60個位元組,但一般ethernetMTU都是1500位元組。所以,要抓取大於60位元組的包時,使用默認參數就會導致包數據丟失;
-S:用絕對而非相對數值列出TCP關聯數;
-t:在輸出的每一行不列印時間戳;
-tt:在輸出的每一行顯示未經格式化的時間戳記;
-T<數據包類型>:將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網路管理協議);
-v:輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
-vv:輸出詳細的報文信息;
-x/-xx/-X/-XX:以十六進制顯示包內容,幾個選項只有細微的差別,詳見man手冊;
-w<數據包文件>:直接將包寫入文件中,並不分析和列印出來;
expression:用於篩選的邏輯表達式;

tcpmp的表達式
表達式是一個邏輯表達式,tcpmp利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網路上所有的信息包將會被截獲。
在表達式中一般如下幾種類型的關鍵字:
關於類型的關鍵字,主要包括host,net,port
例如,
host 210.27.48.2,指明 210.27.48.2是一台主機,net 202.0.0.0 指明202.0.0.0是一個網路地址,port 23 指明埠號是23。
如果沒有指定類型,預設的類型是host.
關於傳輸方向的關鍵字:src,dst,dst or src,dst and src
例如,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網路地址是202.0.0.0 。如果沒有指明方向關鍵字,則預設是src or dst關鍵字。
關於協議的關鍵字:fddi,ip,arp,rarp,tcp,udp
Fddi指明是在FDDI(分布式光纖數據介面網路)上的特定的網路協議,實際上它是"ether"的別名,fddi和e ther具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。
其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpmp將會監聽所有協議的信息包。
邏輯運算符關鍵字
非運算 'not ' '! '
與運算 'and','&&'
或運算 'or' ,'||'
這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。
其他重要關鍵字
除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater。
案例
想要截獲所有210.27.48.1 的主機收到的和發出的所有的數據包:
tcpmp host 210.27.48.1
想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通信,使用命令
tcpmp host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3\)
如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:
tcpmp ip host 210.27.48.1 and ! 210.27.48.2
如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令:
tcpmp tcp port 23 host 210.27.48.1
輸出結果介紹
下面我們介紹幾種典型的tcpmp命令的輸出信息
數據鏈路層頭信息
使用命令tcpmp --e host ice
ice 是一台裝有linux的主機,她的MAC地址是0:90:27:58:af:1a
H219是一台裝有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5b:46
命令的輸出結果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telnet 0:0(0) ack 22535 win 8760 (DF)
分析:
21:50:12 是顯示的時間
847509 是ID號
eth0 < 表示從網路介面eth0 接受該數據包
eth0 > 表示從網路介面設備發送數據包
8:0:20:79:5b:46 是主機H219的MAC地址,它表明是從源地址H219發來的數據包
0:90:27:58:af:1a 是主機ICE的MAC地址,表示該數據包的目的地址是ICE
ip 是表明該數據包是IP數據包,
60 是數據包的長度,
h219.33357 > ice.telnet 表明該數據包是從主機H219的33357埠發往主機ICE的TELNET(23)埠
ack 22535 表明對序列號是222535的包進行響應
win 8760 表明發送窗口的大小是8760
ARP包的TCPDUMP輸出信息
使用命令#tcpmp arp
得到的輸出結果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析:
22:32:42 時間戳
802509 ID號
eth0 > 表明從主機發出該數據包
arp 表明是ARP請求包
who-has route tell ice 表明是主機ICE請求主機ROUTE的MAC地址
0:90:27:58:af:1a 是主機ICE的MAC地址。
TCP包的輸出信息
用TCPDUMP捕獲的TCP包的一般輸出信息是:
src > dst: flagsdata-seqnoackwindowurgentoptions

src > dst 表明從源地址到目的地址
flags 是TCP包中的標志信息,S 是SYN標志, F(FIN), P(PUSH) , R(RST) "."(沒有標記)
data-seqno 是數據包中的數據的順序號
ack 是下次期望的順序號
window 是接收緩存的窗口大小
urgent 表明數據包中是否有緊急指針
options 是選項
用TCPDUMP捕獲的UDP包的一般輸出信息是:
route.port1 > ice.port2: udplenth

UDP十分簡單,上面的輸出行表明從主機ROUTE的port1埠發出的一個UDP數據包到主機ICE的port2埠,類型是UDP, 包的長度是lenth
wireshark查看
要讓wireshark能分析tcpmp的包,關鍵的地方是 -s 參數, 還有要保存為-w文件,例如下面的例子:
./tcpmp -i eth0 -s 0 -w SuccessC2Server.pcaphost 192.168.1.20 # 抓該主機的所有包,在wireshark中過濾
./tcpmp -i eth0 'dst host 239.33.24.212' -w raw.pcap # 抓包的時候就進行過濾

wireshark的過濾,很簡單的,比如:
tcp.port eq 5541
ip.addr eq 192.168.2.1
過濾出來後, 用fllow tcp 查看包的內容。
其他
device eth0/eth1 entered promiscuous mode
message日誌中提示:
kernel: device eth0 entered promiscuous mode
kernel: device eth0 left promiscuous mode
網卡進入了混雜模式。一般對通信進行抓包分析時進入混雜模式(tcpmp)。(默認網卡啟用了混雜模式的)
關閉混雜模式:ifconfig eth0 -promisc
啟用混雜模式:ifconfig eth0 promisc
TCP協議的KeepAlive機制與HeartBeat心跳包:http://www.nowamagic.net/academy/detail/23350382
TCP Keepalive HOWTO:http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

③ 如何查看linux系統警告日誌

1、打開WDCP服務管理系統登錄界面,輸入用戶名和密碼,點擊登錄。

6、在操作日誌中,可以看到進行的操作,必要時可以找回誤刪的數據。

④ tcp工作慢開始階段的時間間隔 tcp工作在擁塞避免階段的時間間隔

1.採用面向連接的三次握手實現可靠對象傳輸。
2.使用數據窗口機制協商隊列大小實現數據隊列傳輸。
3.通過序列化應答和必要時重發數據包,TCP 為應用程序提供了可靠的傳輸流和虛擬連接服務。

下面是找到的長篇大論中比較好的文章:

一、TCP協議

1、TCP 通過以下方式提供可靠性:

◆ 應用程序分割為TCP認為最合適發送的數據塊。由TCP傳遞給IP的信息單位叫做報文段。
◆ 當TCP發出一個報文段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能記時收到一個確認,它 就重發這個報文段。
◆ 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常延遲幾分之一秒。
◆ TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化如果收到報文段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到這個報文段。
◆ 既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能失序,因此TCP報文段的到達也可能失序。如果必要,TCP將對收到的數據進行排序,將收到的數據以正確的順序交給應用層。
◆ 既然IP數據報會發生重復,TCP連接端必須丟棄重復的數據。
◆ TCP還能提供流量控制,TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
另外,TCP對位元組流的內容不作任何解釋。

2、TCP首部:
TCP數據被封裝在一個IP數據報中,格式如下:
IP首部20 TCP首部20 TCP首部

TCP首部格式如下:
16位源埠號 16位目的埠號
32位序號
32位確認序號
4位首部長度 保留6位 U
R
G A
C
K P
S
H R
S
T S
Y
N F
I
N 16位窗口大小
16位檢驗和 16位緊急指針
選項
數據

說明:
(1)每個TCP段都包括源端和目的端的埠號,用於尋找發送端和接收端的應用進程。這兩個值加上IP首部的源端IP地址和目的端IP地址唯一確定一個TCP連接。
(2)序號用來標識從TCP發送端向接收端發送的數據位元組流,它表示在這個報文段中的第一個數據位元組。如果將位元組流看作在兩個應用程序間的單向流動,則TCP用序號對每個位元組進行計數。
(3)當建立一個新連接時,SYN標志變1。序號欄位包含由這個主機選擇的該連接的初始序號ISN,該主機要發送數據的第一個位元組的序號為這個ISN加1,因為SYN標志使用了一個序號。
(4)既然每個被傳輸的位元組都被計數,確認序號包含發送確認的一端所期望收到的下一個序號。因此,確認序號應當時上次已成功收到數據位元組序號加1。只有ACK標志為1時確認序號欄位才有效。
(5)發送ACK無需任何代價,因為32位的確認序號欄位和ACK標志一樣,總是TCP首部的一部分。因此一旦一個連接建立起來,這個欄位總是被設置,ACK標志也總是被設置為1。
(6)TCP為應用層提供全雙工的服務。因此,連接的每一端必須保持每個方向上的傳輸數據序號。
(7)TCP可以表述為一個沒有選擇確認或否認的華東窗口協議。因此TCP首部中的確認序號表示發送方已成功收到位元組,但還不包含確認序號所指的位元組。當前還無法對數據流中選定的部分進行確認。
(8)首部長度需要設置,因為任選欄位的長度是可變的。TCP首部最多60個位元組。
(9)6個標志位中的多個可同時設置為1
◆ URG-緊急指針有效
◆ ACK-確認序號有效
◆ PSH-接收方應盡快將這個報文段交給應用層
◆ RST-重建連接
◆ SYN-同步序號用來發起一個連接
◆ FIN-發送端完成發送任務
(10)TCP的流量控制由連接的每一端通過聲明的窗口大小來提供。窗口大小為位元組數,起始於確認序號欄位指明的值,這個值是接收端期望接收的位元組數。窗口大小是一個16為的欄位,因而窗口大小最大為65535位元組。
(11)檢驗和覆蓋整個TCP報文端:TCP首部和TCP數據。這是一個強制性的欄位,一定是由發送端計算和存儲,並由接收端進行驗證。TCP檢驗和的計算和UDP首部檢驗和的計算一樣,也使用偽首部。
(12)緊急指針是一個正的偏移量,黃蓉序號欄位中的值相加表示緊急數據最後一個位元組的序號。TCP的緊急方式是發送端向另一端發送緊急數據的一種方式。
(13)最常見的可選欄位是最長報文大小MMS,每個連接方通常都在通信的第一個報文段中指明這個選項。它指明本端所能接收的最大長度的報文段。

二、TCP連接的建立和終止

1、建立連接協議
(1) 請求端發送一個SYN段指明客戶打算連接的伺服器的埠,隱疾初始序號(ISN),這個SYN報文段為報文段1。
(2) 伺服器端發回包含伺服器的初始序號的SYN報文段(報文段2)作為應答。同時將確認序號設置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。
(3) 客戶必須將確認序號設置為伺服器的ISN加1以對伺服器的SYN報文段進行確認(報文段3)。
這3個報文段完成連接的建立,稱為三次握手。發送第一個SYN的一端將執行主動打開,接收這個SYN並發回下一個SYN的另一端執行被動打開。

2、連接終止協議
由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
(1) TCP客戶端發送一個FIN,用來關閉客戶到伺服器的數據傳送(報文段4)。
(2) 伺服器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1(報文段5)。和SYN一樣,一個FIN將佔用一個序號。
(3) 伺服器關閉客戶端的連接,發送一個FIN給客戶端(報文段6)。
(4) 客戶段發回確認,並將確認序號設置為收到序號加1(報文段7)。

3、連接建立的超時
如果與伺服器無法建立連接,客戶端就會三次向伺服器發送連接請求。在規定的時間內伺服器未應答,則連接失敗。

4、最大報文段長度MSS
最大報文段長度表示TCP傳往另一端的最大塊數據的長度。當一個連接建立時,連接的雙方都要通告各自的MSS。
一般,如果沒有分段發生,MSS還是越大越好。報文段越大允許每個報文段傳送的數據越多,相對IP和TCP首部有更高的網路利用率。當TCP發送一個 SYN時,它能將MSS值設置為外出介面的MTU長度減去IP首部和TCP首部長度。對於乙太網,MSS值可達1460。
如果目的地址為非本地的,MSS值通常默認為536,是否本地主要通過網路號區分。MSS讓主機限制另一端發送數據報的長度,加上主機也能控制它發送數據報的長度,這將使以較小MTU連接到一個網路上的主機避免分段。

5、 TCP的半關閉
TCP提供了連接的一端在結束它的發送後還能接收來自另一端數據的能力,這就是TCP的半關閉。
客戶端發送FIN,另一端發送對這個FIN的ACK報文段。當收到半關閉的一端在完成它的數據傳送後,才發送FIN關閉這個方向的連接,客戶端再對這個FIN確認,這個連接才徹底關閉。

6、2MSL連接
TIME_WAIT狀態也稱為2MSL等待狀態。每個TCP必須選擇一個報文段最大生存時間(MSL)。它是任何報文段被丟棄前在網路的最長時間。
處理原則:當TCP執行一個主動關閉,並發回最後一個ACK,該連接必須在TIME_WAIT狀態停留的時間為2MSL。這樣可以讓TCP再次發送最後的ACK以避免這個ACK丟失(另一端超時並重發最後的FIN)。這種2MSL等待的另一個結果是這個TCP連接在2MSL等待期間,定義這個連接的插口不能被使用。

7、平靜時間
TCP在重啟的MSL秒內不能建立任何連接,這就是平靜時間。
8、FIN_WAIT_2狀態
在FIN_WAIT_2狀態我們已經發出了FIN,並且另一端也對它進行了確認。只有另一端的進程完成了這個關閉,我們這端才會從 FIN_WAIT_2狀態進入TIME_WAIT狀態。這意味著我們這端可能永遠保持這個狀態,另一端也將處於CLOSE_WAIT狀態,並一直保持這個狀態直到應用層決定進行關閉。
9、復位報文段
TCP首部的RST位是用於復位的。一般,無論合適一個報文端發往相關的連接出現錯誤,TCP都會發出一個復位報文段。主要情況:
(1)到不存在的埠的連接請求;
(2)異常終止一個連接。

10、同時打開
為了處理同時打開,對於同時打開它僅建立一條連接而不是兩條連接。兩端幾乎在同時發送SYN,並進入SYN_SENT狀態。當每一端收到SYN時,狀態變為SYN_RCVD,同時他們都再發SYN並對收到的SYN進行確認。當雙方都收到SYN及相應的ACK時,狀態都變為ESTABLISHED。一個同時打開的連接需要交換4個報文段,比正常的三次握手多了一次。

11、 同時關閉
當應用層發出關閉命令,兩端均從ESTABLISHED變為FIN_WAIT_1。這將導致雙方各發送一個FIN,兩個FIN經過網路傳送後分別到達另一端。收到FIN後,狀態由FIN_WAIT_1變為CLOSING,並發送最後的ACK。當收到最後的ACK,狀態變為TIME_WAIT。同時關閉和正常關閉的段減緩數目相同。

12、TCP選項
每個選項的開始是1位元組的kind欄位,說明選項的類型。

Kind=1:選項表結束(1位元組) Kind=1:無操作(1位元組) Kind=2:最大報文段長度(4位元組) Kind=3:窗口擴大因子(4位元組) Kind=8:時間戳(10位元組)
三、TCP的超時和重傳

對於每個TCP連接,TCP管理4個不同的定時器。
(1) 重傳定時器用於當希望收到另一端的確認。
(2) 堅持定時器使窗口大小信息保持不斷流動,即使另一端關閉了其接收窗口。
(3) 保活定時器可檢測到一個空閑連接的另一端何時崩潰或重啟。
(4) 2MSL定時器測量一個連接處於TIME_WAIT狀態的時間。

1、往返時間測量
TCP超時和重傳重最重要的就是對一個給定連接的往返時間(RTT)的測量。由於路由器和網路流量均會變化,因此TCP應該跟蹤這些變化並相應地改變超時時間。首先TCP必須測量在發送一個帶有特別序號地位元組和接收到包含該位元組地確認之間的RTT。

2、擁塞避免演算法
該演算法假定由於分組收到損壞引起的丟失是非常少的,因此分組丟失就意味著在源主機和目的主機之間的某處網路上發生了阻塞。有兩種分組丟失的指示:發生超時和收到重復的確認。擁塞避免演算法需要對每個連接維持兩個變數:一個擁塞窗口cwnd和一個慢啟動門限ssthresh。
(1) 對一個給定的連接,初始化cwnd為1個報文段,ssthresh為65535個位元組。
(2) TCP輸出常式的輸出不能超過cwnd和接收方通告窗口的大小。擁塞避免是發送方使用的流量控制。前者是發送方感受到的網路擁塞的估計,而後者則與接收方在該連接上的可用緩存大小有關。
(3) 當擁塞發生時,ssthresh被設置為當前窗口大小的一般(cwnd和接收方通告窗口大小的最小值,但最小為2個報文段)。此外,如果是超時引起了擁塞,則cwnd被設置為1個報文段。
(4) 當新的數據被對方確認時,就增加cwnd,但增加的方法依賴與是否正在進行慢啟動或擁塞避免。如果cwnd小於或等於ssthresh,則正在進行慢啟動,否則正在進行擁塞避免。

3、快速重傳和快速恢復演算法
如果我們一連串收到3個或以上的重復ACK,就非常可能是一個報文段丟失了。於是我們就重傳丟失的數據報文段,而無需等待超時定時器溢出。
(1) 當收到第3個重復的ACK時,將ssthresh設置為當前擁塞窗口cwnd的一半,重傳丟失的報文段,設置cwnd為ssthresh加上3倍的報文段大小。
(2) 每次收到另一個重復的ACK時,cwnd增加1個報文段大小並發送一個1個分組,如果允許的話。
(3)當下一個確認新數據的ACK到達時,設置cwnd為ssthresh,這個ACK應該時在進行重傳後的一個往返時間內對步驟1重重傳的確認。另外,這個 ACK也應該是對丟失的分組和收到的第一個重復的ACK之間的所有中間報文段的確認。

4、 ICMP差錯
TCP如何處理一個給定的連接返回的ICMP差錯。TCP能夠遇到的最常見的ICMP差錯就是源站抑制、主機不可達和網路不可達。
(1) 一個接收到的源站抑制引起擁塞窗口cwnd被置為1個報文段大小來發起慢啟動,但是慢啟動門限ssthresh沒有變化,所以窗口將打開直到它開放了所有的通路或者發生了擁塞。
(2) 一個接收到的主機不可達或網路不可達實際都被忽略,因為這兩個差錯都被認為是短暫現象。TCP試圖發送引起該差錯的數據,盡管最終有可能會超時。

5、重新分組:
當TCP超時並重傳時,它並不一定要重傳同樣的報文段,相反,TCP允許進行重新分組而發送一個較大的報文段。這是允許的,因為TCP是使用位元組序號而不是報文段序號來進行識別它所要發送的數據和進行確認。

四、TCP的堅持定時器

ACK的傳輸並不可靠,也就是說,TCP不對ACK報文段進行確認,TCP只確認那些包含數據的ACK報文段。為了防止因為ACK報文段丟失而雙方進行等待的問題,發送方用一個堅持定時器來周期性地向接收方查詢。這些從發送方發出地報文段稱為窗口探查。

五、TCP的保活定時器
如果一個給定的連接在2小時內沒有任何動作,那麼伺服器就向客戶發送一個探查報文段。客戶主機必須處於以下4個狀態之一。
(1) 客戶主機依然正常運行,並從伺服器可達。客戶的TCP響應正常,而伺服器也知道對方的正常工作的。伺服器在2小時內將保活定時器復位。
(2) 客戶主機已經崩潰,並且關閉或者正在重新啟動。在任何一種情況下,客戶的TCP都沒有響應。伺服器將不能收到對探查的響應,並在75秒後超時。總共發送10個探查,間隔75秒。
(3) 客戶主機崩潰並已經重新啟動。這是伺服器將收到一個對其保活探查的響應,但這個響應是一個復位,使得伺服器終止這個連接。
(4) 客戶主機正常運行,但是從伺服器不可達。

六、TCP的一些性能

1、 路徑MTU發現:
TCP的路徑MTU發現按如下方式進行:在連接建立時,TCP使用輸出介面或對段聲明的MSS中的最下MTU作為其實的報文段大小。路徑MTU發現不允許TCP超過對端聲明的MSS。如果對端沒有指定一個MSS,則默認為536。
一旦選定了起始的報文段大小,在該連接上的所有被TCP發送的IP數據報都將被設置DF位。如果中間路由器需要對一個設置了DF標志的數據報進行分片,它就丟棄這個數據報,並產生一個ICMP的「不能分片」差錯。
如果收到這個ICMP差錯,TCP就減少段大小並進行重傳。如果路由器產生的是一個較新的該類ICMP差錯,則報文段大小被設置位下一跳的MTU減去 IP和TCP的首部長度。如果是一個較舊的該類ICMP差錯,則必須嘗試下一個可能的最小MTU。

2、 長肥管道
一個連接的容量=帶寬X時延(RTT)。具有大的帶寬時延乘積的網路稱為長肥網路(LFN)。一個運行在LFN的TCP連接稱為長肥管道。管道可以被水平拉長(一個長的RTT),或被垂直拉高(較高的帶寬),或兩個方向拉伸。

3、窗口擴大選項:
窗口擴大選項使TCP的窗口定義從16位增加到32位,這並不是通過修改TCP首部來實現的,TCP首部仍然使用16位,而是通過定義一個選項實現對16位的擴大操作來完成的。

4、時間戳選項:
時間戳選項使發送方在每個報文段中放置一個時間戳值。接收方在確認中返回這個數值,從而允許發送方為每一個收到的ACK計算RTT。
參考資料:

⑤ TCPDUMP 抓包 怎麼查看 抓的包的內容

1、tcpmp檢測登錄linux系統輸入tcpmp,如果找不到表示沒有安裝。也可以用rpm查詢。

⑥ Linux安全優化和內核參數優化方案有那些

入口安全優化

用戶許可權以及系統安全優化

非root用戶添加以及sudo許可權控制

用戶配置文件鎖定

服務控制

默認無關服務都禁止運行並chkconfig xxx off,只保留有用服務。這種如果是雲計算廠商提供的,一般都是優化過。如果是自己安裝的虛擬機或者託管的機器,那就需要優化下,默認只保留network、sshd、iptables、crond、以及rsyslog等必要服務,一些無關緊要的服務就可以off掉了,

內核參數優化

默認ulinit -n看到的是1024,這種如果系統文件開銷量非常大,那麼就會遇到各種報錯比如:

localhost kernel: VFS: file-max limit 65535 reached 或者too many open files 等等,那就是文件句柄打開數量已經超過系統限制,就需要優化了。

這個參數我們進程級優化文件如下:

vim /etc/security/limits.conf

# End of file
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

好了,退出當前終端以後重新登錄可以看到ulimit -n已經改成了65535。另外需要注意,進程級參數優化還需要修改文件:

/etc/security/limits.d/90-nproc.conf 這個會影響到參數。查看某一個進程的limits可以通過cat /proc/pid/limits查看。默認這個文件參數推薦設置:

[root@21yunwei 9001]# cat /etc/security/limits.d/90-nproc.conf
* soft nproc 65535
root soft nproc unlimited

修改/etc/sysctl.conf添加如下參數:

fs.file-max=65535

內核參數優化(這個是非常重要的)。具體優化的文件為/etc/sysctl.conf,後尾追加優化參數:

net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.conf.lo.arp_announce=2

net.ipv4.tcp_synack_retries = 2

#參數的值決定了內核放棄連接之前發送SYN+ACK包的數量。

net.ipv4.tcp_syn_retries = 1

#表示在內核放棄建立連接之前發送SYN包的數量。

net.ipv4.tcp_max_syn_backlog = 262144

#這個參數表示TCP三次握手建立階段接受SYN請求列隊的最大長度,默認1024,將其設置的大一些可以使出現Nginx繁忙來不及accept新連接的情況時,Linux不至於丟失客戶端發起的鏈接請求。

設置完以後執行命令sysctl -p使得配置新配置的內核參數生效。系統優化這個內核對系統本身安全以及高並發都非常的有效(可以解決大量TIME_WAIT帶來的無法訪問使用、系統文件句柄數量超出等等)。

net.ipv4.tcp_timestamps = 1 #開啟時間戳,配合tcp復用。如遇到區域網內的其他機器由於時間戳不同導致無法連接伺服器,有可能是這個參數導致。註:阿里的slb會清理掉tcp_timestampsnet.ipv4.tcp_tw_recycle = 1 #這個參數用於設置啟用timewait快速回收net.ipv4.tcp_max_tw_buckets = 6000 #參數設置為 1 ,表示允許將TIME_WAIT狀態的socket重新用於新的TCP鏈接,該參數默認為180000,過多的TIME_WAIT套接字會使Web伺服器變慢。net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 #當伺服器主動關閉鏈接時,選項決定了套接字保持在FIN-WAIT-2狀態的時間。默認值是60秒。net.ipv4.tcp_keepalive_time = 600 #當keepalive啟動時,TCP發送keepalive消息的頻度;默認是2小時,將其設置為10分鍾,可以更快的清理無效鏈接。net.ipv4.ip_local_port_range = 1024 65000#定義UDP和TCP鏈接的本地埠的取值范圍。fs.file-max=65535 #表示最大可以打開的句柄數;

設置完以後執行命令sysctl -p使得配置新配置的內核參數生效。這個內核對系統本身安全以及高並發都非常的有效(可以解決大量TIME_WAIT帶來的無法訪問使用、系統文件句柄數量超出等等)。

⑦ Linux系統調優參數知多少

所有的TCP/IP調優參數都位於/proc/sys/net/目錄。例如, 下面是最重要的一些調優參數,後面是它們的含義:

1、/proc/sys/net/core/rmem_max — 最大的TCP數據接收緩沖
2、/proc/sys/net/core/wmem_max — 最大的TCP數據發送緩沖
3、/proc/sys/net/ipv4/tcp_timestamps — 時間戳在(請參考RFC 1323)TCP的包頭增加12個位元組
4、/proc/sys/net/ipv4/tcp_sack — 有選擇的應答
5、/proc/sys/net/ipv4/tcp_window_scaling — 支持更大的TCP窗口. 如果TCP窗口最大超過65535(64K), 必須設置該數值為1
6、rmem_default — 默認的接收窗口大小
7、rmem_max — 接收窗口的最大大小
8、wmem_default — 默認的發送窗口大小
9. wmem_max — 發送窗口的最大大小
/proc目錄下的所有內容都是臨時性的, 所以重啟動系統後任何修改都會丟失.

建議在系統啟動時自動修改TCP/IP參數:

把下面代碼增加到/etc/rc.local文件, 然後保存文件, 系統重新引導的時候會自動修改下面的TCP/IP參數:

echo 256960 > /proc/sys/net/core/rmem_default
echo 256960 > /proc/sys/net/core/rmem_max
echo 256960 > /proc/sys/net/core/wmem_default
echo 256960 > /proc/sys/net/core/wmem_max
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
TCP/IP參數都是自解釋的, TCP窗口大小設置為256960, 禁止TCP的時間戳(取消在每個數據包的頭中增加12位元組), 支持更大的TCP窗口和TCP有選擇的應答。

上面數值的設定是根據互連網連接和最大帶寬/延遲率來決定.

注: 上面實例中的數值可以實際應用, 但它只包含了一部分參數.

另外一個方法: 使用 /etc/sysctl.conf 在系統啟動時將參數配置成您所設置的值:

net.core.rmem_default = 256960
net.core.rmem_max = 256960
net.core.wmem_default = 256960
net.core.wmem_max = 256960
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack =1
net.ipv4.tcp_window_scaling = 1
----------------------------------------------------------------

/proc/sys/fs/super-max
該文件指定超級塊處理程序的最大數目。掛裝的任何文件系統需要使用超級塊,所以如果掛裝了大量文件系統,則可能會用盡超級塊處理程序。

預設設置:256

/proc/sys/fs/super-nr
該文件顯示當前已分配超級塊的數目。該文件是只讀的,僅用於顯示信息。

/proc/sys/kernel
/proc/sys/kernel/acct
該文件有三個可配置值,根據包含日誌的文件系統上可用空間的數量(以百分比表示),這些值控制何時開始進行進程記帳:

如果可用空間低於這個百分比值,則停止進程記帳
如果可用空間高於這個百分比值,則開始進程記帳
檢查上面兩個值的頻率(以秒為單位)
要更改這個文件的某個值,應該回送用空格分隔開的一串數字。
預設設置:2 4 30

如果包含日誌的文件系統上只有少於 2% 的可用空間,則這些值會使記帳停止,如果有 4% 或更多可用空間,則再次啟動記帳。每 30 秒做一次檢查。

⑧ 在linux的內核參數表有多個相同的參數

其實也不能算是原創,日常工作的時候經常和這些參數打交道,遇到不明白的就去網上找到並記錄下來,零零散散的記錄了這么多,呵呵,如果你遇到沒見過的參數,不妨來我這里找找,如果有不準確的地方,還請大家回復指出,謝謝
$ /proc/sys/net/core/wmem_max
最大socket寫buffer,可參考的優化值:873200
$ /proc/sys/net/core/rmem_max
最大socket讀buffer,可參考的優化值:873200
$ /proc/sys/net/ipv4/tcp_wmem
TCP寫buffer,可參考的優化值: 8192 436600 873200
$ /proc/sys/net/ipv4/tcp_rmem
TCP讀buffer,可參考的優化值: 32768 436600 873200
$ /proc/sys/net/ipv4/tcp_mem
同樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力.
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段.
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.
上述內存單位是頁,而不是位元組.可參考的優化值是:786432 1048576 1572864
$ /proc/sys/net/core/netdev_max_backlog
進入包的最大設備隊列.默認是300,對重負載伺服器而言,該值太低,可調整到1000.
$ /proc/sys/net/core/somaxconn
listen()的默認參數,掛起請求的最大數量.默認是128.對繁忙的伺服器,增加該值有助於網路性能.可調整到256.
$ /proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默認10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
進入SYN包的最大請求隊列.默認1024.對重負載伺服器,增加該值顯然有好處.可調整到2048.
$ /proc/sys/net/ipv4/tcp_retries2
TCP失敗重傳次數,默認值15,意味著重傳15次才徹底放棄.可減少到5,以盡早釋放內核資源.
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
這3個參數與TCP KeepAlive有關.默認值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某個TCP連接在idle 2個小時後,內核才發起probe.如果probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.對伺服器而言,顯然上述值太大. 可調整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
$ proc/sys/net/ipv4/ip_local_port_range
指定埠范圍的一個配置,默認是32768 61000,已夠大.

net.ipv4.tcp_syncookies = 1
表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1
表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1
表示開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,表示關閉。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1200
表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。
net.ipv4.ip_local_port_range = 1024 65000
表示用於向外連接的埠范圍。預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。
net.ipv4.tcp_max_tw_buckets = 5000
表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告信息。默認為180000,改為 5000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死。

本文出自 「虛擬的現實」 博客,請務必保留此出處http://waringid.blog.51cto.com/65148/183496
kernel.hung_task_check_count
The number of tasks checked:
*/
unsigned long __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
最大pid上限?
###############################################

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
每個消息隊列的最大位元組限制
kernel.msgmax = 65536
每個消息的最大size.
kernel.shmmax = 68719476736
內核參數定義單個共享內存段的最大值
kernel.shmall = 4294967296
參數是控制共享內存頁數

net.ipv4.tcp_max_syn_backlog = 65536 表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數
net.core.netdev_max_backlog = 8192 每個網路介面接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目
net.ipv4.tcp_max_tw_buckets = 20000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告信息。默認為180000,改為5000。對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死
net.core.somaxconn = 32768 定義了系統中每一個埠最大的監聽隊列的長度,這是個全局的參數,默認值為1024
net.core.wmem_default = 8388608 該文件指定了發送套接字緩沖區大小的預設值(以位元組為單位)。
net.core.rmem_default = 8388608 該文件指定了接收套接字緩沖區大小的默認值(以位元組為單位)。
net.core.rmem_max = 16777216 指定了接收套接字緩沖區(接收窗口)大小的最大值(以位元組為單位) 最大的TCP數據接收緩沖
net.core.wmem_max = 16777216 指定了發送套接字緩沖區(接收窗口)大小的最大值(以位元組為單位) 最大的TCP數據發送緩沖
net.ipv4.tcp_timestamps = 0 以一種比重發超時更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計算;為了實現更好的性能應該啟用這個選項,時間戳在(請參考RFC 1323)TCP的包頭增加12個位元組
net.ipv4.tcp_synack_retries = 2 # syn-ack握手狀態重試次數,默認5,遭受syn-flood攻擊時改為1或2
net.ipv4.tcp_syn_retries = 2 外向syn握手重試次數,默認4
net.ipv4.tcp_tw_recycle = 1 # 默認0,tw快速回收
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,表示關閉;
net.ipv4.tcp_mem = 94500000 915000000 927000000 確定 TCP 棧應該如何反映內存使用;每個值的單位都是內存頁(通常是 4KB)。第一個值是內存使用的下限。第二個值是內存壓力模式開始對緩沖區使用應用壓力的上限。第三個值是內存上限。在這個層次上可以將報文丟棄,從而減少對內存的使用。對於較大的 BDP 可以增大這些值(但是要記住,其單位是內存頁,而不是位元組)
net.ipv4.tcp_max_orphans = 3276800 系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。如果超過這個數字,孤兒連接將即刻被復位並列印出警告信息。這個限制僅僅是為了防止簡單的DoS攻擊,你絕對不能過分依靠它或者人為地減小這個值,更應該增加這個值(如果增加了內存之後)

net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 600 表示當keepalive起用的時候,TCP發送keepalive消息的頻度。預設是2小時,改為20分鍾。
net.ipv4.tcp_keepalive_intvl = 30 當探測沒有確認時,重新發送探測的頻度。預設是75秒
net.ipv4.tcp_keepalive_probes = 3 在認定連接失效之前,發送多少個TCP的keepalive探測包。預設值是9。這個值乘以tcp_keepalive_intvl之後決定了,一個連接發送了keepalive之後可以有多少時間沒有回應

net.ipv4.tcp_no_metrics_save = 1 一個tcp連接關閉後,把這個連接曾經有的參數比如慢啟動門限snd_sthresh,擁塞窗口snd_cwnd 還有srtt等信息保存到dst_entry中, 只要dst_entry 沒有失效,下次新建立相同連接的時候就可以使用保存的參數來初始化這個連接.
tcp_no_metrics_save 設置為1就是不保持這些參數(經驗值),每次建立連接後都重新摸索一次. 我覺得沒什麼好處. 所以系統默認把它設為0.

net.ipv4.ip_local_port_range = 1024 65535 指定埠范圍的一個配置,默認是32768 61000
kernel.msgmni = 1024 這個參數決定了系統中同時運行的最大的message queue的個數
kernel.sem = 250 256000 32 2048
cat /proc/sys/kernel/sem
250 32000 100 128

4個數據分別對應
SEMMSL 250 表示每個信號集中的最大信號量數目
SEMMNS 32000 表示系統范圍內的最大信號量總數目
SEMOPM 100 表示每個信號發生時的最大系統操作數目
SEMMNI 128 表示系統范圍內的最大信號集總數目

⑨ linux tcp時間戳選項中是怎樣區分發送方

TCP協議的幾個設計初衷。以及引發的問題:
1. 協議規定收端不須要響應每個收到的數據報文,僅僅須要收到N個報文後,向發端回復一個ack報文就可以。

這種規定是為了提高通訊的效率,可是也引入了幾個問題:
A. 發端發出報文後,究竟多久可以收到ack是不確定的。
B. 萬一ack報文丟失了。推斷須要重發的timeout時間也非常難確定。
2. TCP報文中,標示Sequence號的地址長度為32位。
這就限制了發端最多一次發送2^30長度的數據。就必須等待ack信號。為啥呢?在這個鏈接里有一些具體的討論。
然而對於超快速乙太網(1000M以至於10G),這樣會影響TCP連接的轉發效率。

⑩ tcp時間戳開還是不開

解決方案是定期修補系統。
禁用TCP時間戳不會使您的系統更不容易受到攻擊-只是通過隱蔽性實現安全性,根本就沒有安全性。

閱讀全文

與Linuxtcp時間戳相關的資料

熱點內容
程序員神經 瀏覽:752
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:686
python評論樹講解 瀏覽:679
juniper防火牆常用命令 瀏覽:426
vapp怎麼下載地址 瀏覽:11
pdf裡面內容怎麼修改 瀏覽:807
收藏網址加密的瀏覽器 瀏覽:1000
phpurl問號 瀏覽:898
什麼筆記本電腦可以用python 瀏覽:135
加密相冊如何翻找 瀏覽:992
泰州地區DNS伺服器地址 瀏覽:849
一種app可以買菜用英語怎麼說 瀏覽:196
中國聯通app裡面通話詳單怎麼刪除 瀏覽:505
計算機網路編譯軟體 瀏覽:100
程序員說不能說的秘密 瀏覽:700
在線shell編譯器 瀏覽:103
為什麼王者榮耀安卓轉蘋果成功登不上去 瀏覽:710
文件加密演算法可行性報告 瀏覽:60
a3雙面列印pdf 瀏覽:270