閱讀本文約需要10分鐘,您可以先關注我們,避免下次無法找到。
不管你是敲代碼的,搞運維的,玩管理項目的,就算你只是想在家上個網,你都可能會用到成哥總結的網絡連通性工具。
成哥打算用上下兩篇文章把下圖總結的工具給大家講透。
上篇給大家講講ICMP和TCP層面的網絡連通性測試工具。
ICMP(Internet Control Message Protocol)是IP層的一個組成部分,用于傳遞差錯報文以及其它差錯信息。說的簡單點,ICMP協議就是用來確認網絡是否正常,以及出現異常時進行問題診斷。
PING和traceroute是ICMP協議的經典實用場景。
ICMP報文格式很簡單,ICMP所有報文的前4個字節都是一樣的。格式如下圖所示:
其中通過類型和代碼字段數值組合,可以確認ICMP報文的類型,明確是查詢報文還是差錯報文。如果是差錯報文,還能夠進一步分析時何種原因導致的差錯。
代碼和類型的組合,如下圖所示:
這里再提下,當發送一份ICMP差錯報文時,報文始終包含IP的首部和產生ICMP差錯報文的IP數據報的前8個字節(即能夠包含TCP/UDP的源目端口號)。這樣接收ICMP差錯報文的模塊就會把它與某個特定的協議聯系起來。
PING(Packet Internet Groper)是最常用的網絡連通性情況探測工具。。
通過向對端主機發送ICMP ECHO請求消息(類型8,代碼0)及接收對端主機發送過來的ICMP ECHO應答消息(類型0,代碼0)來判斷網絡的可達性。
PING ECHO請求和應答的截圖如下:
例如使用ping 8.8.8.8來探測源主機到目標地址的可達性情況。
可看到PING命令簡單易用,PING默認發送四個數據包,每個數據包都有回顯,能夠看到包括時間、TTL等信息。截圖如下:
除了直接PING地址外,PING還有一些常用的參數,如下:
(1)次數
ping –t x.x.x.x 一直PING下去
ping –n x.x.x.x PING具體的n次
(2)數據大小
ping –l x.x.x 設置每次PING包的數據大小
(3)PING域名
Ping baidu.com 可以直接ping域名
tracert和traceroute都是路由跟蹤的工具,用于確定IP數據包訪問目標所經過的路徑。
雖然兩者的作用相同,但是兩者的實現原理不同。
(1)tracert
tracert是windows系統上用于實現路由跟蹤的工具。
實現方法是通過發送ICMP ECHO數據包來實現的,和PING工具的原理相同(用到ICMP報文的類型8和代碼0、以及類型0和代碼0)。
例如我們探測到8.8.8.8的路徑。截圖如下:
通過抓包可以看到,tracert工具通過發送ICMP ECHO數據包,并配合使用ICMP報文和IP首部中的TTL字段,來實現路徑記錄功能。
通過沿途每個處理數據報的網絡設備都需要把TTL的值減1的原理。當網絡設備收到一份IP數據報,如果其TTL字段是0或1,則網絡設備不轉發該數據報。相反,網絡設備將該數據包丟棄,并給信源發送一份"ICMP超時"信息。發送ICMP超時的源地址即為該跳網絡設備的IP地址。
(2)traceroute
traceroute是linux系統上用于實現路由跟蹤的工具。
雖然tracerout也是通過沿途每個處理數據報的網絡設備都需要把TTL的值減1的原理。但是它不是使用ICMP ECHO數據包來實現的。
Traceroute默認使用類型11和代碼0的差錯報文來實現的。過程如下:traceroute發送的UDP數據包給目的主機IP,和大數值的UDP端口號(一般大于30000,通常初始的端口為33434),為了使目的主機的任何一個應用程序都不可能使用該端口。因為當該數據報到達時,目的主機的UDP模塊會產生一份"端口不可達"錯誤的ICMP報文,即表示達到目的地。
同時需要注意,成哥剛說了traceroute默認使用的使用11和0的差錯報文,并發送UDP消息。但是traceroute也可以使用ICMP ECHO數據包來探測路徑,這就和tracert原理相同了。另外探測的協議也能從UDP修改為TCP。截圖如下:
TCP提供一種面向連接的、可靠的字節流服務。面向連接意味著兩個使用TCP的應用在彼此交換數據之前必須先建立一個TCP連接。
telnet和tcping/tcpping就是用到了TCP連接的建立過程來探測網絡連通性的。
我們來看下TCP連接的建立過程,如下圖所示:
(1)第一次握手
客戶端執行主動打開(active open)連接,發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號(ISN)。這個SYN段為報文段1。發送內容包括:SYN=1,Seq=J
(2)第二次握手
服務器端收到SYN,執行被動打開(passive open)連接,服務器發回包含服務器的初始序號的SYN報文段,作為應答。同時,將確認序號(Ack)設置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將占用一個序號。發送內容包括:SYN=1,ACK=1,Seq=K,Ack=J+1
(3)第三次握手
客戶端收到服務器ACK回包后,首先進入ESTABLISHED狀態,之后發送ACK給服務器,最后服務器也進入ESTABLISHED狀態。發送內容包括:ACK=1,Seq=J+1,Ack=K+1
telnet是Internet遠程登錄服務的標準協議和主要方式。
通過使用telnet工具來和目標主機建立TCP會話,即可驗證目標主機的特定端口開放情況。
我們通過telnet baidu.com的TCP443端口,驗證端口的開放情況,如下圖所示:
Tcping/tcpping命令的原理和telnet原理一樣,都是通過和目標主機的特定端口建立TCP會話,來驗證網絡開放情況。
接來下詳細介紹下windows平臺中tcping的安裝和使用。Linux平臺的tcpping使用方法相同,不再贅述。
(1)下載tcping.exe工具
(2)存放tcping.exe工具
Tcping.exe是可執行文件,不用安裝,直接運行。
這里成哥是放到了e盤下面,所以要切換到e盤來使用tcping的命令。
(3)使用示例
注意這里使用了-d ,-h ,-t三個參數,顯示如下,能看到時間間隔,以及不停的探測。
我們通過抓包,來看看每一次探測的情況。
可以看到源主機和目標主機建立了TCP會話,之后又立刻進行了TCP會話釋放。
常用的參數如下:
-t 不停的發送數據包。可通過Ctrl+C停止發包。
-n 5 一次發送 5 個數據包,默認一次發送4個 : tecping -n 5 www.baidu.com 會tcping 百度5次,也可以跟其他數字。
-d 在每行前面顯示詳細日期時間。
-g 5 失敗5次就放棄(注意默認是80端口,端口沒開也算失敗)
-h 以http 的模式工作,可以測試主機是否提供http服務
本篇文章介紹了使用ICMP協議和TCP協議的網絡連通性測試工具,這些工具都是我們工作和生活中最常用的網絡探測工具,希望對大家有幫助。
--END--
@IT管理局專注計算機領域技術、大學生活、學習方法、求職招聘、職業規劃、職場感悟等類型的原創內容。期待與你相遇,和你一同成長。
相關文章推薦:
ping www.baidu.com,從命令執行開始,到結果返回總共需要經過以下幾步:
1、DNS解析:www.baidu.com解析成具體的IP地址,因為數據包在網絡上傳輸時只認IP地址。
2、查找路由表:IP地址以后,接下來就是要查找路由,路由的作用是決定數據包的下一跳地址。
3、查找ARP表:下一跳IP地址以后,是不是說數據包就能發出去了呢。 也不能,因為數據包最終在傳輸的過程
中,并不認IP地址,而只認MAC地址。(注意這里的ARP請求只有在ARP表中查找不到的情況下才會發送,并且查
詢完以后會進行緩存。在有效其內不再重新發送ARP請求,以提高效率。)
4、數據包發送:有了MAC以后,數據包便從網卡發送出去,先到達交換機,然后再通過交換機轉發給網關。
5、路由轉發(重復以上過程)
訪問百度說明 在同一個頁面中,請求比較多的話,可以打開HTTP KeepAlive, 復用連接,避免3次握手帶來的開銷。HTTP2.0 進一步優化,通過多路復用技術,允許同時通過單一的 HTTP/2 連接發起多重的請求-響應消息。也就是可以在在一次傳輸中發送多個css,js,圖片等資源,可以重復利用,非每次請求都3次4揮。
注意:善用自帶說明文檔及參數
命令+/? 幫助文檔
windows查看配置:systeminfo
ipconfig和netstat命令后面不接IP地址、主機名,其余3個命令ping,tracert,arp后面都要接主機地址。
網絡基本功系列:細說網絡那些事兒
1、ping
用來檢測一幀數據從當前主機傳送到目的主機所需要的時間。來確定兩臺計算機之間的網絡是否連通。預測故障和確定故障源是非常有效。ping命令主要基于ICMP
ping回答了兩個基本的問題:是否有連接?連接的質量如何?
常用參數:
-t 使當前主機不斷地向目的主機發送數據,直到使用Ctrl-C中斷;
-n count 指定要做多少次ping,其中count為正整數值;
ping www.baidu.com -4 count
它的作用主要為:
用來檢測網絡的連通情況和分析網絡速度
根據域名得到服務器IP
根據ping返回的TTL值來判斷對方所使用的操作系統及數據包經過路由器數量。
我們通常會用它來直接ping ip地址,來測試網絡的連通情況。
類如這種,直接ping ip地址或網關,ping通會顯示出以上數據,有朋友可能會問,bytes=32;time<1ms;TTL=128 這些是什么意思。
bytes值:數據包大小,也就是字節。
time值:響應時間,這個時間越小,說明你連接這個地址速度越快。
TTL值:Time To Live,表示DNS記錄在DNS服務器上存在的時間,它是IP協議包的一個值,告訴路由器該數據包何時需要被丟棄。可以通過Ping返回的TTL值大小,粗略地判斷目標系統類型是Windows系列還是UNIX/Linux系列。
默認情況下,Linux系統的TTL值為64或255,WindowsNT/2000/XP系統的TTL值為128,Windows98系統的TTL值為32,UNIX主機的TTL值為255。
因此一般TTL值:
100~130ms之間,Windows系統 ;
240~255ms之間,UNIX/Linux系統。
當然,我們今天主要了解并不是這些,而是ping的其它參考。
ping命令除了直接ping網絡的ip地址,驗證網絡暢通和速度之外,它還有這些用法。
ping -t的使用
不間斷地Ping指定計算機,直到管理員中斷。
這就說明電腦連接路由器是通的,網絡效果很好。下面按按住鍵盤的Ctrl+c終止它繼續ping下去,就會停止了,會總結出運行的數據包有多少,通斷的有多少了。
ping -a的使用
ping-a解析計算機名與NetBios名。就是可以通過ping它的ip地址,可以解析出主機名。
ping -n的使用
在默認情況下,一般都只發送四個數據包,通過這個命令可以自己定義發送的個數,對衡量網絡速度很有幫助,比如我想測試發送10個數據包的返回的平均時間為多少,最快時間為多少,最慢時間為多少就可以通過以下獲知:
從以上我就可以知道在給47.93.187.142發送10個數據包的過程當中,返回了10個,沒有丟失,這10個數據包當中返回速度最快為32ms,最慢為55ms,平均速度為37ms。說明我的網絡良好。
如果對于一些不好的網絡,比如監控系統中非常卡頓,這樣測試,返回的結果可能會顯示出丟失出一部分,如果丟失的比較多的話,那么就說明網絡不好,可以很直觀的判斷出網絡的情況。
ping -l size的使用
-l size:發送size指定大小的到目標主機的數據包。
在默認的情況下Windows的ping發送的數據包大小為32byt,最大能發送65500byt。當一次發送的數據包大于或等于65500byt時,將可能導致接收方計算機宕機。所以微軟限制了這一數值;這個參數配合其它參數以后危害非常強大,比如攻擊者可以結合-t參數實施DOS攻擊。(所以它具有危險性,不要輕易向別人計算機使用)。
例如:ping -l 65500 -t 211.84.7.46
會連續對IP地址執行ping命令,直到被用戶以Ctrl+C中斷.
這樣它就會不停的向211.84.7.46計算機發送大小為65500byt的數據包,如果你只有一臺計算機也許沒有什么效果,但如果有很多計算機那么就可以使對方完全癱瘓,網絡嚴重堵塞,由此可見威力非同小可。
ping -r count 的使用
在"記錄路由"字段中記錄傳出和返回數據包的路由,探測經過的
路由個數,但最多只能跟蹤到9個路由。
ping -n 1 -r 9 202.102.224.25 (發送一個數據包,最多記錄9個路由)
將經過 9個路由都顯示出來了,可以看上圖。
ping命令用的較多的就這6類的,大家有可能在項目中會用到的。
2、ipconfig(ifconfig)
使用不帶參數的ipconfig命令可以得到以下信息:IP地址、子網掩碼、默認網關。而使用ipconfig /all,則可以得到更多的信息:主機名、DNS服務器、節點類型、網絡適配 器的物理地址、主機的IP地址、子網掩碼以及默認網關等。
ipconfig/all 查看本地網絡配置是否正確
MAC地址也叫物理地址、硬件地址或鏈路地址,由網絡設備制造商生產時寫在硬件內部。MAC地址的長度為48位(6個字節),通常表示為12個16進制數,每2個16進制數之間用冒號隔開,如"08:00:20:0A:8C:6D"就是一個MAC地址,其中前6位16進制數08:00:20代表網絡硬件制造商的編號,它由IEEE(電氣與電子工程師協會)分配,而后3位16進制數0A:8C:6D代表該制造商所制造的某個網絡產品(如網卡)的系列號。只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一的(可能不唯一)。
3、tracert
tracert 是一個簡單的網絡診斷工具,可以列出分組經過的路由節點(通過tracert命令,就能知道本機與目標主機之間經過多臺主機,即經過多少路由。),以及它在IP 網絡中每一跳的延遲。(這里的延遲是指:分組從信息源發送到目的地所需的時間,延遲也分為許多的種類——傳播延遲、傳輸延遲、處理延遲、排隊延遲等,是大多數網站性能的瓶頸之一)
判定數據包到達目的主機所經過的路徑、顯示數據包經過的中繼節點 清單和到達時間。
許多中間組件(路由器或網橋)的大型網絡中解決問題時,TRACERT 非常有用。
tracert -? #幫助命令tracert IP 地址 [-d]tracert www.baidu.com
4、netstat(看端口占用)
了解網絡的整體使用情況。它可以顯示當前正在活動的網絡連接的詳細信息,如采用的協議類型(看tcp,udp)、當前主機與遠端相連主機(一個或多個)的IP地址以及 它們之間的連接狀態等。
netstat監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息。
狀態列表
LISTEN :在監聽狀態中。
ESTABLISHED :已建立聯機的聯機情況。
TIME_WAIT :該聯機在目前已經是等待的狀態。
小于1024 的端口通常運行一些網絡服務,大于1024 的端口用來與遠程機器建立連接。
對本機的開放端口和連接信息一覽無余。
netstat -an #常用
netstat -a # 列出所有端口netstat -n #顯示所有已建立的有效連接。netstat -at # 列出所有TCP端口netstat -au # 列出所有UDP端口 重點提一下"-a"和"-n"選項。"-a"選項意在顯示所有連接,當不附加"-n"選項時,它顯示的是本地計算機的netbios名字+端口號。而加了"-n"選項后,它顯示的是本地IP地址+端口號。
netstat -a
-a顯示所有連接和偵聽端口,包括本地和遠程系統連接時使用的TCP端口或者UDP端口,在本地機器上的外部連接和我們遠程所連接的系統以及本地和遠程系統連接的狀態,如圖
使用該參數可以查看計算機的系統服務是否正常,判斷系統是否被種上木馬,如果發現不正常的端口與服務,要及時關閉端口或者服務。netstat -a命令還可以作為一種實時入侵檢測工具,判斷是否有外部計算機連接本地計算機。
-n參數可以顯示本機和本機相連的外部主機的IP地址,而不像-a參數顯示的只是計算機的NetBios名。
-e參數可以顯示以太網統計,聯合-s -p使用。-s顯示每個協議的統計,默認情況下,顯示TCP、UDP和IP協議的統計,再加上-p 就可以指定顯示TCP、UDP還是IP協議其中一種。如圖
-r參數可以顯示路由表的內容,類似route print(能讓雙網卡同時工作的非常實用的命令).。
-o參數可以顯示本地與外部主機相連的PID數值,taskkill需要通過這個數值才能中斷連接
發現可疑連接,調用任務管理器Ctrl+Shift+ESC組合鍵找到對應PID數值的進程
有些任務管理器沒有看到PID列,如下圖找出PID列
在任務管理器中找到對應PID數值的進程右擊結束進程。此時還沒有完全抵御入侵,更徹底點進入組策略新建規則
進入組策略命令:Win+R,輸入gpeidt.msc回車
3、根據協議新建IP安全策略--新建端口封堵入侵端口,徹底讓電腦保持安全。
5、arp(地址解析協議)
根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,并接收返回(響應)消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。用來顯示及修改特定IP地址的網卡地址
arp /? #幫助菜單arp -a #查看當前電腦上的ARP映射表。可以看到當前的ARP的映射關系是動態的還是靜態的。arp -d #清除信息
arp -a 查看所有ip及物理地址
arp -a 顯示的是你電腦的本地arp表,就是只要你的電腦通過tcp/ip協議訪問過的同一局域網的所有機器都會顯示在里面。
防止ARP攻擊的方法:使用arp -s命令綁定IP地址和MAC地址之后再用ARP -a就會顯示static了。
防止別人用P2P阻斷你方法很簡單在組策略里面用IP安全策略阻止所有來自對方電腦的數據包,這樣你們之間沒辦法通信他就不能控制你的
流量了。
arp -s IP MAC
6、nslookup(感覺沒有用?)
可以指定查詢的類型,可以查到DNS記錄的生存時間還可以指定使用哪個DNS服務器進行解釋。在已安裝TCP/IP協議的電腦上面均可以使用這個命令。主要用來診斷域名系統 (DNS) 基礎結構的信息。Nslookup(name server lookup)( 域名查詢):是一個用于查詢 Internet域名信息或診斷DNS 服務器問題的工具.
nslookup www.baidu.com
7、route(查看Windows路由表)
到目的地有多重方法,路由表就是看不同路的
route add命令詳解
路由表分為五列。第一列是網絡目的地址。列出了路由器連接的所有的網段。網絡掩碼列提供這個網段本身的子網掩碼,而不是連接到這個網段的網卡的子網掩碼。這基本上能夠讓路由器確定目的網絡的地址類。 第三列是網關。一旦路由器確定它要把這個數據包轉發到哪一個目的網絡,路由器就要查看網關列表。網關表告訴路由器這個數據包應該轉發到哪一個IP地址才能達到目的網絡。 接口列告訴路由器哪一個網卡連接到了合適的目的網絡。從技術上說,接口列僅告訴路由器分配給網卡的IP地址。那個網卡把路由器連接到目的網絡。然而,路由器很聰明,知道這個地址綁定到哪一個物理網卡。 最后一列是測量。測量本身是一種科學。但是,我將設法簡單向你解釋一下它們做什么。我聽說過的一個最佳的解釋測量的方法是用機場的詞匯對此進行解釋。設想一下,我需要從北卡羅來納州的加洛特市飛往佛羅里達州的邁阿密。由于加洛特機場非常大,我要去邁阿密海灘可以有很多選擇。我可以乘坐西北航空公司的班機。那個班機能把我帶到密執安州的底特律,然后從底特律飛往邁阿密。我還可以乘坐大陸航空公司的班機飛往休斯頓,然后飛往邁阿密。另一個選擇是乘坐美國航空公司的飛機直接飛往邁阿密。我應該選擇哪一條線路呢? 看默認路由,也就是 0.0.0.0/0 這條路由,總共有兩個接口,分別是 10.1.88.95 和 192.168.10.45,網關分別是 10.1.1.254 和 192.168.10.1。那么會走哪一條呢?看后面的躍點數,最小的那個,就是優先的。
網卡優先級設置
windows下可以設置網絡服務訪問順序,在網絡連接-》更改適配器-》菜單欄高級-》高級設置-》適配器和綁定
9、net view
net view命令,來查看局域網中的計算機名稱;(非用戶名),可惜,只能看PC
想要某臺計算機名稱的IP地址,可以直接輸入命令"ping -4 計算機名",ping命令將顯示IP地址和包時間
ping -4 YJ-PC #ping -4 用戶名
這個方法非常實用,需要共享的時候不知道IP就一個命令搞定了。
問:在win7系統中,想要查看本機所有ICMP連接情況,但是忘記了那個DOS命令是什么?求解答?
答:DOS命令是:netstat -s -p icmp。小編認為,總是忘記怎么查看ICMP連接的命令,應該先了解一下ICMP 是什么意思,這樣容易記住這個命令。
ICMP是什么
ICMP是(Internet Control Message Protocol)Internet控制報文協議。對于網絡安全具有及其重要的意義,其本身的特點決定了它非常容易被用于攻擊網絡上的路由器和主機。
ICMP是TCP/IP協議族的一個子協議,屬于網絡層協議。
ICMP的功能:
1、偵測遠端主機是否存在
2、建立及維護路由資料
3、重導資料傳送路徑(ICMP重定向)
4、資料流量控制。ICMP在溝通之中,主要是透過不同的類別(Type)與代碼(Code) 讓機器來識別不同的連線狀況。
加速器:
寬帶帶寬理解為高速路寬度,不會改變距離,高速各種車,網游加速器專用車道(公交專用類似),路由器無線改有線
國內來說,延遲與距離的關系不大,尤其是光纖大規模普及后,光信號要比電信號快的多。其實延遲高低主要與網絡設備的負
載有關。我們的數據要跨越很多個網絡節點,每個數據包都要經過一次次轉發,才最終到達游戲服務器。由于國內運營商都在
超賣帶寬,網絡設備壓力很大,當上網高峰時,網絡設備不堪重負,延遲就會上升,丟包的幾率也會上升。
Linus命令:
telnet命令用于登錄遠程主機,對遠程主機進行管理。telnet因為采用明文傳送報文,安全性不好
netstat -a //列出所有端口netstat -at //列出所有tcp端口netstat -au //列出所有udp端口