linux中测试网络速度的命令(在Linux中模拟网络延迟和丢包)
关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。
在本文中,我们将了解如何使用 Linux 中的 tc 命令来模拟网络缓慢以及我们如何模拟数据包损坏。
可能会有这样的场景,当你想在网络很慢的时候测试一个应用程序(我们也称之为高网络延迟)。或者您正在重现观察到某些异常行为的客户场景(具有高网络延迟)。在 Chrome 浏览器中,我们可以轻松模拟较慢的网络连接。当我们使用 Web 应用程序时,这非常有用。但我们也可以拥有非网络应用程序,如网络服务应用程序、消息传递代理等。此外,使用 Chrome 开发工具模拟的缓慢更多来自客户端。
在本文中,我们将了解如何使用Linux 中的 tc命令来模拟网络缓慢以及我们如何模拟数据包损坏。我在网上关注了几篇文章,在测试了文章中提到的命令后,我分享了我的经验。
1.使用python 实用程序运行基本的 HTTP 应用程序。然后我们可以使用 curl 或ab实用程序检查响应时间。
$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
# we can use curl with following syntax to get statistics for total response time.
$ curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n' http://localhost:8000/
Establish Connection: 0.000331s
TTFB: 0.002978s
Total: 0.003120s
# we can also use ab utility to understand statistics of a request. Here -n switch is used for number of request to be sent.
$ ab -n 1 http://localhost:8000/
This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient).....done
Server Software: SimpleHTTP/0.6
Server Hostname: localhost
Server Port: 8000
Document Path: /
Document Length: 2571 bytes
Concurrency Level: 1
Time taken for tests: 0.003 seconds
Complete requests: 1
Failed requests: 0
Total transferred: 2727 bytes
HTML transferred: 2571 bytes
Requests per second: 374.11 [#/sec] (mean)
Time per request: 2.673 [ms] (mean)
Time per request: 2.673 [ms] (mean, across all concurrent requests)
Transfer rate: 996.29 [Kbytes/sec] received
Connection Times (ms) min mean[ /-sd] median max
Connect: 0 0 0.0 0 0 Processing: 3 3 0.0 3 3 Waiting: 3 3 0.0 3 3 Total: 3 3 0.0 3 3
2. 现在设置两秒的延迟,然后再次检查响应时间。此外,我们会看到由于我们设置的延迟,总响应时间增加了。
#set a delay of 2 second for loopback interface.
$ sudo tc qdisc replace dev lo root netem delay 2000ms
# show the rule set
$ tc qdisc show dev lo
qdisc netem 8001: root refcnt 2 limit 1000 delay 2s
# we can use curl(or ab) with following syntax to get statistics for total response time.
$ curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n' http://localhost:8000/
Establish Connection: 4.000354s
TTFB: 8.002722s
Total: 8.002833s
cpandey@cpandey:~$ ab -n 1 http://localhost:8000/
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient).....done
Server Software: SimpleHTTP/0.6
Server Hostname: localhost
Server Port: 8000
Document Path: /
Document Length: 2571 bytes
Concurrency Level: 1 Time taken for tests: 8.003 seconds
Complete requests: 1 Failed requests: 0
Total transferred: 2727 bytes
HTML transferred: 2571 bytes
Requests per second: 0.12 [#/sec] (mean)
Time per request: 8002.822 [ms] (mean)
Time per request: 8002.822 [ms] (mean, across all concurrent requests)
Transfer rate: 0.33 [Kbytes/sec] received
Connection Times
(ms) min mean[ /-sd] median max
Connect: 4000 4000 0.0 4000 4000 P
rocessing: 4003 4003 0.0 4003 4003
Waiting: 4002 4002 0.0 4002 4002
Total: 8003 8003 0.0 8003 8003
3、最后,删除我们之前设置的规则;这很重要,因为我们正在模拟一个慢速网络。这会减慢整个接口和关联的网络流量。因此,一旦我们完成测试,重要的是删除我们设置的规则。
$ sudo tc qdisc delete dev lo root
4. 我们还可以按照设置的百分比模拟数据包的损坏。根据我的测试,我发现这也有助于模拟网络延迟。我观察到数据包被重新传输,因为TCP 协议确保数据被正确接收,没有数据丢失,并且是有序的。
$ sudo tc qdisc replace dev lo root netem corrupt 50%
就是这样; 我希望您会发现这篇文章有趣且有帮助。谢谢你。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com