測量到遠程主機的網絡延遲的一種常用方法是使用ping應用程序。該ping工具依賴ICMP ECHO請求和回複數據包來測量遠程主機的往返延遲。
但是,在某些情況下,ICMP流量可能會被防火牆阻止,這使得該ping應用程序對於受限制的防火牆後面的主機毫無用處。
在這種情況下,你將需要依賴使用TCP/UDP數據包的第3層測量工具,因為這些第3層數據包更有可能繞過常見的防火牆規則。
一種這樣的第3層測量工具是Tcpping。為了測量延遲,Tcpping利用所謂的半開放連接技術,基於TCP三路握手。也就是說,它通過端口號(默認為80)向遠程主機發送TCP SYN數據包。
如果遠程主機正在偵聽該端口,它將以TCP ACK數據包響應。否則,它將以TCP RST數據包響應。無論哪種方式,Tcpping都可以通過定時傳出SYN數據包和傳入ACK(或RST)數據包來測量遠程主機的往返時間 (RTT) 延遲。
1、在Linux上安裝Tcpping
Tcpping作為Shell腳本實現,該腳本響應外部工具來執行和報告RTT測量。因此,為了安裝Tcpping,你首先需要先安裝這些先決條件。
2、安裝依賴Tcptraceroute
要在Ubuntu或Debian上安裝Tcptraceroute:
$sudoapt-getinstalltcptraceroute
要在CentOS或RHEL上安裝Tcptraceroute,首先在你的系統上設置RepoForge,然後運行:
$sudoyuminstalltcptraceroute
3、安裝依賴BC
使用的另一個工具Tcpping是GNUbc,它預裝在所有主要的Linux發行版上。但是,如果你Tcpping在最小Linux運行時環境(例如Docker容器、AWS最小映像AMI)中運行,則BC可能不會預先安裝。在這種情況下,你需要BC自己安裝。
在Debian的Linux上安裝:
$sudoapt-getinstallbc
在Red Hat的Linux上安裝:
$sudoyuminstallbc
4、安裝Tcpping
安裝這些必備工具後,最後繼續Tcpping從官方源下載。
$wgethttp://www.vdberg.org/~richard/tcpping$cptcpping/usr/bin$chmod755tcpping
5、使用Tcpping來衡量延遲
要使用測量網絡延遲Tcpping,你可以使用以下格式。
tcpping[-d][-c][-rsec][-xcount]ipaddress[端口] -d: 在每個結果之前打印時間戳。 -c: 使用分列輸出以便於解析。 -r:連續探測之間的間隔(以秒為單位)(默認為1秒)。 -x: 重複n次(默認無限制)。 [port]: 目標端口(默認為80)。
請注意,你需要root權限才能運行,Tcpping因為它需要調用特權Tcptraceroute命令。
對於任何開放80端口的目標Web服務器,你可以使用以下方法測量其RTT延遲Tcpping。
tcppingwww.rumenz.comseq0:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>33.822mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq1:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>33.975mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq2:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>32.010mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq3:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>32.209mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq4:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>30.866mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq5:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>34.866mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq6:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>32.604mstraceroutetorumenz.com(42.194.162.109),255hopsmax,60bytepacketsseq7:tcpresponsefrom42.194.162.109(42.194.162.109)<syn,ack>30.495ms
對於任意遠程主機,在運行Tcpping,要檢查遠程TCP端口是否打開,你可以使用nc如下命令。
$nc-vn<ip-address><port-number>
-t: 連續CPing ,直到使用Ctrl+C鍵停止
tcping-t1.1.1.180
-n 5: TCPing 5次後停止
tcping-i51.1.1.180
-w 0.5: 設置超時時間為0.5秒(1秒=1000毫秒),單位秒
tcping-w0.51.1.1.180
-d:在每行返回信息中加入時間信息
tcping-d1.1.1.180
-s: 當TCPing測試成功後(在超時時間以內返回TCPing延遲數據)自動停止TCPing
tcping-s1.1.1.180
-4: 優先IPv4(如果一個域名有IPv4和IPv6解析,那麼走IPv4)
tcping-s1.1.1.180
-6:優先IPv6(如果一個域名有IPv4和IPv6解析,那麼走IPv6)
tcping-6www.rumenz.com80
--file: TCPing將逐行循環遍歷文件內的服務器IP/域名信息(一行一個,支持端口,例如:1.1.1.1 443)
tcping--filerumenz.txt