質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

3706閲覧

Raspberry Pi 上で、tcコマンドを用いてネットワーク遅延を疑似的に発生させたい

tea9

総合スコア6

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/11/14 20:14

実現したいこと

回線遅延の状態をエミュレートしたく、Raspberry Pi 3 Model B上でtcコマンドを用いてネットワーク遅延を疑似的に発生させたい

聞きたいこと

  • tcコマンドの使い方
  • tcコマンド利用にあたり、パーミッションの設定、有効化等、何か必要な手順があるのか

試したこと

  • 200msの遅延を発生させようとした
sudo tc qdisc add dev eth0 root netem delay 200ms

しかし、いくつかの宛先にpingを打ってRTTを計測したところ、値は反映されていませんでした

※なお、以下の通り確認したところ、設定上では、値が反映されているようでした

$ sudo tc qdisc show dev eth0 qdisc netem 8005: root refcnt 2 limit 1000 delay 200.0ms

備考

以下、使用環境(Debianのバージョン)です。

$ cat /etc/debian_version 8.0

参考にしたサイト1
参考にしたサイト2

ご教示頂きたく、お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

tcコマンドは、LinuxカーネルのTraffic controlと言う機能を利用しているようで、raspberry piのLinuxカーネルをビルドしたときのカーネルコンフィグレーションの設定次第で、使えたり使えなかったりしそうです。

tc(8) - Linux man page

Tc is used to configure Traffic Control in the Linux kernel. Traffic Control consists of the following:

質問者さんと同じ環境ではないですが、私の持っているRaspberry Pi Model B では動作しました。

sh

1pi@raspberrypi ~ $ uname -a 2Linux raspberrypi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux 3pi@raspberrypi ~ $ cat /etc/debian_version 47.11 5pi@raspberrypi ~ $ cat /etc/issue 6Raspbian GNU/Linux 7 \n \l 7 8# 何もしていない状態でping 9ping -c 3 h5 http:www.google.com 10PING www.google.com (216.58.197.228) 56(84) bytes of data. 1164 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=1 ttl=54 time=4.41 ms 1264 bytes from nrt13s49-in-f4.1e100.net (216.58.197.228): icmp_req=2 ttl=54 time=4.48 ms 1364 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=3 ttl=54 time=4.36 ms 1464 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=4 ttl=54 time=4.54 ms 1564 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=5 ttl=54 time=4.58 ms 16 17--- www.google.com ping statistics --- 185 packets transmitted, 5 received, 0% packet loss, time 4006ms 19rtt min/avg/max/mdev = 4.364/4.479/4.585/0.100 ms 20 21# 400m秒の遅延をセット 22pi@raspberrypi ~ $ sudo tc qdisc add dev eth0 root netem delay 400ms 23pi@raspberrypi ~ $ ping -c 5 www.google.com 24PING www.google.com (216.58.197.228) 56(84) bytes of data. 2564 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=1 ttl=54 time=404 ms 2664 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=2 ttl=54 time=404 ms 2764 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=3 ttl=54 time=404 ms 2864 bytes from nrt13s49-in-f228.1e100.net (216.58.197.228): icmp_req=4 ttl=54 time=404 ms 2964 bytes from nrt13s49-in-f4.1e100.net (216.58.197.228): icmp_req=5 ttl=54 time=404 ms 30 31--- www.google.com ping statistics --- 325 packets transmitted, 5 received, 0% packet loss, time 3999ms 33rtt min/avg/max/mdev = 404.265/404.354/404.452/0.573 ms 34 35# 400m秒の遅延を解除 36pi@raspberrypi ~ $ sudo tc qdisc del dev eth0 root 37 38# 再度試す。(元に戻っている) 39pi@raspberrypi ~ $ ping -c 5 www.google.com 40PING www.google.com (172.217.161.68) 56(84) bytes of data. 4164 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=1 ttl=54 time=4.32 ms 4264 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=2 ttl=54 time=4.29 ms 4364 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=3 ttl=54 time=4.26 ms 4464 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=4 ttl=54 time=4.42 ms 4564 bytes from nrt20s09-in-f4.1e100.net (172.217.161.68): icmp_req=5 ttl=54 time=4.30 ms 46 47--- www.google.com ping statistics --- 485 packets transmitted, 5 received, 0% packet loss, time 4007ms 49rtt min/avg/max/mdev = 4.269/4.322/4.425/0.079 ms 50pi@raspberrypi ~ $

LinuxカーネルのTraffic controlに関するコンフィグレーションですが、以下の記事によると
How to configure the Linux kernel/net/sched

Option: NET_CLS_ACT
Kernel Versions: 2.6.15.6 ...
(on/off) Actions
depends on EXPERIMENTAL
select NET_ESTIMATOR
Say Y here if you want to use traffic control actions. Actions get attached to classifiers and are invoked after a successful classification. They are used to overwrite the classification result, instantly drop or redirect packets, etc.
A recent version of the iproute2 package is required to use extended matches.

あたりがそれっぽそうです。(※あくまで私の思うところの「それっぽい」なので、ご注意ください)

実際に今、動いているLinuxカーネルにそれが当たっているかは、以下の記事をみると、modprob configs で情報が得られるようです。
How to get a Kernel .config file from a Pi(b) - www.raspberrypi.org

この方法で確認してみたところ、確かに(私のラズパイLinuxカーネルでは)カーネルに組み込まれていました。

sh

1pi@raspberrypi ~ $ sudo modprobe configs 2 3pi@raspberrypi ~ $ zcat /proc/config.gz > kernel.config 4 5pi@raspberrypi ~ $ grep "NET_CLS_ACT" kernel.config 6CONFIG_NET_CLS_ACT=y 7 8pi@raspberrypi ~ $

質問者さんのケースでは、組み込まれていない場合にtcコマンド実行時にエラーになっても良さそうなものですが、そのあたりの事情は分かりません。カーネルコンフィグレーションが私と同等だったのであれば原因はまた別のところにあるでしょうし、同じでなかったならば、ご自分でLinuxカーネルのリビルドをする必要があるかもしれません。そもそも、上記が絶対に関係しているとは限りませんが、以上、ご参考までの回答でした。

投稿2019/11/15 02:39

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tea9

2019/11/15 23:31

dodox86様、ご回答いただき、ありがとうございます! 親切なご説明感謝いたします。勉強になります。 以下の通り、私の使用環境においても組み込まれていることが確認できました。 $ grep "NET_CLS_ACT" kernel.config CONFIG_NET_CLS_ACT=y 今一度原因を探してみます...
dodox86

2019/11/15 23:53

ご報告ありがとうございます。一応の確認なのですが、オプションで指定しているように、eth0インターフェース(有線LAN)を使っての通信なのですよね。無線LAN、あるいは別のネットワークインターフェイスを通っていたら、効かないはずですので。
tea9

2019/11/16 05:18

dodox86様、ご回答ありがとうございます。 お騒がせいたしました...。(お恥ずかしい限りです) 私が使用していたのは「無線LAN」であるにも拘わらず「eth0」を指定しておりました。「wlan0」として同様に試したところ、期待する動作が得られました。 親切なご回答、あらためて感謝いたします。ありがとうございました!
dodox86

2019/11/16 05:51

をを、良かったです。:-)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問