Linux網(wǎng)絡(luò)測試工具淺析
本文是介紹管理Linux系統(tǒng)網(wǎng)絡(luò)性能技巧的文章,主要介紹了route、netstat、tcpdump三種網(wǎng)絡(luò)管理測試工具的使用方法及其可實現(xiàn)的功能。
Linux網(wǎng)絡(luò)測試工具route
在配置網(wǎng)絡(luò)時,要為機器指定接收數(shù)據(jù)包時該包要經(jīng)過的路徑。在Linux系統(tǒng)中,提供一個命令route,這個命令可以為ifconfig命令配置的網(wǎng)卡設(shè)置靜態(tài)路由。這種設(shè)置工作通常在/etc/rc.d/rc.inet1中引入,在系統(tǒng)引導(dǎo)時進行。
我們通過幾個例子來說明如何使用route命令:
routeadd-net127.0.0.0
這個命令將向路由表中添加一個指定地址或者網(wǎng)絡(luò)的路由。注意此時網(wǎng)絡(luò)為A類地址,掩碼被設(shè)置為255.0.0.0,這個新添加的條目被連接到lo設(shè)備上。
routeadd-netxxx.xxx.xxx.xxxnetmask255.255.255.0deveth0
這個命令為IP地址為xxx.xxx.xxx.xxx的主機增加一個路由,它的網(wǎng)絡(luò)掩碼被設(shè)置為255.255.255.0。
routedel-netxxx.xxx.xxx.xxx
此命令將刪除xxx.xxx.xxx.xxx這個網(wǎng)絡(luò)的路由。
使用route命令還可以很方便地對整個網(wǎng)絡(luò)的路由信息進行管理,其輸出結(jié)果是網(wǎng)絡(luò)的路由表。如下所示:
- [root@lee/root]#route
- KernelIProutingtable
- DestinationGatewayGenmaskFlagsMetricRefUseIface
- 10.10.8.224*255.255.255.255UH000eth0
- 10.10.8.0*255.255.255.0U000eth0
- 127.0.0.0*255.0.0.0U000lo
- defaultdgc8.njupt.edu0.0.0.0UG000eth0
- defaultdgc8.njupt.edu0.0.0.0UG100eth0
- [root@lee/root]#
輸出結(jié)果中各個字段的含義是:
·Destination表示路由的目標(biāo)IP地址。
·Gateway表示網(wǎng)關(guān)使用的主機名或者是IP地址。上面輸出的"*"表示沒有網(wǎng)關(guān)。
·Genmask表示路由的網(wǎng)絡(luò)掩碼。在把它與路由的目標(biāo)地址進行比較之前,內(nèi)核通過Genmask和數(shù)據(jù)包的IP地址進行按位"與"操作來設(shè)置路由。
·Flags是表示路由的標(biāo)志??捎玫臉?biāo)志及其意義是:U表示路由在啟動,H表示target是一臺主機,G表示使用網(wǎng)關(guān),R表示對動態(tài)路由進行復(fù)位設(shè)置;D表示動態(tài)安裝路由,M表示修改路由,!表示拒絕路由。、
·Metric表示路由的單位開銷量。
·Ref表示依賴本路由現(xiàn)狀的其它路由數(shù)目。
·Use表示路由表條目被使用的數(shù)目。
·Iface表示路由所發(fā)送的包的目的網(wǎng)絡(luò)。
通過查看這些輸出信息,我們就可以方便地管理網(wǎng)絡(luò)的路由表了。
netstat
netstat命令是一個監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具,它可以顯示路由表、實際的網(wǎng)絡(luò)連接以及每一個網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息。在計算機上執(zhí)行netstat后,其輸出結(jié)果如下所示:
- [root@lee/root]#netstat
- ActiveInternetconnections(w/oservers)
- ProtoRecv-QSend-QLocalAddressForeignAddressState
- ActiveUNIXdomainsockets(w/oservers)
- ProtoRefCntFlagsTypesStateI-NodePath
- Unix5[]DGRAM460/dev/log
- Unix0[]STREAMCONNECTED173@00000014
- Unix0[]DGRAM662
- Unix0[]DGRAM631
- Unix0[]DGRAM544
- Unix0[]DGRAM484
- Unix0[]DGRAM470
- [root@lee/root]#
從整體上看,netstat的輸出結(jié)果可以分為兩個部分:***部分:是ActiveInternetconnections,稱為有源TCP連接,在上面的輸出結(jié)果中,這一部分沒有內(nèi)容,表示暫時還沒有TCP連接。第二部分:是ActiveUNIXdomainsockets,稱為有源Unix域套接口。輸出結(jié)果顯示的是Unix域套接口的連接情況:
·Proto顯示連接使用的協(xié)議。
·RefCnt表示連接到本套接口上的進程號。
·Types顯示套接口的類型。
·State顯示套接口當(dāng)前的狀態(tài)。
·Path表示連接到套接口的其它進程使用的路徑名。
可以用netstat-a來查看所有套接字的狀態(tài),這在您調(diào)試網(wǎng)絡(luò)程序的時候是非常有用的。netstat-r將顯示路由表的內(nèi)容,一般還要同時指定"-n"選項,這樣可以得到數(shù)字格式的地址,也可顯示默認(rèn)路由器的IP地址。使用netstat-i則將顯示所有的網(wǎng)絡(luò)接口信息。使用netstat還可以獲得當(dāng)前的網(wǎng)絡(luò)狀態(tài)以及網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),這在實際中是非常有用的。
tcpdump
tcpdump命令用于監(jiān)視TCP/IP連接并直接讀取數(shù)據(jù)鏈路層的數(shù)據(jù)包頭。您可以指定哪些數(shù)據(jù)包被監(jiān)視、哪些控制要顯示格式。例如我們要監(jiān)視所有Ethernet上來往的通信,執(zhí)行下述命令:
tcpdump-ieth0
即使是在一個相對平靜的網(wǎng)絡(luò)上,也有很多的通信,所以我們可能只需要得到我們感興趣的那些數(shù)據(jù)包的信息。在一般情況下,TCP/IP棧只為本地主機接收入站的數(shù)據(jù)包綁定同時忽略網(wǎng)絡(luò)上的其它計算機編址(除非您使用的是一臺路由器)。當(dāng)運行tcpdump命令時,它會將TCP/IP棧設(shè)置為promiscuous模式。該模式可接收所有的數(shù)據(jù)包并使其有效顯示。如果我們關(guān)心的只是我們本地主機的通信情況,一種方法是使用“-p”參數(shù)禁止promiscuous模式,還有一種方法就是指定主機名:
tcpdump-ieth0hosthostname
此時,系統(tǒng)將只對名為hostname的主機的通信數(shù)據(jù)包進行監(jiān)視。主機名可以是本地主機,也可以是網(wǎng)絡(luò)上的任何一臺計算機。下面的命令可以讀取主機hostname發(fā)送的所有數(shù)據(jù):
tcpdump-ieth0srchosthostname
下面的命令可以監(jiān)視所有送到主機hostname的數(shù)據(jù)包:
tcpdump-ieth0dsthosthostname
我們還可以監(jiān)視通過指定網(wǎng)關(guān)的數(shù)據(jù)包:
tcpdump-ieth0gatewayGatewayname
如果你還想監(jiān)視編址到指定端口的TCP或UDP數(shù)據(jù)包,那么執(zhí)行以下命令:
tcpdump-ieth0hosthostnameandport80
該命令將顯示從每個數(shù)據(jù)包傳出的頭和來自主機hostname對端口80的編址。端口80是系統(tǒng)默認(rèn)的HTTP服務(wù)端口號。如果我們只需要列出送到80端口的數(shù)據(jù)包,用dstport;如果我們只希望看到返回80端口的數(shù)據(jù)包,用srcport。
【編輯推薦】