色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux網絡訪問慢?這個方法快速定位

dyquk4xk2p3d ? 來源:良許Linux ? 2023-01-13 09:21 ? 次閱讀

Linux 服務器中,可以通過內核調優、DPDK 以及 XDP 等多種方式提高服務器的抗攻擊能力,降低 DDoS 對正常服務的影響。在應用程序中,可以使用各級緩存、WAF、CDN 等來緩解 DDoS 對應用程序的影響。

但是需要注意的是,如果 DDoS 流量已經到達 Linux 服務器,那么即使應用層做了各種優化,網絡服務延遲一般也會比平時大很多。

因此,在實際應用中,我們通常使用 Linux 服務器,配合專業的流量清洗和網絡防火墻設備,來緩解這個問題。

除了 DDoS 導致的網絡延遲增加,我想你一定見過很多其他原因導致的網絡延遲,例如:

網絡傳輸慢導致的延遲。

Linux 內核協議棧數據包處理速度慢導致的延遲。

應用程序數據處理速度慢造成的延遲等。

那么當我們遇到這些原因造成的延誤時,我們該怎么辦呢?如何定位網絡延遲的根本原因?讓我們在本文中討論網絡延遲。

Linux 網絡延遲

談到網絡延遲(Network Latency),人們通常認為它是指網絡數據傳輸所需的時間。但是,這里的“時間”是指雙向流量,即數據從源發送到目的地,然后從目的地地址返回響應的往返時間:RTT(Round-Trip Time)

除了網絡延遲之外,另一個常用的指標是應用延遲(Application Latency),它是指應用接收請求并返回響應所需的時間。通常,應用延遲也稱為往返延遲,它是網絡數據傳輸時間加上數據處理時間的總和。

通常人們使用ping命令來測試網絡延遲,ping是基于 ICMP 協議的,它通過計算 ICMP 發出的響應報文和 ICMP 發出的請求報文之間的時間差來獲得往返延遲時間。這個過程不需要特殊的認證,從而經常被很多網絡攻擊所利用,如,端口掃描工具nmap、分組工具hping3等。

因此,為了避免這些問題,很多網絡服務都會禁用 ICMP,這使得我們無法使用 ping 來測試網絡服務的可用性和往返延遲。在這種情況下,您可以使用traceroute或hping3的 TCP 和 UDP 模式來獲取網絡延遲。

例如:

#-c:3requests
#-S:SetTCPSYN
#-p:Setportto80
$hping3-c3-S-p80google.com
HPINGgoogle.com(eth0142.250.64.110):Sset,40headers+0databytes
len=46ip=142.250.64.110ttl=51id=47908sport=80flags=SAseq=0win=8192rtt=9.3ms
len=46ip=142.250.64.110ttl=51id=6788sport=80flags=SAseq=1win=8192rtt=10.9ms
len=46ip=142.250.64.110ttl=51id=37699sport=80flags=SAseq=2win=8192rtt=11.9ms
---baidu.comhpingstatistic---
3packetstransmitted,3packetsreceived,0%packetloss
round-tripmin/avg/max=9.3/10.9/11.9ms

當然,你也可以使用traceroute:

$traceroute--tcp-p80-ngoogle.com
traceroutetogoogle.com(142.250.190.110),30hopsmax,60bytepackets
1***
2240.1.236.340.198ms**
3**243.254.11.50.189ms
4*240.1.236.170.216ms240.1.236.240.175ms
5241.0.12.760.181ms108.166.244.150.234ms241.0.12.760.219ms
...
24142.250.190.11017.465ms108.170.244.118.532ms142.251.60.20718.595ms

traceroute會在路由的每一跳(hop)發送三個數據包,并在收到響應后輸出往返延遲。如果沒有響應或響應超時(默認 5s),將輸出一個星號*。

案例展示

我們需要在此演示中托管 host1 和 host2 兩個主機:

host1 (192.168.0.30):托管兩個 Nginx Web 應用程序(正常和延遲)

host2 (192.168.0.2):分析主機

host1 準備

在 host1 上,讓我們運行啟動兩個容器,它們分別是官方 Nginx 和具有延遲版本的 Nginx:

#Officialnginx
$dockerrun--network=host--name=good-itdnginx
fb4ed7cb9177d10e270f8320a7fb64717eac3451114c9fab3c50e02be2e88ba2
#Latencyversionofnginx

$dockerrun--namenginx--network=host-itdfeisky/nginx:latency
b99bd136dcfd907747d9c803fdc0255e578bad6d66f4e9c32b826d75b6812724

運行以下命令以驗證兩個容器都在為流量提供服務:

$curlhttp://127.0.0.1


...

Thankyouforusingnginx.

$curlhttp://127.0.0.1:8080 ...

Thankyouforusingnginx.

host2 準備

現在讓我們用上面提到的hping3來測試它們的延遲,看看有什么區別。在 host2 中,執行以下命令分別測試案例機的 8080 端口和 80 端口的延遲:

80 端口:

$hping3-c3-S-p80192.168.0.30
HPING192.168.0.30(eth0192.168.0.30):Sset,40headers+0databytes
len=44ip=192.168.0.30ttl=64DFid=0sport=80flags=SAseq=0win=29200rtt=7.8ms
len=44ip=192.168.0.30ttl=64DFid=0sport=80flags=SAseq=1win=29200rtt=7.7ms
len=44ip=192.168.0.30ttl=64DFid=0sport=80flags=SAseq=2win=29200rtt=7.6ms
---192.168.0.30hpingstatistic---
3packetstransmitted,3packetsreceived,0%packetloss
round-tripmin/avg/max=7.6/7.7/7.8ms

8080 端口:

#測試8080端口延遲
$hping3-c3-S-p8080192.168.0.30
HPING192.168.0.30(eth0192.168.0.30):Sset,40headers+0databytes
len=44ip=192.168.0.30ttl=64DFid=0sport=8080flags=SAseq=0win=29200rtt=7.7ms
len=44ip=192.168.0.30ttl=64DFid=0sport=8080flags=SAseq=1win=29200rtt=7.6ms
len=44ip=192.168.0.30ttl=64DFid=0sport=8080flags=SAseq=2win=29200rtt=7.3ms
---192.168.0.30hpingstatistic---
3packetstransmitted,3packetsreceived,0%packetloss
round-tripmin/avg/max=7.3/7.6/7.7ms

從這個輸出中您可以看到兩個端口的延遲大致相同,均為 7 毫秒。但這僅適用于單個請求。如果換成并發請求怎么辦?接下來,讓我們用wrk (https://github.com/wg/wrk) 試試。

80 端口:

$wrk--latency-c100-t2--timeout2http://192.168.0.30/
Running10stest@http://192.168.0.30/
2threadsand100connections
ThreadStatsAvgStdevMax+/-Stdev
Latency9.19ms12.32ms319.61ms97.80%
Req/Sec6.20k426.808.25k85.50%
LatencyDistribution
50%7.78ms
75%8.22ms
90%9.14ms
99%50.53ms
123558requestsin10.01s,100.15MBread
Requests/sec:12340.91
Transfer/sec:10.00MB

8080 端口:

$wrk--latency-c100-t2--timeout2http://192.168.0.30:8080/
Running10stest@http://192.168.0.30:8080/
2threadsand100connections
ThreadStatsAvgStdevMax+/-Stdev
Latency43.60ms6.41ms56.58ms97.06%
Req/Sec1.15k120.291.92k88.50%
LatencyDistribution
50%44.02ms
75%44.33ms
90%47.62ms
99%48.88ms
22853requestsin10.01s,18.55MBread
Requests/sec:2283.31
Transfer/sec:1.85MB

從以上兩個輸出可以看出,官方 Nginx(監聽 80 端口)的平均延遲為 9.19ms,而案例 Nginx(監聽 8080 端口)的平均延遲為 43.6ms。從延遲分布上來看,官方 Nginx 可以在 9ms 內完成 90% 的請求;對于案例 Nginx,50% 的請求已經達到 44ms。

那么這里發生了什么呢?我們來做一些分析:

在 host1 中,讓我們使用tcpdump捕獲一些網絡數據包:

$tcpdump-nntcpport8080-wnginx.pcap

現在,在 host2 上重新運行wrk命令

$wrk--latency-c100-t2--timeout2http://192.168.0.30:8080/

當wrk命令完成后,再次切換回 Terminal 1(host1 的終端)并按 Ctrl+C 結束tcpdump命令。然后,用Wireshark把抓到的nginx.pcap復制到本機(如果 VM1(host1 的虛擬機)已經有圖形界面,可以跳過復制步驟),用Wireshark打開。

由于網絡包的數量很多,我們可以先過濾一下。例如,選中一個包后,可以右鍵選擇 “Follow”->“TCP Stream”,如下圖:

22e4abe4-92d2-11ed-bfe3-dac502259ad0.png

然后,關閉彈出的對話框并返回Wireshark主窗口。這時你會發現Wireshark已經自動為你設置了一個過濾表達式tcp.stream eq 24。如下圖所示(圖中省略了源 IP 和目的 IP):

23127362-92d2-11ed-bfe3-dac502259ad0.png

從這里,您可以看到從三次握手開始,此 TCP 連接的每個請求和響應。當然,這可能不夠直觀,可以繼續點擊菜單欄中的 Statistics -> Flow Graph,選擇 “Limit to display filter”,將 Flow type 設置為 “TCP Flows”:

23256d8c-92d2-11ed-bfe3-dac502259ad0.png

請注意,此圖的左側是客戶端,而右側是 Nginx 服務器。從這個圖中可以看出,前三次握手和第一次 HTTP 請求和響應都相當快,但是第二次 HTTP 請求就比較慢了,尤其是客戶端收到服務器的第一個數據包后,該 ACK 響應(圖中的藍線)在 40ms 后才被發送。

看到 40ms 的值,你有沒有想到什么?事實上,這是 TCP 延遲 ACK 的最小超時。這是 TCP ACK 的一種優化機制,即不是每次請求都發送一個 ACK,而是等待一段時間(比如 40ms),看看有沒有“搭車”的數據包。如果在此期間還有其他數據包需要發送,它們將與 ACK 一起被發送。當然,如果等不及其他數據包,超時后會單獨發送 ACK。

由于案例中的客戶端發生了 40ms 延遲,我們有理由懷疑客戶端開啟了延遲確認機制(Delayed Acknowledgment Mechanism)。這里的客戶端其實就是之前運行的 wrk。

根據 TCP 文檔,只有在 TCP 套接字專門設置了 TCP_QUICKACK 時才會啟用快速確認模式(Fast Acknowledgment Mode);否則,默認使用延遲確認機制

TCP_QUICKACK(sinceLinux2.4.4)
Enablequickackmodeifsetordisablequickackmodeifcleared.Inquickackmode,acksaresentimme‐
diately,ratherthandelayedifneededinaccordancetonormalTCPoperation.Thisflagisnotperma‐
nent,itonlyenablesaswitchtoorfromquickackmode.SubsequentoperationoftheTCPprotocolwill
onceagainenter/leavequickackmodedependingoninternalprotocolprocessingandfactorssuchas
delayedacktimeoutsoccurringanddatatransfer.Thisoptionshouldnotbeusedincodeintendedtobe
portable.

讓我們測試一下我們的質疑:

$strace-fwrk--latency-c100-t2--timeout2http://192.168.0.30:8080/
...
setsockopt(52,SOL_TCP,TCP_NODELAY,[1],4)=0
...

可以看到wrk只設置了TCP_NODELAY選項,沒有設置TCP_QUICKACK。現在您可以看到為什么延遲 Nginx(案例 Nginx)響應會出現一個延遲。

結論

在本文中,我將向您展示如何分析增加的網絡延遲。網絡延遲是核心網絡性能指標。由于網絡傳輸、網絡報文處理等多種因素的影響,網絡延遲是不可避免的。但過多的網絡延遲會直接影響用戶體驗。

使用hping3和wrk等工具確認單個請求和并發請求的網絡延遲是否正常。

使用traceroute,確認路由正確,并查看路由中每個網關跳躍點的延遲。

使用tcpdump和Wireshark確認網絡數據包是否正常收發。

使用strace等觀察應用程序對網絡 socket 的調用是否正常。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40282
  • Linux
    +關注

    關注

    87

    文章

    11296

    瀏覽量

    209360
  • DDoS
    +關注

    關注

    3

    文章

    171

    瀏覽量

    23064
  • 服務器
    +關注

    關注

    12

    文章

    9129

    瀏覽量

    85347
  • 網絡
    +關注

    關注

    14

    文章

    7557

    瀏覽量

    88739

原文標題:Linux 網絡訪問慢?這個方法快速定位

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    網站用戶終于解決訪問網站的問題

    很慢,但是南方的朋友訪問均是速度非常快的.唉,知道這個是南方網通互通的問題.一直沒有想到很好的解決方法.直到去年11月份在網上看到有雙線主機這一回事,據說可以解決這個問題,但那時候好像
    發表于 08-03 15:47

    巧妙解決Windows XP網絡訪問的難題

    始終會顯示一個“安全刪除硬件”的圖標。這是nforce芯片組在安裝了IDE-SW主板驅動以后,系統會把SATA硬盤識別為可移動設備,每次開機后都會顯示這個圖標。 圖 安全刪除硬件  清除方法:  打開
    發表于 08-13 09:45

    【轉載】快速追蹤和定位產生HardFault原因的方法

    AN0028—快速追蹤和定位產生HardFault原因的方法概述在使用ARM Cortex-M 系列 MCU時(如AT32 MCU),有時會出現程序運行異常。當通過編譯器在debug模式查原因
    發表于 08-17 09:44

    有什么方法可以快速定位電源/地阻抗存在的問題嗎?

    有什么方法可以快速定位電源/地阻抗存在的問題嗎?
    發表于 05-08 07:02

    有什么方法可以從ESP8266訪問Linux共享?

    有什么方法可以從我的 ESP8266 訪問 Linux 共享? 我想根據一兩個文件的狀態點亮一些 LED。
    發表于 06-02 08:37

    快速定位DMA訪問外設寄存器地址

    快速定位DMA訪問外設寄存器地址快速定位DMA訪問外設寄存器地址
    發表于 10-19 08:14

    基于USB設備的Linux網絡驅動程序開發

    介紹Linux 的體系結構及其網絡子系統,并結合USB 設備在Linux 下的訪問機制,給出了一種USB 網絡驅動程序的設計
    發表于 08-11 11:23 ?20次下載

    脈沖快速充電方法有效控制電池極化的研究

    脈沖快速充電方法有效控制電池極化的研究:本文以鉛酸電池為例著重介紹了脈沖快速充電方法有效控制
    發表于 10-01 14:22 ?55次下載

    Linux的常用網絡命令

    Linux的常用網絡命令 Linux 的常用網絡命令  計算機網絡的主要優點是能夠實現資源和信息的共享,并且用戶可以遠程
    發表于 01-18 12:47 ?1181次閱讀

    電腦卡惹人煩 這五個妙招可以讓Linux飛起來

    玩兒電腦最怕的就是卡,那么電腦卡應該怎么解決呢?對于windows系統來說,你可能有各種免費的殺毒軟件、全家桶幫你清空系統空間,那么Linux系統怎么辦?今天筆者就為大家介紹幾種方法
    發表于 04-18 15:26 ?1500次閱讀

    怎么快速入門linux

    這次我們該談論什么? 這次讓我們討論一下這個Linux([inks])。 什么是Linux([Inks])? 這個Linux([inks])
    發表于 09-23 16:17 ?731次閱讀

    為什么國內網站訪問香港服務器網速

    網站有機會被網絡速度、服務器性能、網站內容大小和網絡編碼影響訪問速度, 導致網站卡頓影響業務運作, 以最為常見的問題是因為網絡供應商不給力導致網絡
    的頭像 發表于 07-10 14:50 ?1960次閱讀

    Linux服務器常見的網絡故障排查方法

    日常工作中我們有時會遇到服務器網絡不通問題,導致服務器無法正常運行。要想解決服務器網絡故障問題,通常要先進行網絡故障排查,這里以Linux服務器為例來看下常用的
    的頭像 發表于 04-14 15:47 ?2807次閱讀

    國外訪問部署在國內SAP系統,云專線無視延遲

    當國外用戶需要訪問部署在國內的SAP系統時,可能會遇到連接速度的問題。這是由于跨國網絡連接較遠,網絡延遲和帶寬等問題所致。為了解決這些問題,企業可以使用多種技術來提高連接速度。 云專
    的頭像 發表于 05-08 14:14 ?789次閱讀

    linux文件訪問權限怎么設置

    、權限的類型、權限的表示方法以及如何使用命令來設置文件訪問權限。 一、Linux 文件訪問權限的背景知識 在 Linux 中,每個文件和目錄
    的頭像 發表于 11-23 10:20 ?1500次閱讀
    主站蜘蛛池模板: 青柠电影在线看| china年轻小帅脸直播飞机| 青青草伊人久久| 好男人在线高清WWW免费观看| 97超碰在线视频 免费| 亚洲成人黄色在线| 日本美女靠逼| 麻豆免费观看高清完整视频在线 | 国自产拍 高清精品| zoovideo人与驴mp4| 中文在线日韩亚洲制服| 小小水蜜桃视频高清在线观看免费| 免费小视频在线观看| 久久99视热频国只有精品| 国产Av男人的天堂精品良久| 97色伦97色伦国产| 伊人久久大香线蕉电影院| 午夜福利免费0948视频| 热综合一本伊人久久精品| 恋夜直播午夜秀场最新| 好色美女小雅| 国产午夜精品理论片久久影视| 达达兔午夜一级毛片| FREEXXX性乌克兰XXX| 1a级毛片免费观看| 一本道亚洲区免费观看| 亚洲精品久久久无码| 天天操夜夜噜| 射漂亮黑b丝女| 日本熟妇乱妇熟色在线电影 | 亚洲成人中文| 偷拍亚洲色自拍| 手机看片国产免费久久网| 强上轮流内射高NP男男| 欧美00后rapper潮水| 妹妹我要操| 免费果冻传媒2021在线观看| 老师的快感电影完整版| 巨胸美乳中文在线观看| 啦啦啦WWW在线观看免费高清版| 久久re热在线视频精99|