㈠ 什麼是linux數據流重定向
首先說一下什麼是數據流重定向,所謂數據流重定向簡單來說就是一個過程,這個過程捕捉一個文件,或者命令,程序,腳本,甚至腳本中的代碼塊(code block)的輸出,然後把捕捉到的輸出,作為輸入發送給另外一個文件,命令,程序,或者腳本。
談到數據流重定向,我們首先需要了解文件描述符的概念。對於linux內核而言,所有打開的文件都通過文件描述符引用。文件描述符是一個非負整數。當打開一個現有文件或創建一個新文件時,內核向進程等返回一個文件描述符。按照慣例,unix系統shell把文件描述符0與進程的標准輸入關聯,文件描述符1與標准輸出關聯,文件描述符2與標准錯誤關聯。總結如下:
標准輸入:文件描述符0,通常指鍵盤的輸入 。使用符號<或<<
標准輸出:文件描述符1,通常指命令執行所回傳的正確信息 ,默認輸出到屏幕u。使用符號>或>>
標准錯誤:文件描述符2,通常指命令執行失敗後,所回傳的信息,也是默認輸出到屏幕。試用符號2>或2>>
默認情況下>和>>分別表示1>或1>>,<和<<與0<和0<<等價。
標准輸出重定向:
#ls
表示列出當前目錄條目,並將結果輸出到屏幕。
#ls 1>file1
以上命令會把命令的標准輸出重新定向到一個文件file,而不是顯示到屏幕上,如果不指明文件標識符,系統默認的就是1, 因此1可以省略。
即這個命令等同於
#ls >file1
如果file1不存在,則系統會自動創建。如果已經存在,那麼系統首先會把這個文件清空,然後再將數據寫入該文件。也就是說>輸出到一個已存在的文件,那麼會覆蓋這個文件。如果不想覆蓋,可以使用>>。表示將重定向數據追加到file1文件的末尾。
標准錯誤重定向:
#ls -qw 2>errorfile
表示將錯誤信息不輸出到屏幕,而是寫入errorfile。注意這里的2不能省略。因為>與1>等同,默認是標准輸出重定向。所以這里要寫成2>,表示標准錯誤重定向。-qw用來產生錯誤信息。
把標准錯誤和標准輸出寫入同一個文件:
#./a.out &>outfile
這個命令把./a.out的標准輸出和標准錯誤重定向到outfile。&在這里表示標准錯誤和標准輸出。下面是另一種寫法:
#./a.out > outfile 2>&1
下面是一個錯誤的例子:
#./a.out > outfile 2>outfile
標准輸入重定向:
#grep search-world <filename 或 grep search-world 0<filename
還有下面這種方式:
cat > catfile < ~/.bashrc
它代表將~/.bashrc的內容作為輸入,然後將這些內容寫入catfile
關閉文件:
"&-"表示關閉文件標識符
有關關閉文件標識符的操作請參考下面
n<&- 關閉輸入文件標識符n
0<&-或<&- 關閉標准輸入stdin
n>&- 關閉輸出文件標識符n
1>&-或>&-關閉標准輸出stdout
屏蔽標准輸出或標准錯誤:
./a.out > /dev/null #等同於./a.out 1>dev/null 表示屏蔽標准輸出
./a.out 2>/dev/null #表示屏蔽標准錯誤
./a.out > /dev/null 2>/dev/null #表示同時屏蔽標准輸出和標准錯誤
打開文件:
#exec 3<>filename 把文件filename打開,並指定文件標識符為3
命令j<>filename表示把文件打開,並指明文件標識符為j
我們什麼時候需要重定向:
1.屏幕輸出的信息很重要,而且我們需要將它存下來的時候。
2. 後台執行中的程序,不希望它干擾屏幕正常的輸出結果時。
3. 一些系統的例行命令。(例如寫在/etc/crontab中的文件)的執行結果時,希望它可以存下來。
4. 一些執行命令的可能已知錯誤信息時,想以「2>dev/null"將它丟掉
5. 錯誤信息與正確信息需要分別輸出時
常用重定向命令:
cmd > file 把 stdout 重定向到 file 文件中;
cmd >> file 把 stdout 重定向到 file 文件中(追加);
cmd 1> fiel 把 stdout 重定向到 file 文件中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;
cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
cmd < file >file2 cmd 命令以 file 文件作為 stdin,以 file2 文件作為 stdout;
cat <>file 以讀寫的方式打開 file;
cmd < file cmd 命令以 file 文件作為 stdin;
cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符。
>&n 使用系統調用 p (2) 復制文件描述符 n 並把結果用作標准輸出;
<&n 標准輸入復制自文件描述符 n;
<&- 關閉標准輸入(鍵盤);
>&- 關閉標准輸出;
n<&- 表示將 n 號輸入關閉;
n>&- 表示將 n 號輸出關閉;
與重定向相關的題目:
此題來自《unix環境高級編程》(第3版)P73 3.5
在Bourne shell、Bourne-again shell 和Korn shell中,digit1>&digit2表示將描述符digit1的重定向至描述符digit2的同一文件。請說明下面兩條命令的區別。
./a.out > outfile 2>&1
./a.out 2>&1 >outfile
答:因為shell從左到右處理命令行,所以:
./a.out > outfile 2>&1 等同於./a.out 1>outfile 2>&1
首先執行 >outfile 設置標准輸出到outfile,然後執行2>&1,即調用p將標准輸出復制到描述符2(標准錯誤上),其結果是將標准輸出和標准錯誤設置為同一個文件,即描述符1和2指向同一個文件表項。而對於命令行
./a.out 2>&1 >outfile
首先執行p,所以描述符2成為終端(假設命令是交互執行的),標准輸出重定向到outfile。結果是描述符1指向outfile的文件表項,描述符2指向終端的文件表項。
參考資料:
1.http://os.51cto.com/art/201003/187688.htm
2.http://blog.csdn.net/ljianhui/article/details/9262737
3.https://www.ibm.com/developerworks/cn/linux/l-iotips/
4.《unix環境高級編程》
㈡ linux系統中數據流定向和管道有什麼相似和不同
相似處為,都是將前者的輸出作為後者的輸入。
不同處為,管道一般是將前者的輸出作為後者的參數,一般應用在連續的命令中,簡化人工輸入參數的過程。
而數據流定向,一般是將前者命令的輸出結果定向到某文件或設備中,並可以通過數據流定向將標准輸出與錯誤輸出進行調整,以達到某種目的,如靜默,等。
㈢ linux 的輸入輸出重定向要怎麼用
Linux重定向是指修改原來默認的一些東西,對原來系統命令的默認執行方式進行改變,比如說簡單的我不想看到在顯示器的輸出而是希望輸出到某一文件中就可以通過Linux重定向來進行這項工作。
Linux默認輸入是鍵盤,輸出是顯示器。你可以用重定向來改變這些設置。比如用wc命令的時候本來是要手動輸入一篇文字來計算字元數的,用了重定向後可以直接把一個已經寫好的文件用『<』指向這條命令,就直接可以統計這個文件的字元數等了。輸出也是一樣,你可以把屏幕輸出重定向到一個文件里,再到文件里去看結果。重定向操作符可以用來將命令輸入和輸出數據流從默認位置重定向到其他位置,其輸入或輸出數據流的位置稱為句柄;常見的句柄有三種,當然句柄可以自行擴展,一般的OS都提供類似的功能。句柄 句柄代號 句柄描述
STDIN 0 鍵盤輸入
STDOUT 1 輸出信息到提示符窗口
STDERR 2 輸出錯誤信息到提示符窗口
默認的 < 重定向輸入操作符是 0,而默認的 > 重定向輸出操作符是 1。鍵入 < 或 > 操作符之後,必須指定數據的讀寫位置,可以是文件名或其他現有的句柄。
要指定重定向到現有句柄,請使用與 & 字元,後面接要重定向的句柄號(即 &句柄號)。
例如,下面的命令可以將句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):2>&1
下表列出了可用於重定向輸入和輸出數據流的操作符:
Linux重定向操作符 功能描述
> 將命令輸出寫入文件或設備,而不是命令提示符或句柄
< 從文件而不是從鍵盤或句柄讀入命令輸入
>> 將命令輸出添加到文件末尾而不刪除文件中已有的信息
>& 將一個句柄的輸出寫入到另一個句柄的輸入中
<& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中
| 從一個命令中讀取輸出並將其寫入另一個命令的輸入中;也稱為管道操作符
現在我們回過頭來看看上面的那條語句mysh > mylog.txt 2>&1就可明白:
> mylog.txt意思是將標准輸出重定向到mylog.txt,等價於mysh 1> mylog.txt;
2 >& 1 意思是將錯誤輸出重定向到句柄1標准輸出;綜合起來就是mysh命令執行過程中產生的標准輸出和錯誤輸出都會被重定向到mylog.txt中;
重定向的功能十分強大,有興趣的可以去嘗試各種不同的組合,看看前後位置變下會有什麼結果?
某些時候我們可能並不希望記錄什麼標准輸出或者是錯誤輸出,那可以用mysh >null 2>null或者mysh >/dev/null 2>/dev/null;
I/O重定向詳解
1、 基本概念(這是理解後面的知識的前提,請務必理解)
a、 I/O重定向通常與 FD有關,shell的FD通常為10個,即 0~9;
b、 常用FD有3個,為0(stdin,標准輸入)、1(stdout,標准輸出)、2(stderr,標准錯誤輸出),默認與keyboard、monitor、monitor有關;
c、 用 < 來改變讀進的數據信道(stdin),使之從指定的檔案讀進;
d、 用 > 來改變送出的數據信道(stdout, stderr),使之輸出到指定的檔案;
e、 0 是 < 的默認值,因此 < 與 0<是一樣的;同理,> 與 1> 是一樣的;
f、 在IO重定向 中,stdout 與 stderr 的管道會先准備好,才會從 stdin 讀進資料;
g、 管道「|」(pipe line):上一個命令的 stdout 接到下一個命令的 stdin;
h、 tee 命令是在不影響原本 I/O 的情況下,將 stdout 復制一份到檔案去;
i、 bash(ksh)執行命令的過程:分析命令-變數求值-命令替代(``和$( ))-重定向-通配符展開-確定路徑-執行命令;
j、 ( ) 將 command group 置於 sub-shell 去執行,也稱 nested sub-shell,它有一點非常重要的特性是:繼承父shell的Standard input, output, and error plus any other open file descriptors。
k、 exec 命令:常用來替代當前 shell 並重新啟動一個 shell,換句話說,並沒有啟動子 shell。使用這一命令時任何現有環境都將會被清除。exec 在對文件描述符進行操作的時候,也只有在這時,exec 不會覆蓋你當前的 shell 環境。
2、 基本IO
cmd > file 把 stdout 重定向到 file 文件中;
cmd >> file 把 stdout 重定向到 file 文件中(追加);
cmd 1> fiel 把 stdout 重定向到 file 文件中;
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;
cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
cmd < file >file2 cmd 命令以 file 文件作為 stdin,以 file2 文件作為 stdout;
cat <>file 以讀寫的方式打開 file;
cmd < file cmd 命令以 file 文件作為 stdin;
cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符。
3、 進階IO
>&n 使用系統調用 p (2) 復制文件描述符 n 並把結果用作標准輸出;
<&n 標准輸入復制自文件描述符 n;
<&- 關閉標准輸入(鍵盤);
>&- 關閉標准輸出;
n<&- 表示將 n 號輸入關閉;
n>&- 表示將 n 號輸出關閉;
上述所有形式都可以前導一個數字,此時建立的文件描述符由這個數字指定而不是預設的 0 或 1。如:
... 2>file 運行一個命令並把錯誤輸出(文件描述符 2)定向到 file。
... 2>&1 運行一個命令並把它的標准輸出和輸出合並。(嚴格的說是通過復制文件描述符 1 來建立文件描述符 2 ,但效果通常是合並了兩個流。)
我們對 2>&1詳細說明一下 :2>&1 也就是 FD2=FD1 ,這里並不是說FD2 的值 等於FD1的值,因為 > 是改變送出的數據信道,也就是說把 FD2 的 「數據輸出通道」 改為 FD1 的 「數據輸出通道」。如果僅僅這樣,這個改變好像沒有什麼作用,因為 FD2 的默認輸出和 FD1的默認輸出本來都是 monitor,一樣的!但是,當 FD1 是其他文件,甚至是其他 FD 時,這個就具有特殊的用途了。請大家務必理解這一點。
exec 0exec 1>outfilename # 打開文件outfilename作為stdout。
exec 2>errfilename # 打開文件 errfilename作為 stderr。
exec 0<&- # 關閉 FD0。
exec 1>&- # 關閉 FD1。
exec 5>&- # 關閉 FD5。
這樣就完成了Linux重定向的學習。
㈣ linux伺服器接收發送報文
它使用狀態的「關聯」(協會),兩對SCTP用戶協議之間的信息交換條款的定義。 SCTP也是一個面向連接的,但在概念上,SCTP「關聯」更廣泛的TCP連接相比,只有一個TCP連接的源地址和目的地址,SCTP提供了另一種方式為每個SCTP端點的運輸提供了一組地址等端點傳輸地址= IP地址+埠號。
繼承的TCP功能的基礎上,SCTP提供了一些額外的功能:
1有序傳輸中的用戶數據的多個「流」(流)
「流」是一系列的TCP中指的位元組,而在SCTP是指某個系列的用戶消息被發送到上層協議,這些消息的順序與在流之內的其他消息。當建立關聯,SCTP的用戶的數據流的數目,可被提供給相關聯的載體。此號碼被商定的流的??數目與源端的用戶相關聯的消息。 SCTP為每個郵件中的鏈接發送給同行的流分配的序列號。在接收端,SCTP,以確保在一個給定的消息流的順序被發送。另一方面,當工作流正在等待的下一個非順序的用戶消息的其他數據流的發送時,將繼續下去。
2根據所發現的路徑MTU(最大傳輸單元)的大小的用戶數據切片
為了確保一致的SCTP報文發送到較低的路徑MTU,SCTP用戶消息分得一杯羹。傳遞給上部SCTP用戶在接收端,切片重組。
3選擇性確認(SACK)和擁塞控制
選擇性確認數據包丟失,TCP序列號被返回給發送者已經成功地接收到的數據位元組的序列號(不包括根據確認的位元組數)的認可,並在SCTP反饋給發件人丟失,並要求序列號的消息重發。
SCTP使用的TCP擁塞控制技術,包括慢啟動,擁塞避免和快速重傳。因此,當一個共存和TCP應用程序時,SCTP的應用程序可以接收部分SCTP的網路資源。
4塊(塊)結合。
選擇性地綁定到??SCTP包,即多個用戶消息的消息發送到一個或多個數據結構的SCTP - 「塊」,SCTP儲備應用程序消息傳遞框架邊界。不同類型的塊可以綁定到一個SCTP報文,但任何一個數據塊之前,必須放在控制塊。
5路徑管理
SCTP路徑管理功能主要是負責為目的地的運輸提供了一個選擇的目標地址的傳輸地址的遠程地址,它是基於兩個方面:SCTP用戶的說明和合格的目的地。當其他流量控制不能提供可達性信息,定期掃描路徑管理功能鏈接到SCTP報告在遠程傳輸地址發生變化的可達性。 SCTP路徑管理功能模塊還負責建立鏈接,該報告的末端的本地地址,傳輸地址告訴SCTP用戶的遠程回報。
6,支持多歸位
當SCTP傳輸的數據包的目的IP地址,如果IP地址是不可達的,SCTP消息重新路由到備用的IP地址。因此,在相關聯,即使在兩端的,可以容忍網路級別的錯誤的一端。
7對拒絕服務攻擊(DoS)
DoS攻擊的方法有很多種,最基本的DoS攻擊就是利用合理的服務請求來佔用過多的資源,從而使合法用戶無法得到服務的響應。 SYN洪水攻擊是一種拒絕服務攻擊實例,是最好的方式了黑客攻擊。針對SYN Flooding攻擊的目標主機上,SCTP關聯的初始化階段,實施以「Cookie」的安全機制。
8支持多種傳輸模式
嚴格有序轉移(如TCP)的有序轉移(如每流)和無序傳輸(如UDP)的一部分。
2 SCTP報文結構
SCTP分組結構的數據分組,第一部分可以遵循由可變長度的數據塊中的一個或多個。塊類型 - 長度 - 值(TLV)格式。源埠,目的埠,校驗的意義是與TCP類似的意義。確認標簽保存價值的交流,第一次在SCTP握手初始標簽。如果任何SCTP報文不包括聯想這樣的標簽,當到達的時間將是在接收端丟棄。
包含的塊類型,標記的轉讓處理,在每個塊中的塊長度,TLV。不同的塊類型,可用於發送控制信息或數據。
發送序列號(TSN)和流序列號(SSN)是兩個不同的序列號,TSN,以確保可靠性整個關聯的SSN保證整個流的有序性,因此,在發送的數據的可靠性訂貨區分開來。
3 SCTP數據傳輸
4.1 SCTP四次握手的原則,抵制SYN洪水攻擊
SCTP關聯定義為:主機A的IP地址] + [主機的埠] + [IP地址的主機B] + [B主機埠。因此,相應的組的每個端部中的IP地址的任何一個可以是標記相關的,通過四向握手,作為相應的源/目的地地址和結束SCTP主機交換通信狀態。
SYN洪水利用所固有的脆弱性,TCP / IP,TCP三次握手面向連接的SYN洪水的存在基礎。 SYN Flooding攻擊原理是:大量的惡意攻擊者向伺服器發送一個SYN包,伺服器發出一個SYN + ACK數據包無法收到客戶端的ACK包(第三次握手無法完成),伺服器端將保持一個非常大名單的半連接,消耗大量的CPU時間和內存資源,也能保持此列表中的IP SYN + ACK的重試。伺服器端將忙於處理攻擊者偽造的TCP連接請求以及沒有時間忽略正常的客戶請求,從正常的客戶的角度來看,伺服器失去了響應。
在SCTP四次握手的INIT消息,接收端不保存任何狀態信息或分配的任何資源,這樣你就可以防止DoS攻擊,如SYN洪水。 INIT-ACK消息發送,使用了一種機制 - 「狀態曲奇」的cookie的發送者建立自己的國家所需的全部信息。
SCTP產生一個Cookie狀態過程如下:
1。收到的INIT發出的INIT ACK數據塊的信息來創建一個關聯的TCB(傳輸控制塊)。
在TCB中,生存在協議參數設置為「有效的Cookie時間,創建日期設置為當前日期。
3根據TCB收集重建的TCB所需的最小的子集的信息,這個子集和密鑰來產生一個MAC(消息認證碼)。
用最小的子集的信息和MAC產生狀態Cookie。
5。在發送的INIT ACK(含狀態cookie參數),發送者必須刪除TCB,以及任何相關的新的關聯的本地資源。
INIT和INIT ACK必須包含建立初始狀態所需的參數:一組IP地址,以確保可靠的傳輸的初始TSN,每一個收到的SCTP包中必須包含初始標簽,每一端的請求發出的數據流的數量並在每一端可以支持接收的數據流的數量。交換這些消息,INIT COOKIE-ECHO消息的發送者被送回的狀態Cookie。接收端在接收COOKIE-ECHO餅乾的狀態,完成重建自己的國家和回送COOKIE-ACK確認該協會已成立。 COOKIE-ECHO和COOKIE-ACK的用戶數據信息可以綁定到每個包。
因此,使用上述的以這樣的方式,即使接收INIT消息,接收終端,也沒有任何的資源消耗:它既不分配任何系統資源,並且不保存的新的關聯的狀態,它是只對口援建的狀態狀態的Cookie作為一個參數,它包含每一個回送的INIT-ACK消息,並最終狀態cookie COOKIE-ECHO消息發送回。
2.2 SCTP的數據交換
正常的兩個SCTP主機之間的數據交換。 SCTP主機發送SACK塊,用來確認每一個收到的SCTP報文。 SACK的完全描述的接收側的狀態,可以使發送側決定的重發,因此,在根據對SACK。 SCTP支持TCP快速重傳和超時重傳演算法類似。
SCTP和TCP數據包丟失,使用不同的機制:TCP序列號空缺已被填補缺口,直到收到,發送丟失的數據包數據的序列號是高於之前。但是,SCTP即使收到訂單的序列號空缺,並會不斷發回數據。
3.3 SCTP關聯關閉
面向連接的傳輸協議,SCTP還可以使用與TCP的三次握手關閉相關,但有一點不同:在「關聯關閉」的過程中保持連接打開一個TCP終端,新的數據來自對等體,但不支持TCP SCTP這個「半封閉」狀態。 1日發布由主機A「OFF」(關閉)塊終止與主機B,主機A就會進入「SHUTDOWN-PENDING」狀態,相應的動作是:不再接受上層應用的數據,並且只發送隊列中剩餘的數據,進入「SHUTDOWN-SENT」狀態。
一旦主機B接收到「OFF」擋,進入「SHUTDOWN-RECEIVED」狀態,與主機A,不再接受上層應用的數據,只發送隊列中剩餘的數據。
主機A再發送「關閉」塊,剩餘的數據已經達到主機B發出的通知,並重申,該協會正在關閉。
當第二個獲得「關閉」塊,主機B發送確認關閉「塊。
隨後的主機發送「關閉」結束「塊完成關閉的關聯。
4結論
SCTP是開發用於傳輸信令流量,但它有一定的優勢,先進的TCP協議機制,如選擇性確認,快速重傳,無序提交,因此,它也滿足高性能傳輸的需求,這將賦予它更廣泛的應用的要求。目前,有各種各樣的操作系統都支持SCTP,如Linux,AIX和Solaris上,Windows中,FressBSD。不同的協議之間的互操作性測試取得成功,揭示了SCTP正走向商業產品的道路。
IEFT致力於SCTP進一步的,以使其更好地滿足下一代應用的需求,如支持IPv6地址,解決對端的IPv6站點本地和鏈路本地地址不連接的問題,以及在現有的關聯動態添加或刪除IP地址,而無需重新啟動關聯。
此外,在第三代移動通信,SCTP信令承載層的選擇之一,它的應用及其性能評價是還待研究。
參考文獻:
㈤ linux伺服器流出流量過大 是否木馬
不是木馬,是設置問題,下面是流量的控制方法
一、Linux 流量控制過程分二種:
1、隊列控制 即 QOS, 瓶頸處的發送隊列的規則控制,常見的有 SFQ PRIO
2、流量控制 即帶寬控制 , 隊列的排隊整形, 一般為 TBF HTB
二、Linux 流量控制演算法分二種:
1、無類演算法 用於樹葉級無分支的隊列,例如:SFQ
2、分類演算法 用於多分支的隊列,例如:PRIO TBF HTB
三、具體實現:
1. 在網卡上建立 以SFQ演算法的限流
#tc qdisc add dev eth0 root handle 1: sfq
SFQ 參數有 perturb( 重新調整演算法間隔 ) quantum 基本上不需要手工調整 :
handle 1: 規定演算法編號 .. 可以不用設置由系統指定 ..
#tc qdisc sh dev eth0 顯示演算法
#tc qd del dev eth0 root 刪除 注 : 默認 eht0 支持 TOS
2. 在網卡建立以 TBF演算法的限流
#tc qd add dev eth1 root handle 1: tbf rate 256kbit burst 10000 latency 50ms
速率 256kbit 突發傳輸 10k 最大延遲 50ms
#tc -s qd sh dev eth1 統計
#tc qd del dev eth1 root 刪除
3. 在網卡建立 PRIO
#tc qdisc add dev eth0 root handle 1: prio
# 此命令立即創建了類 : 1:1, 1:2, 1:3 ( 預設三個子類 )
#tc qdisc add dev eth0 parent 1:1 handle 10: sfq
#tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 20kbit buffer 1600 limit 3000
注 : 此為 TBF 限速的另一寫法 , 前文有講解 .
#tc qdisc add dev eth0 parent 1:3 handle 30: sfq
4. WEB 伺服器的流量控制為 5Mbps,SMTP 流量控制在 3Mbps 上 . 而且二者一共不得超過 6Mbps, 互相之間允許借用帶寬
#tc qdisc add dev eth0 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8
#tc class add dev eth0 parent 1:0 classid 1:1 cbq bandwidth 100Mbit rate 6Mbit weight
0.6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
這部分按慣例設置了根為 1:0, 並且綁定了類 1:1. 也就是說整個帶寬不能超過 6Mbps.
#tc class add dev eth0 parent 1:1 classid 1:3 cbq bandwidth 100Mbit rate 5Mbit weight
0.5Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000
#tc class add dev eth0 parent 1:1 classid 1:4 cbq bandwidth 100Mbit rate 3Mbit weight
0.3Mbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000
建立了 2 個類 . 注意我們如何根據帶寬來調整 weight 參數的 . 兩個類都沒有配置成"bounded", 但它們都連
接到了類 1:1 上 , 而 1:1 設置了"bounded". 所以兩個類的總帶寬不會超過 6Mbps. 別忘了 , 同一個 CBQ 下面的子
類的主號碼都必須與 CBQ 自己的號碼相一致 !
#tc qdisc add dev eth0 parent 1:3 handle 30: sfq
#tc qdisc add dev eth0 parent 1:4 handle 40: sfq
預設情況下 , 兩個類都有一個 FIFO 隊列規定 . 但是我們把它換成 SFQ 隊列 , 以保證每個數據流都公平對待 .
#tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid
1:3
#tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip sport 25 0xffff flowid
1:4
6. 過濾器過濾示例
#tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip dport 22 0xffff flowid 10:1
在 10: 節點添加一個過濾規則 , 優先權 1: 凡是去往 22 口 ( 精確匹配 ) 的 IP 數據包 , 發送到頻道 10:1..
#tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match ip sport 80 0xffff flowid 10:1
在 10: 節點添加一個過濾規則 , 優先權 1: 凡是來自 80 口 ( 精確匹配 ) 的 IP 數據包 , 發送到頻道 10:1..
#tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
在 eth0 上的 10: 節點添加一個過濾規則 , 它的優先權是 2: 凡是上二句未匹配的 IP 數據包 , 發送到頻道 10:2..
#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1
去往 4.3.2.1 的包發送到頻道 10:1 其它參數同上例
#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1
來自 1.2.3.4 的包發到頻道 10:1
#tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
凡上二句未匹配的包送往 10:2
#tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32 match
ip sport 80 0xffff flowid 10:1
可連續使用 match, 匹配來自 1.2.3.4 的 80 口的數據包
㈥ 在linux下c語言中,如何給一個數據流中的某些數據包加上延遲(數據包之間的間隔本來是固定的)
用sleep可以嘛?我也是初學的。
㈦ linux伺服器要怎樣針對IP流量限制
不是木馬,是設置問題,下面是流量的控制方法一、Linux流量控制過程分二種:1、隊列控制即QOS,瓶頸處的發送隊列的規則控制,常見的有SFQPRIO2、流量控制即帶寬控制,隊列的排隊整形,一般為TBFHTB二、Linux流量控制演算法分二種:1、無類演算法用於樹葉級無分支的隊列,例如:SFQ2、分類演算法用於多分支的隊列,例如:PRIOTBFHTB三、具體實現:1.在網卡上建立以SFQ演算法的限流#tcqdiscadddeveth0roothandle1:sfqSFQ參數有perturb(重新調整演算法間隔)quantum基本上不需要手工調整:handle1:規定演算法編號..可以不用設置由系統指定..#tcqdiscshdeveth0顯示演算法#tcqddeldeveth0root刪除注:默認eht0支持TOS2.在網卡建立以TBF演算法的限流#tcqdadddeveth1roothandle1:速率256kbit突發傳輸10k最大延遲50ms#tc-sqdshdeveth1統計#tcqddeldeveth1root刪除3.在網卡建立PRIO#tcqdiscadddeveth0roothandle1:prio#此命令立即創建了類:1:1,1:2,1:3(預設三個子類)#tcqdiscadddeveth0parent1:1handle10:sfq#tcqdiscadddeveth0parent1:2handle20:注:此為TBF限速的另一寫法,前文有講解.#tcqdiscadddeveth0parent1:3handle30:sfq4.WEB伺服器的流量控制為5Mbps,SMTP流量控制在3Mbps上.而且二者一共不得超過6Mbps,互相之間允許借用帶寬#tcqdiscadddeveth0roothandle1:#tcclassadddeveth0parent1:0classid1:.這部分按慣例設置了根為1:0,並且綁定了類1:1.也就是說整個帶寬不能超過6Mbps.#tcclassadddeveth0parent1:1classid1:.#tcclassadddeveth0parent1:1classid1:.建立了2個類.注意我們如何根據帶寬來調整weight參數的.兩個類都沒有配置成"bounded",但它們都連接到了類1:1上,而1:1設置了"bounded".所以兩個類的總帶寬不會超過6Mbps.別忘了,同一個CBQ下面的子類的主號碼都必須與CBQ自己的號碼相一致!#tcqdiscadddeveth0parent1:3handle30:sfq#tcqdiscadddeveth0parent1:4handle40:sfq預設情況下,兩個類都有一個FIFO隊列規定.但是我們把它換成SFQ隊列,以保證每個數據流都公平對待.#tcfilteradddeveth0parent1::3#tcfilteradddeveth0parent1::46.過濾器過濾示例#::1在10:節點添加一個過濾規則,優先權1:凡是去往22口(精確匹配)的IP數據包,發送到頻道10:1..#::1在10:節點添加一個過濾規則,優先權1:凡是來自80口(精確匹配)的IP數據包,發送到頻道10:1..#:prio2flowid10:2在eth0上的10:節點添加一個過濾規則,它的優先權是2:凡是上二句未匹配的IP數據包,發送到頻道10:2..#tcfilteradddeveth0parent10:.3.2.1/32flowid10:1去往4.3.2.1的包發送到頻道10:1其它參數同上例#tcfilteradddeveth0parent10:.2.3.4/32flowid10:1來自1.2.3.4的包發到頻道10:1#:prio2flowid10:2凡上二句未匹配的包送往10:2#tcfilteradddeveth0parent10:.3.2.1/:1可連續使用match,匹配來自1.2.3.4的80口的數據包
㈧ Linux系統如何重定向數據流
echo "aaaaa" > 1
這樣就把aaaaa存放在了文件1的裡面。可以通過cat 1來看到,裡面有aaaaa
echo 「bbbbb」>>1
這樣是把bbbbb追加到文件1的尾部。可以通過cat 1看到,裡面有aaaaa bbbbb
>是覆蓋掉文件裡面全部內容,>>是追加內容到文件的尾部,不會覆蓋