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%


linux中测试网络速度的命令(在Linux中模拟网络延迟和丢包)(1)

就是这样; 我希望您会发现这篇文章有趣且有帮助。谢谢你。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页