網(wǎng)絡(luò)命令原理自我匯總

常用判斷網(wǎng)絡(luò)是否中斷的方法:

1.Traceroute,Tracert

traceroute命令用于追蹤數(shù)據(jù)包在網(wǎng)絡(luò)上的傳輸時的全部路徑,它默認發(fā)送的數(shù)據(jù)包大小是40字節(jié)段誊。traceroute 的第一個作用就是故意設(shè)置特殊的 TTL,來追蹤去往目的地時沿途經(jīng)過的路由器。

它們用于顯示數(shù)據(jù)包在IP網(wǎng)絡(luò)中經(jīng)過的路由器的IP地址皮迟,是利用IP數(shù)據(jù)包的存活時間(TTL)值來實現(xiàn)其功能的。

基于UDP實現(xiàn)

在基于UDP的實現(xiàn)中桑寨,客戶端發(fā)送的數(shù)據(jù)包是通過UDP協(xié)議來傳輸?shù)姆幔褂昧艘粋€大于30000的端口號,服務(wù)器在收到這個數(shù)據(jù)包的時候會返回一個端口不可達的ICMP錯誤信息西疤,客戶端通過判斷收到的錯誤信息是TTL超時還是端口不可達來判斷數(shù)據(jù)包是否到達目標主機烦粒,具體的流程如圖:

基于UDP實現(xiàn)的traceroute

客戶端發(fā)送一個TTL為1,端口號大于30000的UDP數(shù)據(jù)包代赁,到達第一站路由器之后TTL被減去1扰她,返回了一個超時的ICMP數(shù)據(jù)包,客戶端得到第一跳路由器的地址芭碍。

客戶端發(fā)送一個TTL為2的數(shù)據(jù)包徒役,在第二跳的路由器節(jié)點處超時,得到第二跳路由器的地址窖壕。

客戶端發(fā)送一個TTL為3的數(shù)據(jù)包忧勿,數(shù)據(jù)包成功到達目標主機,返回一個端口不可達錯誤瞻讽,traceroute結(jié)束鸳吸。

Linux和macOS系統(tǒng)自帶了一個traceroute指令,可以結(jié)合Wireshark抓包來看看它的實現(xiàn)原理速勇。首先對百度的域名進行traceroute:traceroute www.baidu.com晌砾,每一跳默認發(fā)送三個數(shù)據(jù)包,我們會看到下面這樣的輸出:

traceroute.png

對該域名的IP:115.239.210.27進行traceroute烦磁,此時Wireshark抓包的結(jié)果如下:

抓包結(jié)果

注意看紅框處的內(nèi)容养匈,跟第一張圖對比哼勇,可以看到traceroute程序首先通過UDP協(xié)議向目標地址115.239.210.27發(fā)送了一個TTL為1的數(shù)據(jù)包,然后在第一個路由器中TTL超時呕乎,返回一個錯誤類型為Time-to-live exceeded的ICMP數(shù)據(jù)包积担,此時我們通過該數(shù)據(jù)包的源地址可知第一站路由器的地址為10.242.0.1。之后只需要不停增加TTL的值就能得到每一跳的地址了猬仁。

然而一直跑下去會發(fā)現(xiàn)帝璧,traceroute并不能到達目的地,當TTL增加到一定大小之后就一直拿不到返回的數(shù)據(jù)包了:

結(jié)果全是丟失

其實這個時候數(shù)據(jù)包已經(jīng)到達目標服務(wù)器了逐虚,但是因為安全問題大部分的應(yīng)用服務(wù)器都不提供UDP服務(wù)(或者被防火墻擋掉)聋溜,所以我們拿不到服務(wù)器的任何返回谆膳,程序就理所當然的認為還沒有結(jié)束叭爱,一直嘗試增加數(shù)據(jù)包的TTL。

目前在網(wǎng)上找到許多開源iOS traceroute實現(xiàn)大多都是基于UDP的方案漱病,實際用起來并不能達到想要的效果买雾,所以我們需要采用另一種方案來實現(xiàn)。

-I???? 使用ICMP ECHO進行探測杨帽。

?????? -T??? 使用TCP SYN進行探測漓穿。

?????? -U???? 使用UDP報文進行探測(默認情況)。對于無特權(quán)用戶來說注盈,只允許使用UDP報文進行探測晃危。

?????? -d???? 允許進行socket級別的調(diào)試(當Linux kernel支持它的時候)Enable socket level debugging (when the Linux kernel supports it)

基于ICMP實現(xiàn):Tracert

Tracert 命令用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網(wǎng)絡(luò)上其他主機的路由。

首先老客,tracert送出一個TTL是1的IP 數(shù)據(jù)包到目的地僚饭,當路徑上的第一個路由器收到這個數(shù)據(jù)包時,它將TTL減1胧砰。此時鳍鸵,TTL變?yōu)?,所以該路由器會將此數(shù)據(jù)包丟掉尉间,并送回一個「ICMP time exceeded」消息(包括發(fā)IP包的源地址偿乖,IP包的所有內(nèi)容及路由器的IP地址),tracert?收到這個消息后哲嘲,便知道這個路由器存在于這個路徑上贪薪,接著tracert?再送出另一個TTL是2 的數(shù)據(jù)包,發(fā)現(xiàn)第2 個路由器...... tracert?每次將送出的數(shù)據(jù)包的TTL 加1來發(fā)現(xiàn)另一個路由器眠副,這個重復(fù)的動作一直持續(xù)到某個數(shù)據(jù)包 抵達目的地画切。當數(shù)據(jù)包到達目的地后,該主機則不會送回ICMP time exceeded消息侦啸,一旦到達目的地槽唾,由于tracert通過UDP數(shù)據(jù)包向不常見端口(30000以上)發(fā)送數(shù)據(jù)包丧枪,因此會收到「ICMP port unreachable」消息,故可判斷到達目的地庞萍。

上述方案失敗的原因是由于服務(wù)器對于UDP數(shù)據(jù)包的處理拧烦,所以在這一種實現(xiàn)中我們不使用UDP協(xié)議,而是直接發(fā)送一個ICMP回顯請求(echo request)數(shù)據(jù)包钝计,服務(wù)器在收到回顯請求的時候會向客戶端發(fā)送一個ICMP回顯應(yīng)答(echo reply)數(shù)據(jù)包恋博,在這之后的流程還是跟第一種方案一樣。這樣就避免了我們的traceroute數(shù)據(jù)包被服務(wù)器的防火墻策略墻掉私恬。

采用這種方案的實現(xiàn)流程如下:

基于ICMP實現(xiàn)的traceroute

客戶端發(fā)送一個TTL為1的ICMP請求回顯數(shù)據(jù)包债沮,在第一跳的時候超時并返回一個ICMP超時數(shù)據(jù)包,得到第一跳的地址本鸣。

客戶端發(fā)送一個TTL為2的ICMP請求回顯數(shù)據(jù)包疫衩,得到第二跳的地址。

客戶端發(fā)送一個TTL為3的ICMP請求回顯數(shù)據(jù)包荣德,到達目標主機闷煤,目標主機返回一個ICMP回顯應(yīng)答,traceroute結(jié)束涮瞻。

可以看出與第一種實現(xiàn)相比鲤拿,區(qū)別主要在發(fā)送的數(shù)據(jù)包類型以及對于結(jié)束的判斷上,大體的流程還是一致的署咽。

traceroute是檢測到目的主機路由的工具近顷,它并不能保證從本機發(fā)出的兩個IP數(shù)據(jù)報有相同的路由。

traceroute 默認發(fā)送的是 UDP 包宁否,而非 ICMP窒升,可以通過 -I 參數(shù)來使 traceroute 發(fā)送 ICMP 包,另外還可以使用 -T 參數(shù)來測試 syn 握手家淤。

另外使用 -p 參數(shù)可以指定端口异剥,對于 UDP 而言,每進行一個 probe 端口就會在原來的基礎(chǔ)上加 1絮重;而對于 ICMP 而言冤寿,可以用來初始化 icmp sequence 值,同樣的青伤,每進行一次 probe督怜,sequence 會加 1。

對于 TCP 而言則指定發(fā)送的端口

主要原因是traceroute的運行方式狠角。它向第一臺主機發(fā)送TTL為1的UDP(或Windows上的ICMP)數(shù)據(jù)包号杠,并在收到超時答復(fù)(或通過內(nèi)部超時)后,為具有TTL的下一臺主機生成下一個數(shù)據(jù)包。 2個姨蟋,依此類推(以此類推(將每個主機的TTL加1)屉凯。因此,traceroute的總時間包括依次發(fā)送和接收每個主機的數(shù)據(jù)包眼溶。

mtr在確定數(shù)據(jù)包采用的路徑后悠砚,并行發(fā)送所有ICMP ECHO數(shù)據(jù)包。

簡單總結(jié)一下 linode 那邊文檔的表述堂飞,traceroute 的那篇類似灌旧。如果只是某一個節(jié)點出現(xiàn)丟包,可能是由于路由限制了 ICMP 的流量绰筛;如果是從某個點開始接下去的幾個點都出現(xiàn)不同程度的丟包枢泰,這個就可能是真正意義上的丟包了,可能是由于路由器撐不住了铝噩,或者直接把這部分包給過濾掉了衡蚂,當然,由于去的包跟回來的包走的路由可能不一樣薄榛,丟包可能是發(fā)生在回來的路上讳窟。因此最好的辦法是 srs/dst 兩邊同時 mtr,不過這個一般情況下只有一方能實現(xiàn)敞恋,而另一方的控制權(quán)不在自己的手上。

盡管 TCP 有重傳機制谋右,當丟包達到一定的程度的時候還是會影響網(wǎng)路的性能硬猫,尤其在 latency 比較大的時候,如果 latency 比較小改执,比如在幾ms之內(nèi)啸蜜,出現(xiàn)小部分的丟包也可以接受,但是如果 latency 本身就達到了 3,400ms辈挂,再來個 10% 的丟包衬横,效果可想而知了≈盏伲基本就是 latency 可以接受但是丟包律高就不可以接受了蜂林。

2.TCPdump

Linux抓包是通過注冊一種虛擬的底層網(wǎng)絡(luò)協(xié)議來完成對網(wǎng)絡(luò)報文(準確的說是網(wǎng)絡(luò)設(shè)備)消息的處理權(quán)。當網(wǎng)卡接收到一個網(wǎng)絡(luò)報文之后拇泣,它會遍歷系統(tǒng)中所有已經(jīng)注冊的網(wǎng)絡(luò)協(xié)議噪叙,例如以太網(wǎng)協(xié)議、x25協(xié)議處理模塊來嘗試進行報文的解析處理霉翔,這一點和一些文件系統(tǒng)的掛載相似睁蕾,就是讓系統(tǒng)中所有的已經(jīng)注冊的文件系統(tǒng)來進行嘗試掛載,如果哪一個認為自己可以處理,那么就完成掛載子眶。

當抓包模塊把自己偽裝成一個網(wǎng)絡(luò)協(xié)議的時候瀑凝,系統(tǒng)在收到報文的時候就會給這個偽協(xié)議一次機會,讓它來對網(wǎng)卡收到的報文進行一次處理臭杰,此時該模塊就會趁機對報文進行窺探猜丹,也就是把這個報文完完整整的復(fù)制一份,假裝是自己接收到的報文硅卢,匯報給抓包模塊射窒。

tcpdump采用命令行方式對接口的數(shù)據(jù)包進行篩選抓取,其豐富特性表現(xiàn)在靈活的表達式上将塑。

tcpdump

tcpdump -i 網(wǎng)卡

tcpdump -nn 數(shù)字的方式顯示IP和端口脉顿。一個n是ip

tcpdump -c x 抓包數(shù)量,x為數(shù)字

tcpdump port xx 抓指定端口的包点寥,xx為端口號

tcpdump tcp and port xx 指定協(xié)議和端口艾疟,xx為端口號,and可以省略不寫

tcpdump host xx.xx.xx.xx 指定來源IP或目標IP的包 xx.xx.xx.xx為IP地址敢辩。

tcpdump -w xx.txt 把抓的包寫入一個文件蔽莱,xx.txt為文件名

tcpdump -s0 -w xx.txt ?抓包時防止包截斷,s0的0為數(shù)字0戚长,抓一個完整的包必須加s0盗冷。

tcpdump -r xx.txt 用戶查看-w抓的包,xx.txt為文件名

-w抓的包實際是包的內(nèi)容同廉,非簡單的流向仪糖。如果訪問一張圖片,用-w可以把這張圖片抓出來迫肖。只看流向的話锅劝,可以使用重定向。


tcpdump 的各種參數(shù)

option 可選參數(shù):將在后邊一一解釋蟆湖,對應(yīng)本文第四節(jié):可選參數(shù)解析

proto 類過濾器:根據(jù)協(xié)議進行過濾故爵,可識別的關(guān)鍵詞有:upd, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet

type 類過濾器:可識別的關(guān)鍵詞有:host, net, port, portrange,這些詞后邊需要再接參數(shù)隅津。

direction 類過濾器:根據(jù)數(shù)據(jù)流向進行過濾诬垂,可識別的關(guān)鍵字有:src, dst,同時你可以使用邏輯運算符進行組合饥瓷,比如 src or dst

若你的ip范圍是一個網(wǎng)段剥纷,可以直接這樣指定:

tcpdump net192.168.10.0/24

抓取DNS端口數(shù)據(jù)

DNS 的默認端口是 53,因此可以通過端口進行過濾

$ tcpdump-i any-s0 port53

控制詳細內(nèi)容的輸出

-v:產(chǎn)生詳細的輸出. 比如包的TTL呢铆,id標識晦鞋,數(shù)據(jù)包長度,以及IP包的一些選項。同時它還會打開一些附加的包完整性檢測悠垛,比如對IP或ICMP包頭部的校驗和线定。

-vv:產(chǎn)生比-v更詳細的輸出. 比如NFS回應(yīng)包中的附加域?qū)淮蛴? SMB數(shù)據(jù)包也會被完全解碼。(摘自網(wǎng)絡(luò)确买,目前我還未使用過)

-vvv:產(chǎn)生比-vv更詳細的輸出斤讥。比如 telent 時所使用的SB, SE 選項將會被打印, 如果telnet同時使用的是圖形界面,其相應(yīng)的圖形選項將會以16進制的方式打印出來(摘自網(wǎng)絡(luò)湾趾,目前我還未使用過)

-A:以ASCII碼方式顯示每一個數(shù)據(jù)包(不顯示鏈路層頭部信息). 在抓取包含網(wǎng)頁數(shù)據(jù)的數(shù)據(jù)包時, 可方便查看數(shù)據(jù)

-l: 基于行的輸出芭商,便于你保存查看,或者交給其它工具分析

-q: 簡潔地打印輸出搀缠。即打印很少的協(xié)議相關(guān)信息, 從而輸出行都比較簡短.

-c: 捕獲 count 個包 tcpdump 就退出

-s:? tcpdump 默認只會截取前96字節(jié)的內(nèi)容铛楣,要想截取所有的報文內(nèi)容,可以使用-s number艺普,number就是你要截取的報文字節(jié)數(shù)簸州,如果是 0 的話,表示截取報文全部內(nèi)容歧譬。

-S: 使用絕對序列號岸浑,而不是相對序列號

-C:file-size,tcpdump 在把原始數(shù)據(jù)包直接保存到文件中之前, 檢查此文件大小是否超過file-size. 如果超過了, 將關(guān)閉此文件,另創(chuàng)一個文件繼續(xù)用于原始數(shù)據(jù)包的記錄. 新創(chuàng)建的文件名與-w 選項指定的文件名一致, 但文件名后多了一個數(shù)字.該數(shù)字會從1開始隨著新創(chuàng)建文件的增多而增加. file-size的單位是百萬字節(jié)(nt: 這里指1,000,000個字節(jié),并非1,048,576個字節(jié), 后者是以1024字節(jié)為1k, 1024k字節(jié)為1M計算所得, 即1M=1024 * 1024 = 1,048,576)

-F:使用file 文件作為過濾條件表達式的輸入, 此時命令行上的輸入將被忽略.

-D: 顯示所有可用網(wǎng)絡(luò)接口的列表

-e: 每行的打印輸出中將包括數(shù)據(jù)包的數(shù)據(jù)鏈路層頭部信息

-E: 揭秘IPSEC數(shù)據(jù)

-L:列出指定網(wǎng)絡(luò)接口所支持的數(shù)據(jù)鏈路層的類型后退出

-Z:后接用戶名瑰步,在抓包時會受到權(quán)限的限制矢洲。如果以root用戶啟動tcpdump,tcpdump將會有超級用戶權(quán)限面氓。

-d:打印出易讀的包匹配碼

-dd:以C語言的形式打印出包匹配碼.

-ddd:以十進制數(shù)的形式打印出包匹配碼

=:判斷二者相等

==:判斷二者相等

!=:判斷二者不相等

當你使用這兩個符號時兵钮,tcpdump 還提供了一些關(guān)鍵字的接口來方便我們進行判斷,比如

if:表示網(wǎng)卡接口名舌界、

proc:表示進程名

pid:表示進程 id

svc:表示 service class

dir:表示方向,in 和 out

eproc:表示 effective process name

epid:表示 effective process ID

提取 HTTP 請求的 URL

tcpdump-s0-v-n-l|egrep-i"POST /|GET /|Host:"

提取 HTTP 的 User-Agent

tcpdump-nn-A-s1500-l|egrep-i'User-Agent:|Host:'

找出發(fā)包數(shù)最多的 IP

tcpdump-nnn-t-c200|cut-f1,2,3,4-d'.'|sort|uniq-c|sort-nr|head-n20

cut -f 1,2,3,4 -d '.'?: 以?.?為分隔符泰演,打印出每行的前四列呻拌。即 IP 地址。

sort | uniq -c?: 排序并計數(shù)

sort -nr?: 按照數(shù)值大小逆向排序

?提取 HTTP 請求的 URL

tcpdump-s0-v-n-l|egrep-i"POST /|GET /|Host:"

3.Ping

Ping的原理?

ping程序是用來探測主機到主機之間是否可通信睦焕,如果不能ping到某臺主機藐握,表明不能和這臺主機建立連接。

ping使用的是ICMP協(xié)議垃喊,它發(fā)送icmp回送請求消息給目的主機猾普。ICMP協(xié)議規(guī)定:目的主機必須返回ICMP回送應(yīng)答消息給源主機。如果源主機在一定時間內(nèi)收到應(yīng)答本谜,則認為主機可達初家。

ICMP協(xié)議通過IP協(xié)議發(fā)送的,IP協(xié)議是一種無連接的,不可靠的數(shù)據(jù)包協(xié)議溜在。在Unix/Linux陌知,序列號從0開始計數(shù),依次遞增掖肋。而Windowsping程序的ICMP序列號是沒有規(guī)律仆葡。

ICMP協(xié)議在實際傳輸中數(shù)據(jù)包:20字節(jié)IP首部 + 8字節(jié)ICMP首部+ 1472字節(jié)<數(shù)據(jù)大小>38字節(jié)????

ICMP報文格式:IP首部(20字節(jié))+8位類型+8位代碼+16位校驗和+(不同的類型和代碼,格式也有所不同)

Ping工作過程

Ping 使用ICMP協(xié)議志笼,工作在第三層沿盅,命令在應(yīng)用層

假定主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2纫溃,都在同一子網(wǎng)內(nèi)腰涧,則當你在主機A上運行“Ping192.168.1.2”后,都發(fā)生了些什么呢?

首先皇耗,Ping命令會構(gòu)建一個固定格式的ICMP請求數(shù)據(jù)包卧檐,然后由ICMP協(xié)議將這個數(shù)據(jù)包連同地址“192.168.1.2”一起交給IP層協(xié)議(和ICMP一樣,實際上是一組后臺運行的進程)颊咬,IP層協(xié)議將以地址“192.168.1.2”作為目的地址肪笋,本機IP地址作為源地址,加上一些其他的控制信息呜袁,構(gòu)建一個IP數(shù)據(jù)包敌买,并在一個映射表中查找出IP地址192.168.1.2所對應(yīng)的物理地址(也叫MAC地址,熟悉網(wǎng)卡配置的朋友不會陌生阶界,這是數(shù)據(jù)鏈路層協(xié)議構(gòu)建數(shù)據(jù)鏈路層的傳輸單元——幀所必需的)虹钮,一并交給數(shù)據(jù)鏈路層。后者構(gòu)建一個數(shù)據(jù)幀膘融,目的地址是IP層傳過來的物理地址芙粱,源地址則是本機的物理地址,還要附加上一些控制信息氧映,依據(jù)以太網(wǎng)的介質(zhì)訪問規(guī)則春畔,將它們傳送出去。其中映射表由ARP實現(xiàn)岛都。ARP(Address Resolution Protocol)是地址解析協(xié)議,是一種將IP地址轉(zhuǎn)化成物理地址的協(xié)議律姨。ARP具體說來就是將網(wǎng)絡(luò)層(IP層,也就是相當于OSI的第三層)地址解析為數(shù)據(jù)連接層(MAC層臼疫,也就是相當于OSI的第二層)的MAC地址择份。

主機B收到這個數(shù)據(jù)幀后,先檢查它的目的地址烫堤,并和本機的物理地址對比荣赶,如符合凤价,則接收;否則丟棄讯壶。接收后檢查該數(shù)據(jù)幀料仗,將IP數(shù)據(jù)包從幀中提取出來,交給本機的IP層協(xié)議伏蚊。同樣立轧,IP層檢查后,將有用的信息提取后交給ICMP協(xié)議躏吊,后者處理后氛改,馬上構(gòu)建一個ICMP應(yīng)答包,發(fā)送給主機A比伏,其過程和主機A發(fā)送ICMP請求包到主機B一模一樣胜卤。即先由IP地址,在網(wǎng)絡(luò)層傳輸赁项,然后再根據(jù)mac地址由數(shù)據(jù)鏈路層傳送到目的主機葛躏。

ICMP主要的功能包括:確認 IP 包是否成功送達目標地址、報告發(fā)送過程中 IP 包被廢棄的原因和改善網(wǎng)絡(luò)設(shè)置等悠菜。

ARP是地址解析協(xié)議舰攒,是根據(jù)IP地址獲取物理地址的一個TCP、IP協(xié)議悔醋。主機發(fā)送信息時將包含目標IP地址的ARP請求廣播到網(wǎng)絡(luò)上的所有主機摩窃,并接收返回消息,以此確定目標的物理地址芬骄。

在IP通信中如果某個IP包因為某種原因未能達到目標地址猾愿,那么這個具體的原因?qū)?b>由 ICMP 負責通知。

ICMP 目標不可達消息

如上圖例子账阻,主機A向主機B發(fā)送了數(shù)據(jù)包蒂秘,由于某種原因材彪,途中的路由器2未能發(fā)現(xiàn)主機B的存在造成,這時喘蟆,路由器2就會向主機A發(fā)送一個ICMP目標不可達數(shù)據(jù)包骇吭,說明發(fā)往主機B的包未能成功棘脐。

回送消息用于進行通信的主機或路由器之間,判斷所發(fā)送的數(shù)據(jù)包是否已經(jīng)成功到達對端的一種消息,ping?命令就是利用這個消息實現(xiàn)的。

IP 路由器無法將 IP 數(shù)據(jù)包發(fā)送給目標地址時,會給發(fā)送端主機返回一個目標不可達的 ICMP 消息,并在這個消息中顯示不可達的具體原因,原因記錄在 ICMP 包頭的代碼字段。

由此,根據(jù) ICMP 不可達的具體消息,發(fā)送端主機也就可以了解此次發(fā)送不可達的具體原因辐益。

舉例 6 種常見的目標不可達類型的代碼


附TCP/IP模型


我們重點來看?ping?的發(fā)送和接收過程箱蝠。同個子網(wǎng)下的主機 A 和 主機 B,主機 A 執(zhí)行ping?主機 B 后的過程


4.MTR

mtr在單個網(wǎng)絡(luò)診斷工具中結(jié)合了traceroute和ping程序的功能。當mtr啟動時,它調(diào)查運行在主機mtr和主機名之間的網(wǎng)絡(luò)連接。traceroute默認使用UDP數(shù)據(jù)包探測,而mtr默認使用ICMP報文探測,ICMP在某些路由節(jié)點的優(yōu)先級要比其他數(shù)據(jù)包低,所以測試得到的數(shù)據(jù)可能低于實際情況。

通過發(fā)送有目的的低TTL的包。它繼續(xù)以較低的TTL發(fā)送數(shù)據(jù)包,記錄中間路由器。這允許MTR打印Internet路由的響應(yīng)百分比和響應(yīng)時間。到主機名馏艾。包丟失或響應(yīng)時間的突然增加通常是壞的(或僅僅是過度的)跡象房资。已加載)鏈接暑始。結(jié)果通常以往返響應(yīng)時間(毫秒)和包丟失百分比報告。

mtr -Trwc 300 web14-tzzj.gtarcade.com

mtr -r 202.108.33.94 使用-c參數(shù)設(shè)置每秒發(fā)送數(shù)據(jù)包數(shù)量:

mtr -r -c 30 202.108.33.94 使用-s參數(shù)指定ping數(shù)據(jù)包的大小:

mtr -r -c 30 -s 1024 202.108.33.94 mtr -s 用來指定ping數(shù)據(jù)包的大小

mtr -n no-dns不對IP地址做域名解析

mtr -a 來設(shè)置發(fā)送數(shù)據(jù)包的IP地址 這個對一個主機由多個IP地址是有用的

mtr -i 使用這個參數(shù)來設(shè)置ICMP返回之間的要求默認是1秒

MTR qq.com 測試界面

具體輸出的參數(shù)含義為:

第一列是IP地址 丟包率:Loss

已發(fā)送的包數(shù):Snt

最后一個包的延時:Last

平均延時:Avg

最低延時:Best

最差延時:Wrst

方差(穩(wěn)定性):StDev

使用 mtr -r qq.com 來打印報告容为,如果不使用 -r or --report 參數(shù) mtr 會不斷動態(tài)運行。使用 report 選項懂更, mtr 會向 qq.com 主機發(fā)送 10 個 ICMP 包卓嫂,然后直接輸出結(jié)果餐禁。通常情況下 mtr 需要幾秒鐘時間來輸出報告绷旗。mtr 報告由一系列跳數(shù)組成角骤,每一跳意味著數(shù)據(jù)包通過節(jié)點或者路由器來達到目的主機蝉揍。

一般情況下 mtr 前幾跳都是本地 ISP弊仪,后幾跳屬于服務(wù)商比如 騰訊數(shù)據(jù)中心,中間跳數(shù)則是中間節(jié)點,如果發(fā)現(xiàn)前幾跳異常孽椰,需要聯(lián)系本地 ISP 服務(wù)提供上,相反如果后幾跳出現(xiàn)問題,則需要聯(lián)系服務(wù)提供商击困,中間幾跳出現(xiàn)問題蹦浦,則需要聯(lián)系運營商進行處理

默認使用 -r 參數(shù)來生成報告,只會發(fā)送10個數(shù)據(jù)包代兵,如果想要自定義數(shù)據(jù)包數(shù)量,可以使用 -c 參數(shù)

MTR結(jié)果分析

當我們分析 MTR 報告時候绸贡,最好找出每一跳的任何問題筷厘。除了可以查看兩個服務(wù)器之間的路徑之外酥艳,MTR 在它的七列數(shù)據(jù)中提供了很多有價值的數(shù)據(jù)統(tǒng)計報告。Loss% 列展示了數(shù)據(jù)包在每一跳的丟失率爬骤。Snt 列記錄的多少個數(shù)據(jù)包被送出充石。使用 –report 參數(shù)默認會送出10個數(shù)據(jù)包。如果使用 –report-cycles=[number-of-packets] 選項霞玄,MTR 就會按照 [number-of-packets] 指定的數(shù)量發(fā)出 ICMP 數(shù)據(jù)包骤铃。

Last, Avg, Best 和 Wrst 列都標識數(shù)據(jù)包往返的時間,使用的是毫秒( ms )單位表示坷剧。Last 表示最后一個數(shù)據(jù)包所用的時間惰爬, Avg 表示評價時間, Best 和 Wrst 表示最小和最大時間惫企。在大多數(shù)情況下撕瞧,平均時間( Avg)列需要我們特別注意陵叽。

最后一列 StDev 提供了數(shù)據(jù)包在每個主機的標準偏差。如果標準偏差越高丛版,說明數(shù)據(jù)包在這個節(jié)點的延時越不相同巩掺。標準偏差會讓您了解到平均延時是否是真的延時時間的中心點,或者測量數(shù)據(jù)受到某些問題的干擾页畦。

例如胖替,如果標準偏差很大,說明數(shù)據(jù)包的延遲是不確定的豫缨。一些數(shù)據(jù)包延遲很卸懒睢(例如:25ms),另一些數(shù)據(jù)包延遲很大(例如:350ms)好芭。當10個數(shù)據(jù)包全部發(fā)出后记焊,得到的平均延遲可能是正常的,但是平均延遲是不能很好的反應(yīng)實際情況的栓撞。如果標準偏差很高,使用最好和最壞的延遲來確定平均延遲是一個較好的方案碗硬。

在大多數(shù)情況下瓤湘,您可以把 MTR 的輸出分成三大塊。根據(jù)配置恩尾,第二或第三跳一般都是您的本地 ISP弛说,倒數(shù)第二或第三跳一般為您目的主機的ISP。中間的節(jié)點是數(shù)據(jù)包經(jīng)過的路由器翰意。

當分析 MTR 的輸出時木人,您需要注意兩點:loss 和 latency。

網(wǎng)絡(luò)丟包

如果在任何一跳上看到 loss 的百分比冀偶,這就說明這一跳上可能有問題了醒第。當然,很多服務(wù)提供商人為限制 ICMP 發(fā)送的速率进鸠,這也會導(dǎo)致此問題稠曼。那么如何才能指定是人為的限制 ICMP 傳輸 還是確定有丟包的現(xiàn)象?此時需要查看下一跳客年。如果下一跳沒有丟包現(xiàn)象霞幅,說明上一條是人為限制的。如下示例:

MTR丟包截圖

從下面的圖中量瓜,您可以看從第14跳和第17跳都有 10% 的丟包率司恳,從接下來的幾跳都有丟包現(xiàn)象,但是最后15,16跳都是100%的丟包率绍傲,我們可以猜測到100%的丟包率除了網(wǎng)絡(luò)糟糕的原因之前還有人為限制 ICMP扔傅。所以,當我們看到不同的丟包率時,通常要以最后幾跳為準铅鲤。

還有很多時候問題是在數(shù)據(jù)包返回途中發(fā)生的划提。數(shù)據(jù)包可以成功的到達目的主機,但是返回過程中遇到“困難”了邢享。所以鹏往,當問題發(fā)生后,我們通常需要收集反方向的 MTR 報告骇塘。

此外伊履,互聯(lián)網(wǎng)設(shè)施的維護或短暫的網(wǎng)絡(luò)擁擠可能會帶來短暫的丟包率,當出現(xiàn)短暫的10%丟包率時候款违,不必擔心唐瀑,應(yīng)用層的程序會彌補這點損失。


網(wǎng)絡(luò)延遲

除了可以通過MTR報告查看丟包率插爹,我們也還可以看到本地到目的之間的時延哄辣。因為是不通的位置,延遲通常會隨著條數(shù)的增加而增加赠尾。所以力穗,延遲通常取決于節(jié)點之間的物理距離和線路質(zhì)量。

從上面的MTR報告截圖中气嫁,我們可以看到從第11跳到12跳的延遲猛增当窗,直接導(dǎo)致了后面的延遲也很大,一般有可能是11跳到12跳屬于不通地域寸宵,物理距離導(dǎo)致時延猛增崖面,也有可能是第12條的路由器配置不當,或者是線路擁塞梯影。需要具體問題進行具體的分析巫员。

然而,高延遲并不一定意味著當前路由器有問題光酣。延遲很大的原因也有可能是在返回過程中引發(fā)的疏遏。從這份報告的截圖看不到返回的路徑,返回的路徑可能是完全不同的線路救军,所以一般需要進行雙向MTR測試财异。

注:ICMP 速率限制也可能會增加延遲,但是一般可以查看最后一條的時間延遲來判斷是否是上述情況唱遭。


根據(jù)MTR結(jié)果解決網(wǎng)絡(luò)問題

MTR 報告顯示的路由問題大都是暫時性的戳寸。很多問題在24小時內(nèi)都被解決了。大多數(shù)情況下拷泽,如果您發(fā)現(xiàn)了路由問題疫鹊,ISP 提供商已經(jīng)監(jiān)視到并且正在解決中了袖瞻。當您經(jīng)歷網(wǎng)絡(luò)問題后,可以選擇提醒您的 ISP 提供商拆吆。當聯(lián)系您的提供商時聋迎,需要發(fā)送一下 MTR 報告和相關(guān)的數(shù)據(jù)。沒有有用的數(shù)據(jù)枣耀,提供商是沒有辦法去解決問題的霉晕。

然而大多數(shù)情況下,路由問題是比較少見的捞奕。比較常見的是因為物理距離太長牺堰,或者上網(wǎng)高峰,導(dǎo)致網(wǎng)絡(luò)變的很慢颅围。尤其是跨越大西洋和太平洋的時候伟葫,網(wǎng)絡(luò)有時候會變的很慢。這種情況下院促,建議就近接入客戶的節(jié)點筏养。

5.DIG

dig?最基本的功能就是查詢域名信息,因此它的名稱實際上是“?域名信息查詢工具(Domain Information Groper)”的縮寫常拓。dig?向用戶返回的內(nèi)容可以非常詳盡撼玄,也可以非常簡潔,展現(xiàn)內(nèi)容的多少完全由用戶在查詢時使用的選項來決定墩邀。

在查詢的時候發(fā)現(xiàn)有的域名會指向多個 IP 地址?這其實是網(wǎng)站提高其可用性的一種措施盏浙。

查詢過程

雖然只需要返回一個IP地址眉睹,但是DNS的查詢過程非常復(fù)雜,分成多個步驟废膘。

工具軟件dig可以顯示整個查詢過程竹海。

$ dig math.stackexchange.com

上面的命令會輸出六段信息。

第一段是查詢參數(shù)和統(tǒng)計丐黄。

第二段是查詢內(nèi)容斋配。

上面結(jié)果表示,查詢域名math.stackexchange.com的A記錄灌闺,A是address的縮寫艰争。

第三段是DNS服務(wù)器的答復(fù)。

上面結(jié)果顯示桂对,math.stackexchange.com 有四個A記錄甩卓,即四個IP地址。600是TTL值(Time to live 的縮寫)蕉斜,表示緩存時間逾柿,即600秒之內(nèi)不用重新查詢缀棍。

第四段顯示stackexchange.com的NS記錄(Name Server的縮寫),即哪些服務(wù)器負責管理stackexchange.com的DNS記錄机错。

上面結(jié)果顯示stackexchange.com共有四條NS記錄爬范,即四個域名服務(wù)器,向其中任一臺查詢就能知道m(xù)ath.stackexchange.com的IP地址是什么弱匪。

第五段是上面四個域名服務(wù)器的IP地址青瀑,這是隨著前一段一起返回的。

第六段是DNS服務(wù)器的一些傳輸信息痢法。

上面結(jié)果顯示狱窘,本機的DNS服務(wù)器是192.168.1.253,查詢端口是53(DNS服務(wù)器的默認端口)财搁,以及回應(yīng)長度是305字節(jié)蘸炸。

# 分級查詢的實例

dig命令的+trace參數(shù)可以顯示DNS的整個分級查詢過程。

$ dig +trace math.stackexchange.com

上面命令的第一段列出根域名.的所有NS記錄尖奔,即所有根域名服務(wù)器搭儒。

根據(jù)內(nèi)置的根域名服務(wù)器IP地址,DNS服務(wù)器向所有這些IP地址發(fā)出查詢請求提茁,詢問math.stackexchange.com的頂級域名服務(wù)器com.的NS記錄淹禾。最先回復(fù)的根域名服務(wù)器將被緩存,以后只向這臺服務(wù)器發(fā)請求茴扁。

接著是第二段铃岔。

上面結(jié)果顯示.com域名的13條NS記錄,同時返回的還有每一條記錄對應(yīng)的IP地址峭火。

然后毁习,DNS服務(wù)器向這些頂級域名服務(wù)器發(fā)出查詢請求,詢問math.stackexchange.com的次級域名stackexchange.com的NS記錄卖丸。

上面結(jié)果顯示stackexchange.com有四條NS記錄纺且,同時返回的還有每一條NS記錄對應(yīng)的IP地址。

然后稍浆,DNS服務(wù)器向上面這四臺NS服務(wù)器查詢math.stackexchange.com的主機名载碌。

上面結(jié)果顯示,math.stackexchange.com有4條A記錄衅枫,即這四個IP地址都可以訪問到網(wǎng)站嫁艇。并且還顯示,最先返回結(jié)果的NS服務(wù)器是ns-463.awsdns-57.com弦撩,IP地址為205.251.193.207裳仆。

# NS 記錄的查詢

$ dig ns com

$ dig ns stackexchange.com

+short參數(shù)可以顯示簡化的結(jié)果。

$ dig +short ns com $ dig +short ns stackexchange.com

1. $ dig networkworld.com +short

151.101.2.165

151.101.66.165

151.101.130.165

151.101.194.165

2. dig @serverip 指定dns服務(wù)器進行解析

[root@basic harbor]# dig @8.8.8.8 www.mikezhu.tech

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> @8.8.8.8 www.mikezhu.tech

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57221

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 512

;; QUESTION SECTION:

;www.mikezhu.tech. IN A

;; ANSWER SECTION:

www.mikezhu.tech. 599 IN A 192.168.137.10

;; Query time: 87 msec

;; SERVER: 8.8.8.8#53(8.8.8.8)

;; WHEN: Mon Aug 05 10:41:48 CST 2019

;; MSG SIZE rcvd: 61

3.?直接dig域名孤钦,根據(jù)自身網(wǎng)絡(luò)的dns獲取域名解析信息

root@basic harbor]# dig www.mikezhu.tech

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> www.mikezhu.tech

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33969

;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;www.mikezhu.tech. IN A

;; ANSWER SECTION:

www.mikezhu.tech. 600 IN A 192.168.137.10

;; Query time: 347 msec

;; SERVER: 202.96.209.133#53(202.96.209.133)

;; WHEN: Mon Aug 05 10:39:59 CST 2019

;; MSG SIZE rcvd: 61

批量查詢域名

如果你要查詢多個域名歧斟,可以把這些域名寫入到一個文件內(nèi)(domains)纯丸,然后使用下面的?dig?命令遍歷整個文件并給出所有查詢結(jié)果。

$ dig +noall +answer -f domains

networkworld.com.? ? ? 300? ? IN? ? ? A? ? ? 151.101.66.165

networkworld.com.? ? ? 300? ? IN? ? ? A? ? ? 151.101.2.165

networkworld.com.? ? ? 300? ? IN? ? ? A? ? ? 151.101.130.165

networkworld.com.? ? ? 300? ? IN? ? ? A? ? ? 151.101.194.165

world.std.com.? ? ? ? ? 77972? IN? ? ? A? ? ? 192.74.137.5

uushenandoah.org.? ? ? 1982? ? IN? ? ? A? ? ? 162.241.24.209

amazon.com.? ? ? ? ? ? 18? ? ? IN? ? ? A? ? ? 176.32.103.205

amazon.com.? ? ? ? ? ? 18? ? ? IN? ? ? A? ? ? 176.32.98.166

amazon.com.? ? ? ? ? ? 18? ? ? IN? ? ? A? ? ? 205.251.242.103

Command Test for SNI,Normally used the first one

(1) openssl s_client -servername?www.lizhou.fun?-connect lizhou.fun:443

(2) openssl s_client -connect 69.164.193.227:443 -tls1

(3) openssl s_client -connect?www.lizhou.fun:443?| openssl x509 -noout -text | grep DNS

(4) openssl s_client -connect 69.164.193.227:443 -servername?www.lizhou.fun?-tls1 (Specify the hostname)

什么是SNI協(xié)議静袖?

服務(wù)器名稱指示(英語:Server Name Indication觉鼻,簡稱SNI)是一個擴展的TLS計算機聯(lián)網(wǎng)協(xié)議,在該協(xié)議下队橙,在握手過程開始時通過客戶端告訴它正在連接的服務(wù)器的主機名稱坠陈。這允許服務(wù)器在相同的IP地址和TCP端口號上呈現(xiàn)多個證書,因此允許在相同的IP地址上提供多個安全HTTPS網(wǎng)站(或其他任何基于TLS的服務(wù))捐康,而不需要所有這些站點使用相同的證書

為什么需要使用SNI協(xié)議仇矾?

基于名稱的虛擬主機允許多個DNS主機名由同一IP地址上的單個服務(wù)器(通常為Web服務(wù)器)托管。為了實現(xiàn)這一點解总,服務(wù)器使用客戶端提供的主機名作為協(xié)議的一部分(對于HTTP贮匕,名稱顯示在主機頭中)。但是花枫,當使用HTTPS時刻盐,TLS握手發(fā)生在服務(wù)器看到任何HTTP頭之前。因此劳翰,服務(wù)器不可能使用HTTP主機頭中的信息來決定呈現(xiàn)哪個證書敦锌,并且因此只有由同一證書覆蓋的名稱才能由同一IP地址提供。

了解SNI協(xié)議可以用來做什么佳簸?

如果我們要對流量進行識別乙墙,做流量檢測等,HTTPS流量是加密的生均,很難檢測其內(nèi)部的具體內(nèi)容伶丐。SNI協(xié)議給出了一個切入點,在HTTPS協(xié)議建立加密連接的開始階段檢測出訪問的域名信息

常規(guī)TLS/SSL握手失敗

TLS/SSL版本不匹配

自從TLS 1.2版本在2008年發(fā)布以來疯特,絕大部分HTTPS流量都跑在TLS 1.2上。服務(wù)器處于安全性考慮通常也只支持較高版本TLS肛走,比如TLS1.0及以上漓雅。但是仍然有一些版本比較舊的操作系統(tǒng)和瀏覽器存在,如果這些客戶端用低版本TLS/SSL向服務(wù)器發(fā)起握手朽色,會因為服務(wù)器不支持而直接失敗邻吞。

比如淘寶網(wǎng)只支持TLS 1.0及以上版本,用openssl發(fā)起SSL 3版本的握手葫男,就會出現(xiàn)handshake failure抱冷。

# openssl s_client -connect www.taobao.com:443 -ssl3 -msg

140191222585232:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40

140191222585232:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:s3_pkt.c:659:

no peer certificate available

No client certificate CA names sent

TLS/SSL cipher suite不匹配

在握手的前兩個ClientHello和ServerHello包中有一個重要的任務(wù)就是協(xié)商cipher∩液郑客戶端在ClientHello中會帶上所有支持的cipher suite, 服務(wù)器在收到ClientHello中的cipher suite后旺遮,會和自己支持的cipher suite一一匹配赵讯,如果沒有可以匹配的就會握手失敗。

服務(wù)器出于安全性考慮通常只會支持安全性較高的cipher耿眉,所以當客戶端發(fā)過去的cipher suite安全性都比較低時會造成握手失敗边翼。

例如用openssl向淘寶網(wǎng)發(fā)起握手,客戶端的ClientHello中只有一個安全性較低的DHE-RSA-AES128-SHA256 cipher鸣剪,會出現(xiàn)handshake failure组底。

openssl s_client -connect www.taobao.com:443 -cipher DHE-RSA-AES128-SHA256 -msg

139737777813392:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:769:no peer certificate available,No client certificate CA names sent

TLS/SSL握手Warning

在握手過程中筐骇,客戶端對服務(wù)器證書會做驗證债鸡,驗證不過時會出現(xiàn)Warning。瀏覽器可以選擇忽略铛纬,用curl也可以使用-k參數(shù)來忽略厌均。嚴格來說并不算Failure,這里歸類成Warning饺鹃,不做詳細討論莫秆。例如如下幾種比較常見的情況:

訪問的域名不在服務(wù)器證書的CN(Common Name)和SAN(Subject Alternative Name)中。服務(wù)器證書被吊銷悔详,導(dǎo)致驗證不通過镊屎。

現(xiàn)象如下是一個例子∏洋Γ客戶端訪問阿里云的一個公網(wǎng)IP地址TLS/SSL握手失敗缝驳。先來看下現(xiàn)象,在客戶端的抓包如下


可以看到前面的TCP三次握手和一些數(shù)據(jù)交互(特定協(xié)議相關(guān)归苍,正常情況在TCP三次握手后直接開始TLS/SSL握手)都沒有問題用狱。但是開始TLS/SSL握手交互過程客戶端發(fā)出第一個報文,馬上收到一個TCP RESET拼弃。這個和上面提到的常規(guī)握手失敗很不一樣夏伊, TCP RESET報文通常是設(shè)備或者主機協(xié)議棧主動發(fā)出,符合一定場景或者有一定網(wǎng)絡(luò)管理含義吻氧。

根本原因

云盾根據(jù)訪問的目的域名有沒有備案做執(zhí)行相關(guān)動作溺忧。云盾并沒有在TCP建連時就針對源目IP做阻斷,而是提取ClientHello中的SNI(Servername Indication)域名信息判斷是否備案而做阻斷盯孙,返回TCP RESET鲁森。

SNI是ClientHello中的一個擴展字段,帶有要訪問的目標域名振惰,讓同一個IP上托管多個HTTPS站點的服務(wù)器知道客戶端訪問的是哪個目標域名歌溉,以便使用對應(yīng)的證書進行交互。在ClientHello報文的如下位置

客戶端證書問題導(dǎo)致TLS/SSL握手失敗

在雙向驗證的場景中骑晶,不僅僅客戶端要驗證服務(wù)器證書痛垛,服務(wù)器也需要驗證客戶端證書草慧。在服務(wù)器驗證客戶端證書的過程中,由于客戶端證書的安全性較低榜晦,可能會直接產(chǎn)生Fatal Alert冠蒋,導(dǎo)致握手直接中斷。

現(xiàn)象

如下是一個手機App訪問服務(wù)器的例子乾胶。72號報文報出了Bad Certificate的Fatal Alert抖剿,從上下文看,這里是客戶端向服務(wù)器端發(fā)送完Certificate, Client Key Exchange等消息后识窿,服務(wù)器返回給客戶端的報錯斩郎。

在手機App中的報錯如下:

SSL handshake aborted: ssl=0x7c1bbf6e88: Failure in SSL library, usually a protocol error

error:10000412:SSL routines:OPENSSL_internal:SSLV3_ALERT_BAD_CERTIFICATE (external/boringssl/src/ssl/http://tls_record.cc:592?0x7c6c627e48:0x00000001)


無法提取SNI導(dǎo)致TLS/SSL握手失敗

在某些場景中,需要獲取ClientHello中的SNI字段來作為一個必要條件, 比如用NGINX stream對HTTPS流量做4層代理時喻频∷跻耍客戶端ClientHello中沒有攜帶SNI,則會造成一個通過代理握手失敗的局面甥温。

現(xiàn)象

和上面?zhèn)€握手失敗的現(xiàn)象如出一轍锻煌,在客戶端發(fā)出ClientHello后,馬上被代理服務(wù)器FIN掉姻蚓,唯一不同的是這里的ClientHello并沒有帶上SNI字段宋梧。

根本原因

在利用NGINX stream做正向代理時,NGXIN服務(wù)器需要獲取客戶端想要訪問的目的域名狰挡。利用ngx_stream_ssl_preread_module模塊在不解密的情況下拿到ClientHello報文中SNI才能實現(xiàn)代理的正常功能捂龄。

6. iperf使用方法

Iperf是一個網(wǎng)絡(luò)性能測試工具。Iperf可以測試TCP和UDP帶寬質(zhì)量加叁。Iperf可以測量最大TCP帶寬倦沧,具有多種參數(shù)和UDP特性。Iperf可以報告帶寬它匕,延遲抖動和數(shù)據(jù)包丟失展融。利用Iperf這一特性,可以用來測試一些網(wǎng)絡(luò)設(shè)備如路由器豫柬,防火墻告希,交換機等的性能。

Iperf的主要功能如下:

TCP

測量網(wǎng)絡(luò)帶寬,報告MSS/MTU值的大小和觀測值,支持TCP窗口值通過套接字緩沖

當P線程或Win32線程可用時轮傍,支持多線程∈鬃埃客戶端與服務(wù)端支持同時多重連接

UDP

客戶端可以創(chuàng)建指定帶寬的UDP流,測量丟包,測量延遲,支持多播

當線程可用時创夜,支持多線程∠陕撸客戶端與服務(wù)端支持同時多重連接(不支持Windows)

?iperf如何使用

4.1 TCP性能測試

服務(wù)器端命令:iperf3 -s

客戶端命令:iperf3 -c 192.168.1.5 -b 200M

測試結(jié)果:

從圖中可以看出測試的吞吐量驰吓、丟包率等參數(shù)。

服務(wù)器端:

iperf -s

客戶端:

iperf -c 192.168.1.1 -t 60

在tcp模式下,客戶端到服務(wù)器192.168.1.1上傳帶寬測試矮瘟,測試時間60秒遵湖。

iperf -c 192.168.1.1 -P 30 -t 60

客戶端同時向服務(wù)器端發(fā)起30個連接線程。

iperf -c 192.168.1.1 -d -t 60

進行上下行帶寬測試翁涤。

4.2 UDP性能測試

帶寬測試通常采用UDP模式桥言,因為能測出極限帶寬、時延抖動葵礼、丟包率号阿。在進行測試時

step1:以鏈路理論帶寬作為數(shù)據(jù)發(fā)送速率進行測試,例如鸳粉,從客戶端到服務(wù)器之間的鏈路的理論帶寬為100Mbps扔涧,先用-b 100M進行測試

step2:根據(jù)測試結(jié)果(包括實際帶寬,時延抖動和丟包率)届谈,再以實際帶寬作為數(shù)據(jù)發(fā)送速率進行測試枯夜,會發(fā)現(xiàn)時延抖動和丟包率比第一次好很多,重復(fù)測試幾次艰山,就能得出穩(wěn)定的實際帶寬湖雹。

服務(wù)端命令:iperf3 -s

客戶端命令:iperf3 -u -c 192.168.1.5 -b 200M

測試結(jié)果:

從測試結(jié)果可以看出吞吐量Bitrate、抖動jitter程剥、丟包率

UDP模式

服務(wù)器端:

iperf -u -s

客戶端:

iperf -u -c 192.168.1.1 -b 100M -t 60

在UDP模式下劝枣,以100Mbps為數(shù)據(jù)發(fā)生速率,客戶端到服務(wù)器192.168.1.1上傳帶寬測試织鲸,測試時間為60s

iperf -u -c 192.168.1.1 -b 50M -P 30 -t 60

客戶端同時向服務(wù)器端發(fā)起30個連接線程舔腾,以5Mbps為數(shù)據(jù)發(fā)生速率

iperf -u -c 192,168.1.1 -b 100M -d -t 60

以100M為數(shù)據(jù)發(fā)生速率,進行上下行帶寬測試搂擦。

7. SS命令

ss是Socket?Statistics的縮寫稳诚。顧名思義,ss命令可以用來獲取socket統(tǒng)計信息瀑踢,它可以顯示和netstat類似的內(nèi)容扳还。但ss的優(yōu)勢在于它能夠顯示更多更詳細的有關(guān)TCP和連接狀態(tài)的信息,而且比netstat更快速更高效橱夭。

當服務(wù)器的socket連接數(shù)量變得非常大時氨距,無論是使用netstat命令還是直接cat?/proc/net/tcp,執(zhí)行速度都會很慢棘劣∏稳茫可能你不會有切身的感受,但請相信我,當服務(wù)器維持的連接達到上萬個的時候首昔,使用netstat等于浪費?生命寡喝,而用ss才是節(jié)省時間。

天下武功唯快不破勒奇。ss快的秘訣在于预鬓,它利用到了TCP協(xié)議棧中tcp_diag。tcp_diag是一個用于分析統(tǒng)計的模塊赊颠,可以獲得Linux?內(nèi)核中第一手的信息格二,這就確保了ss的快捷高效。當然巨税,如果你的系統(tǒng)中沒有tcp_diag蟋定,ss也可以正常運行,只是效率會變得稍慢草添。(但仍然比?netstat要快驶兜。)

ss(Socket?Statistics的縮寫)命令可以用來獲取?socket統(tǒng)計信息,此命令輸出的結(jié)果類似于?netstat輸出的內(nèi)容远寸,但它能顯示更多更詳細的?TCP連接狀態(tài)的信息抄淑,且比?netstat?更快速高效。它使用了?TCP協(xié)議棧中?tcp_diag(是一個用于分析統(tǒng)計的模塊)驰后,能直接從獲得第一手內(nèi)核信息肆资,這就使得?ss命令快捷高效。在沒有?tcp_diag灶芝,ss也可以正常運行郑原。

[root@localhost?~]#?ss?-t?-aState??????Recv-Q?Send-Q????????????????????????????????Local?Address:Port????????????????????????????????????Peer?Address:Port???

LISTEN?????0??????0?????????????????????????????????????????127.0.0.1:smux???????????????????????????????????????????????*:*???????

LISTEN?????0??????0?????????????????????????????????????????????????*:3690???????????????????????????????????????????????*:*???????

LISTEN?????0??????0?????????????????????????????????????????????????*:ssh????????????????????????????????????????????????*:*???????

ESTAB??????0??????0???????????????????????????????????192.168.120.204:ssh????????????????????????????????????????10.2.0.68:49368???

8. NC命令

nc的作用

(1)實現(xiàn)任意TCP/UDP端口的偵聽,nc可以作為server以TCP或UDP方式偵聽指定端口

(2)端口的掃描夜涕,nc可以作為client發(fā)起TCP或UDP連接

(3)機器之間傳輸文件

(4)機器之間網(wǎng)絡(luò)測速 ?

nc的控制參數(shù)不少犯犁,常用的幾個參數(shù)如下所列:

1) -l 用于指定nc將處于偵聽模式。指定該參數(shù)女器,則意味著nc被當作server酸役,偵聽并接受連接,而非向其它地址發(fā)起連接驾胆。

2) -p <port> 暫未用到(老版本的nc可能需要在端口號前加-p參數(shù)涣澡,下面測試環(huán)境是centos6.6,nc版本是nc-1.84丧诺,未用到-p參數(shù))

3) -s 指定發(fā)送數(shù)據(jù)的源IP地址入桂,適用于多網(wǎng)卡機?

4) -u? 指定nc使用UDP協(xié)議,默認為TCP

5) -v 輸出交互或出錯信息驳阎,新手調(diào)試時尤為有用

6)-w 超時秒數(shù)抗愁,后面跟數(shù)字?

7)-z 表示zero惕艳,表示掃描時不發(fā)送任何數(shù)據(jù)

nc用法1,網(wǎng)絡(luò)連通性測試和端口掃描

nc可以作為server端啟動一個tcp的監(jiān)聽(注意驹愚,此處重點是起tcp,下面還會講udp)

nc -l 9999

nc作為server端啟動一個udp的監(jiān)聽(注意劣纲,此處重點是起udp逢捺,上面主要講了tcp)

啟動一個udp的端口監(jiān)聽

nc ?-ul ?9998

9. Shell 三劍客

awk:AWK一次處理是一行, 而一次中處理的最小單位是一個區(qū)域

sed: (關(guān)鍵字: 編輯) 以行為單位的文本編輯工具

grep: (關(guān)鍵字: 截取) 文本搜集工具, 結(jié)合正則表達式非常強大

grep

是一種強大的文本搜索工具,它能使用正則表達式搜索文本癞季,并把匹配的行打印出來

sed

sed 是一種在線編輯器劫瞳,它一次處理一行內(nèi)容 。處理時绷柒,把當前處理的行存儲在臨時緩沖區(qū)中志于,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容废睦,處理完成后伺绽,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行嗜湃,這樣不斷重復(fù)奈应,直到文件末尾。文件內(nèi)容并沒有 改變购披,除非你使用重定向存儲輸出杖挣。

awk

相較于sed 常常作用于一整個行的處理,awk 則比較傾向于一行當中分成數(shù)個『字段』來處理刚陡。 因此惩妇,awk 相當?shù)倪m合處理小型的數(shù)據(jù)數(shù)據(jù)處理

grep(文本生成器)

grep是一種強大的文本搜索工具他能使用正則表達式搜索文本筐乳,并把匹配的行統(tǒng)計出來

命令:grep [選項] [–color=auto] ”搜索字符串” filename

輸出匹配行的前后N行(會包括匹配行)

使用-A參數(shù)輸出匹配行的后一行:grep -A 1 “huangxiaoming” grep.txt

使用-B參數(shù)輸出匹配行的前一行:grep -B 1 “huangxiaoming” grep.txt

使用-C參數(shù)輸出匹配行的前后各一行:grep -C 1 “huangxiaoming” grep.txt

sed(流編輯器)

sed叫做流編輯器歌殃,在shell腳本和Makefile中作為過濾一使用非常普遍,也就是把前一個程序的輸出引入sed的輸入哥童,經(jīng)過一系列編輯命令轉(zhuǎn)換成為另一種格式輸出挺份。sed是一種在線編輯器,它一次處理一行內(nèi)容贮懈,處理時匀泊,把當前處理的行存儲在臨時緩沖區(qū)中,稱為"模式空間",接著用sed命令處理緩沖區(qū)中的內(nèi)容朵你,處理完成后各聘,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行抡医,這樣不斷重復(fù)躲因,直到文件末尾早敬。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出大脉。

sed 's/hello/hi/2' sed.txt

##? 此種寫法表示只替換每行的第2個hello為hi

sed 's/hello/hi/2g' sed.txt

##? 此種寫法表示只替換每行的第2個以后的hello為hi(包括第2個

awk(報表生成器)

Awk是一個強大的處理文本的編程語言工具搞监,其名稱得自于它的創(chuàng)始人Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首個字母镰矿,相對于grep的查找琐驴,sed的編輯,awk在其對數(shù)據(jù)分析并生成報告時秤标,顯得尤為強大绝淡。AWK 提供了極其強大的功能:可以進行樣式裝入、流控制苍姜、數(shù)學運算符牢酵、進程控制語句甚至于內(nèi)置的變量和函數(shù)。簡單來說awk就是掃描文件中的每一行衙猪,查找與命令行中所給定內(nèi)容相匹配的模式馍乙。如果發(fā)現(xiàn)匹配內(nèi)容,則進行下一個編程步驟垫释。如果找不到匹配內(nèi)容潘拨,則繼續(xù)處理下一行

[root@localhost ~]# last -n 5 | awk '{print $1}'

root

reboot

root

root

root

awk工作流程是這樣的:讀入有’\n’換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域饶号,填充域铁追,$0則表示所有域,1表示第一個域,1表示第一個域,1表示第一個域,n表示第n個域。默認域分隔符是"空白鍵" 或 “[tab]鍵”,所以$1表示登錄用戶茫船,$3表示登錄用戶ip,以此類推

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琅束,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子算谈,更是在濱河造成了極大的恐慌涩禀,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件然眼,死亡現(xiàn)場離奇詭異艾船,居然都是意外死亡,警方通過查閱死者的電腦和手機高每,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門屿岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鲸匿,你說我怎么就攤上這事爷怀。” “怎么了带欢?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵运授,是天一觀的道長烤惊。 經(jīng)常有香客問我,道長吁朦,這世上最難降的妖魔是什么柒室? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮逗宜,結(jié)果婚禮上伦泥,老公的妹妹穿的比我還像新娘。我一直安慰自己锦溪,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布府怯。 她就那樣靜靜地躺著刻诊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牺丙。 梳的紋絲不亂的頭發(fā)上则涯,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機與錄音冲簿,去河邊找鬼粟判。 笑死,一個胖子當著我的面吹牛峦剔,可吹牛的內(nèi)容都是我干的档礁。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼吝沫,長吁一口氣:“原來是場噩夢啊……” “哼呻澜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惨险,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤羹幸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辫愉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栅受,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年恭朗,在試婚紗的時候發(fā)現(xiàn)自己被綠了屏镊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡痰腮,死狀恐怖闸衫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诽嘉,我是刑警寧澤蔚出,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布弟翘,位于F島的核電站,受9級特大地震影響骄酗,放射性物質(zhì)發(fā)生泄漏稀余。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一趋翻、第九天 我趴在偏房一處隱蔽的房頂上張望睛琳。 院中可真熱鬧,春花似錦踏烙、人聲如沸师骗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟癌。三九已至,卻和暖如春荐捻,著一層夾襖步出監(jiān)牢的瞬間黍少,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工处面, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厂置,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓魂角,卻偏偏與公主長得像昵济,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子野揪,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350