Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
41
Help us understand the problem. What is going on with this article?
@hana_shin

ネットワークのトラブルシューティングのときに使うコマンド

1 はじめに

ネットワークのトラブルシューティングのときに使うコマンドについてまとめてみました。

2 環境

VMware Workstation 14 Player上の仮想マシン(2台)を使いました。
仮想マシンのホスト名はclient,serverです。

ネットワーク構成
                   192.168.3.0/24
client ------------------------------------- server 
      .50                                  .20

client,serverのOS版数は以下のとおりです。

OS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.el7.x86_64

3 コマンド一覧

コマンドの概要を以下に示します。
詳細は各コマンドのリンク先を参照ください。

3.1 ネットワーク系

コマンド名 概要
ip IPアドレス、ルーティングテーブル、ARPテーブルを確認するときに使います。
ping 宛先IPアドレスまでの疎通確認や最小MTU長の確認に使います。
traceroute 宛先までの経路情報や最小MTU長を確認するときに使います。
arping ARP要求パケット送信やIPアドレスの重複確認に使います。
strace システムコールの実行を確認するときに使います。
firewall-cmd ポートが開放されているかどうかを確認するときに使います。
lsof ポート番号を使用しているプロセスを確認するときに使います。
ss ソケットの状態を確認するときに使います。
nstat パケットロスト等の統計情報を確認するときに使います。
iptables Netfilterでのパケットロスの確認に使います。
tcpdump パケットのやりとりを確認するときに使います。
tshark WiresharkのCUI版です。tcpdumpで採取したパケットの絞り込みに使います。
iftop TCPコネクション単位の帯域測定に使います。
iperf3 使用している帯域を測定するときに使います。
hping3 任意のTCP/UDP/IPパケットを作成するツールです。
nmap ポートが開放されているかどうかを確認するときに使います。
openssl HTTPSアクセスの確認をするときに使います。
httpstat HTTPアクセスにかかる時間を確認するときに使います。
nc 簡易なクライアント、サーバのプロセスを起動するコマンドです。
tc qdiscのパケットロスの確認に使います。
conntrack コネクショントラッキングの情報を確認するときに使います。
curl HTTPサーバにアクセスできるかどうかを確認するときに使います。
dig ホスト名からIPアドレスを求めるときに使います。
ethtool ドライバやNICの状態を確認するときに使います。
top プロセスの状態を確認するときに使います。

3.2 その他

コマンド名 概要
Systemtap Systemtap
staprun systemtapスクリプトから作成したモジュールを、別ホストで実行するときに使用する機能
DYNAMIC DEBUG デバッグ用カーネルメッセージを出力する機能
フォルトインジェクション ディスクアクセス、メモリ獲得等を故意に失敗させるためのカーネル機能
crash メモリダンプを解析する機能

4 ipコマンド

端末のIPアドレス,MACアドレスやARPテーブル,ルーティングテーブルの確認に使います。

4.1 IPアドレス等の確認方法

ipアドレスの確認方法
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f0:6e:a2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.20/24 brd 192.168.3.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef0:6ea2/64 scope link
       valid_lft forever preferred_lft forever
(以下、略)
ARPテーブルの確認方法
[root@server ~]# ip n
192.168.3.1 dev eth1 lladdr xx:xx:xx:xx:xx:xx REACHABLE
192.168.3.1 dev eth0 lladdr yy:yy:yy:yy:yy:yy: STALE
192.168.3.50 dev eth0 lladdr zz:zz:zz:zz:zz:zz STALE
192.168.3.3 dev eth0 lladdr xx:xx:xx:xx:xx:xx DELAY
ルーティングテーブルの確認方法
[root@server ~]# ip r
default via 192.168.3.1 dev eth1
169.254.0.0/16 dev eth0 scope link metric 1002
169.254.0.0/16 dev eth1 scope link metric 1003
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.20
192.168.3.0/24 dev eth1 proto kernel scope link src 192.168.3.4

4.2 統計情報の確認方法

[root@client ~]# ip -s l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    0          0        0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    0          0        0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:a8:bf:66 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    73658      798      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    75601      606      0       0       0       0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:a8:bf:70 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    1920       32       0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    1008       14       0       0       0       0

5 pingコマンド

自端末から宛先までの疎通確認に使います。
以下は、192.168.3.20にICMP echo requestパケットを1つ送信しています。
応答としてICMP echo replyパケットを1つ受信しています。

疎通確認
[root@client ~]# ping -c 1 192.168.3.20
PING 192.168.3.20 (192.168.3.20) 56(84) bytes of data.
64 bytes from 192.168.3.20: icmp_seq=1 ttl=64 time=0.415 ms

--- 192.168.3.20 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.415/0.415/0.415/0.000 ms

宛先までの最小MTU長の確認にも使えます。
MTU値が1500(byte)のICMP echo requestパケットを8.8.8.8に送信してみます。
1500(byte)の内訳は、IPヘッダが20(byte),ICMPヘッダが8(byte),ペイロードが1472(byte)です。

1500(byte)のICMPパケットを送信した場合
[root@client ~]# ping -c 1 -M do -s 1472 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 1472(1500) bytes of data.
1480 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=44.0 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 44.098/44.098/44.098/0.000 ms

1501(byte)のICMPパケットを送信してみます。
ローカルインタフェース(eth0)のMTUが1500(byte)なので、下記に示すエラーが発生します。

1501(byte)のICMPパケットを送信した場合
[root@client ~]# ping -c 1 -M do -s 1473 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 1473(1501) bytes of data.
ping: local error: Message too long, mtu=1500

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

6 tracerouteコマンド

自端末から宛先までに通過するルータを確認するときに使います。

6.1 ICMPを使って調べる方法(-I)

ICMPパケットを使って、8.8.8.8までに通過するルータを確認してみます。
途中にルータが10個あるのがわかります。
途中の* * *は、Time Exceededの返信を禁止にしているルータだと思われます。
なお、8.8.8.8は、グーグルのパブリックDNSです。

実行結果
[root@server ~]# traceroute -I 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  google-public-dns-a.google.com (8.8.8.8)  38.806 ms  38.794 ms  25.508 ms

6.2 UDPを使って調べる方法(-U)

UDPパケットを使って、8.8.8.8までに通過するルータを確認してみます。

実行結果
[root@server ~]# traceroute -U 8.8.8.8 -p 53
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  google-public-dns-a.google.com (8.8.8.8)  36.455 ms  37.765 ms *

6.3 MTU値を確認する方法

宛先までの経路上において、最小のMTU値を確認することができます。
h1は自端末、h2は宛先端末、r1,r2はルータです。

環境
          MTU=1500              MTU=1000             MTU=1500
     192.168.100.0/24      192.168.110.0/24      192.168.120.0/24 
   h1 ------------------ r1 ------------------ r2 ------------------ h2
      .10             .20   .10             .20   .10             .20
実行結果
[root@h1 ~]# traceroute -N 1 -q 1 -F --mtu -I 192.168.120.20
traceroute to 192.168.120.20 (192.168.120.20), 30 hops max, 65000 byte packets
 1  192.168.100.20 (192.168.100.20)  0.105 ms F=1500
 2  192.168.110.20 (192.168.110.20)  0.053 ms F=1000
 3  192.168.120.20 (192.168.120.20)  0.157 ms

7 arpingコマンド

こちらが送信したARP要求に対して、相手がARP応答を返しているかどうかや、
同一ネットワークに同じIPアドレスを持った端末が存在するかどうかを確認するときに使います。

クライアントからサーバ(192.168.3.20)に対してARP要求パケットを送信してみます。
サーバからクライアントにARP応答が返っていることがわかります。
つまり、相手のARP機能が正しく動作していることがわかります。

ARP要求に対して応答があるかどうかの確認方法
[root@client ~]# arping -c 1 -I eth0 192.168.3.20
ARPING 192.168.3.20 from 192.168.3.50 eth0
Unicast reply from 192.168.3.20 [00:0C:29:F0:6E:A2]  1.068ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

次に、同一ネットワークに192.168.3.100を持った端末が存在するかどうか確認してみます。
応答がないので(★)、同一ネットワークに192.168.3.100を持った端末が存在しないことがわかります。

IPが重複しているかどうかの検出方法(-D)
[root@client ~]# arping -c 1 -D -I eth0 192.168.3.100
ARPING 192.168.3.100 from 0.0.0.0 eth0
Sent 1 probes (1 broadcast(s))
Received 0 response(s) ★

8 straceコマンド

straceコマンドを使うと、どのシステムコールが失敗しているかを確認することができます。
システムコールレベルでの被疑箇所の切り分けに使います。

以下の例は、pingが正常終了した場合です。
絞り込みの指定として、networkを指定してみます。
sendtoシステムコールでICMP echo要求を送信し、recvmsgシステムコールでICMP echo応答を
受信していることがわかります。

networkで絞り込む方法
[root@client ~]# strace -ttT -f -e trace=network ping -c 1 192.168.3.20
20:59:06.979095 socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = -1 EACCES (Permission denied) <0.000056>
20:59:06.979289 socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = 3 <0.000035>
20:59:06.979401 socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 4 <0.000028>
20:59:06.979453 connect(4, {sa_family=AF_INET, sin_port=htons(1025), sin_addr=inet_addr("192.168.3.20")}, 16) = 0 <0.000015>
20:59:06.979507 getsockname(4, {sa_family=AF_INET, sin_port=htons(46748), sin_addr=inet_addr("192.168.3.50")}, [16]) = 0 <0.000006>
20:59:06.979551 setsockopt(3, SOL_RAW, ICMP_FILTER, ~(1<<ICMP_ECHOREPLY|1<<ICMP_DEST_UNREACH|1<<ICMP_SOURCE_QUENCH|1<<ICMP_REDIRECT|1<<ICMP_TIME_EXCEEDED|1<<ICMP_PARAMETERPROB), 4) = 0 <0.000007>
20:59:06.979581 setsockopt(3, SOL_IP, IP_RECVERR, [1], 4) = 0 <0.000009>
20:59:06.979609 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [324], 4) = 0 <0.000006>
20:59:06.979632 setsockopt(3, SOL_SOCKET, SO_RCVBUF, [65536], 4) = 0 <0.000006>
20:59:06.979655 getsockopt(3, SOL_SOCKET, SO_RCVBUF, [131072], [4]) = 0 <0.000006>
PING 192.168.3.20 (192.168.3.20) 56(84) bytes of data.
20:59:06.979732 setsockopt(3, SOL_SOCKET, SO_TIMESTAMP, [1], 4) = 0 <0.003445>
20:59:06.983237 setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000009>
20:59:06.983294 setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 <0.000006>
20:59:06.983420 sendto(3, "\10\0p\246\6\214\0\1\n\2340\\\0\0\0\0x\1\17\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.3.20")}, 16) = 64 <0.000019>
20:59:06.983485 recvmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.3.20")}, msg_iov(1)=[{"E\0\0T\362\t\0\0@\1\1\t\300\250\3\24\300\250\0032\0\0x\246\6\214\0\1\n\2340\\"..., 192}], msg_controllen=32, [{cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */}], msg_flags=0}, 0) = 84 <0.000387>
64 bytes from 192.168.3.20: icmp_seq=1 ttl=64 time=0.421 ms

絞り込みの指定は、システムコール単位でできます。
以下のシステムコールを個別に指定することができます。
・送信用:write,send,sendto,sendmsg
・受信用:read,recv,recvfrom,recvmsg

send,sendto,sendmsgで絞り込む方法
[root@server ~]# strace -ttT -f -e trace=send,sendto,sendmsg ping -c 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
19:06:08.258128 sendto(3, "\10\0\240\337\7-\0\1\20\3231\\\0\0\0\0K\360\3\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("192.168.3.1")}, 16) = 64 <0.000046>
(以下、略)

9 firewall-cmdコマンド

パケットをフィルタリングするコマンドです。
誤ってポートが開放されていなかったりすると、サーバ(たとえばhttpd)に接続できない、
といった事象が発生します。

9.1 ポート番号の確認方法

TCPのポート番号11111が開放されていることがわかります。

開放されているポート番号の確認方法(ポート番号による確認方法)
[root@server ~]# firewall-cmd --list-ports
11111/tcp

ssh(ポート番号は22)のポート番号が開放されていることがわかります。

開放されているポート番号の確認方法(サービス名による確認方法)
[root@server ~]# firewall-cmd --list-services
ssh

なお、サービス名に対するポート番号は/etc/servicesに定義されています。

サービス名とポート番号の対応
[root@client ~]# cat /etc/services |grep ssh
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol

9.2 ICMPパケットの確認方法

以下の実行結果は、ICMP echo要求パケットの受信をブロックしていることを示しています。

[root@server ~]# firewall-cmd --list-icmp-blocks
echo-request

10 lsofコマンド

ポート番号を使用しているプロセスを確認するときに使います。

TCPのポート番号(80)を使用しているプロセスの確認方法
[root@server ~]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1635   root    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
httpd   1636 apache    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
httpd   1637 apache    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
httpd   1638 apache    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
httpd   1639 apache    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
httpd   1640 apache    4u  IPv6  21072      0t0  TCP *:http (LISTEN)
UDPのポート番号(323)を使用しているプロセスの確認方法
[root@server ~]# lsof -iUDP:323
COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd 807 chrony    1u  IPv4  16074      0t0  UDP localhost:323
chronyd 807 chrony    2u  IPv6  16075      0t0  UDP localhost:323

11 ssコマンド

ソケットの状態を確認するときに使います。状態としては以下のものがあります。
 established, syn-sent, syn-recv, fin-wait-1, fin-wait-2, time-wait,
 closed, close-wait, last-ack, listen, closing

ここでは、time-wait状態のソケットを確認してみます。
time-wait状態はアクティブクローズ側で発生する状態です。
Linuxの場合、time-wait状態は60秒間続きます。

なお、TCPの各種状態の作り方は、ここ(TCPの各種状態の作り方)を参照してください。

time-wait状態の確認方法
[root@client ~]# ss -not state time-wait
Recv-Q Send-Q                                Local Address:Port        Peer Address:Port
0      0                                      192.168.3.50:55742       192.168.3.20:11111    timer:(timewait,58sec,0)
[root@client ~]# ss -not state time-wait
Recv-Q Send-Q                                Local Address:Port        Peer Address:Port
0      0                                      192.168.3.50:55742       192.168.3.20:11111    timer:(timewait,2.150ms,0)
[root@client ~]# ss -not state time-wait
Recv-Q Send-Q                                Local Address:Port        Peer Address:Port
0      0                                      192.168.3.50:55742       192.168.3.20:11111    timer:(timewait,080ms,0)
[root@client ~]# ss -not state time-wait
Recv-Q Send-Q

12 nstatコマンド

パケットロスト等のネットワークの統計情報を確認するときに使います。
私が確認した限りでは、ssコマンドにnetstat -sに相当するオプションがありませんでした。
したがって、CentOS7では、統計情報を確認するためには、nstatを使う必要があるようです。
なお、カウンタ(2カラム目の値)が0の項目は表示されません。

実行結果
[root@server ~]# nstat
#1598.1804289383 sampling_interval=1 time_const=60
IpInReceives                    2946               0.6
IpInDelivers                    2563               0.5
IpOutRequests                   1885               0.3
IpReasmReqds                    28                 0.0
IpReasmOKs                      14                 0.0
IpFragOKs                       9                  0.0
IpFragCreates                   18                 0.0
(以下、略)

参考までには、カーネルソースコードの実装を以下に示します。
統計情報は、以下のようにIP_INC_STATS_BHマクロを使って、カウントアップしています。
以下の2つの部分は、IPヘッダのチェックサムに異常があった場合と、
IPヘッダに異常があった場合に、それぞれカウンタをアップしています。

ソース(CentOS7.4からの引用)
 378 int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
 379 {

 - 中略 -

 459 csum_error:
 460         IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_CSUMERRORS);
 461 inhdr_error:
 462         IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_INHDRERRORS);
 463 drop:
 464         kfree_skb(skb);
 465 out:
 466         return NET_RX_DROP;
 467 }

13 iptablesコマンド

CentOS7では、firewall-cmdを使ってパケットフィルタリング(netfilter)の設定をします。
iptablesは直接操作しませんが、パケットフィルタリングの統計情報の確認に利用できます。

意図的にICMP echo requestをブロックする設定をします。

netfilterの確認
[root@server ~]# firewall-cmd --list-icmp-blocks
echo-request

パケットフィルタリングの統計情報を確認します。
REJECTされたパケット数が0(★)であることがわかります。

初期状態の確認
[root@server ~]# iptables -nvL IN_public_deny
Chain IN_public_deny (1 references)
 pkts bytes target     prot opt in     out     source               destination
  ★0     0 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 reject-with icmp-host-prohibited

クライアントからサーバに対してpingを1回実行します。
クライアントからサーバにICMP echo requestパケットが1つ送信されます。

初期状態の確認
[root@client ~]# ping -c 1 192.168.3.20

パケットフィルタリングの統計情報を確認します。
REJECTされたパケット数が1(★)に増えたことがわかります。

初期状態の確認
[root@server ~]# iptables -nvL IN_public_deny
Chain IN_public_deny (1 references)
 pkts bytes target     prot opt in     out     source               destination
  ★1    84 REJECT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 reject-with icmp-host-prohibited

14 tcpdumpコマンド

パケットをキャプチャするためのコマンドです。
自端末や相手端末、もしくは途中のルータでtcpdumpを実行して、
パケットがどこまで到達しているかを確認するときに使います。

14.1 フックポイント

トラブルの被疑箇所がカーネルなのか、ドライバなのかを絞り込むためには、
tcpdumpのフックポイントを理解する必要があります。

フックポイントはカーネル(IP層)とドライバの間にあります。
受信パケットはtpacket_rcv関数、送信パケットはdev_queue_xmit_nit関数でフックします。
フックポイントで、送受信パケットのコピーを作ります。
コピーしたパケットはtcpdumpが使用します。

tcpdumpのフックポイント
+----------------------------------------------------------------+
|                                                                |
|                        Kernel(IP Layer)                        |
|                                                                |
|       ip_rcv                               ip_finish_output2   |
|         A                                           |          |
|         |                                           |          |
+---------|-------------------------------------------|----------+
+---------|-------------------------------------------|----------+
|         |              tcpdump hook point           |          |
|         |                                           V          |
|     tpacket_rcv                            dev_queue_xmit_nit  |
|         A                                           |          |
|         |                                           |          |
+---------|-------------------------------------------|----------+
+---------|-------------------------------------------|----------+
|         |              Network Driver               V          |
|                                                                |
+----------------------------------------------------------------+

14.2 実行例

ping実行時のtcpdumpの実行例を以下に示します。

実行結果
[root@server ~]# tcpdump -i eth0 icmp -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:48:34.862403 IP 192.168.3.20 > 192.168.3.1: ICMP echo request, id 1945, seq 1, length 64
20:48:34.864214 IP 192.168.3.1 > 192.168.3.20: ICMP echo reply, id 1945, seq 1, length 64

15 tsharkコマンド

Wiresharkのコマンドライン版です。

16 iftopコマンド

TCPコネクション単位、インタフェース単位で帯域を測定するときに使用します。
ここでは、TCPコネクション単位の帯域測定方法について説明します。

理研からCentOSのisoイメージをダウンロードします。

[root@client ~]# wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso

もう1つターミナルをオープンします。
iftopのfilter codeを使って、ポート番号80のTCPコネクションに絞り込みます。

[root@client ~]# iftop -i eth0 -t -NP -f "port 80"

(中略)


   # Host name (port/service if enabled)            last 2s   last 10s   last 40s cumulative
--------------------------------------------------------------------------------------------
   1 client:36440                             =>     59.9Kb     68.1Kb     67.1Kb      450KB
     riksun.riken.go.jp:80                    <=     3.39Mb     3.38Mb     3.38Mb     22.4MB
--------------------------------------------------------------------------------------------
Total send rate:                                     59.9Kb     68.1Kb     67.1Kb
Total receive rate:                                  3.39Mb     3.38Mb     3.38Mb
Total send and receive rate:                         3.44Mb     3.45Mb     3.44Mb
--------------------------------------------------------------------------------------------
Peak rate (sent/received/total):                     75.2Kb     3.39Mb     3.46Mb
Cumulative (sent/received/total):                     450KB     22.4MB     22.9MB
============================================================================================

17 iperf3コマンド

18 hping3コマンド

任意のTCP/UDP/IPパケットを送信するときに使います。

19 nmapコマンド

20 opensslコマンド

opensslは、TLSクライアントとして使うことができます。

21 httpstatコマンド

HTTPアクセスにかかる時間を確認するときに使います。

実行結果
[root@server ~]# httpstat https://www.example.com
Connected to 93.184.216.34:443 from 192.168.3.4:52356

HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 06 Jan 2019 12:15:26 GMT
Etag: "1541025663+ident"
Expires: Sun, 13 Jan 2019 12:15:26 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (sjc/4FC1)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270

Body stored in: /tmp/tmpdZmTnj

  DNS Lookup   TCP Connection   TLS Handshake   Server Processing   Content Transfer
[    30ms    |      132ms     |     322ms     |       145ms       |        0ms       ]
             |                |               |                   |                  |
    namelookup:30ms           |               |                   |                  |
                        connect:162ms         |                   |                  |
                                    pretransfer:484ms             |                  |
                                                      starttransfer:629ms            |
                                                                                 total:629ms

22 tcコマンド

tcコマンドは、qdisc(Queueing Discipline)に対する設定、削除、参照等に使います。
qdiscは、カーネル(kernel)とドライバ(network device driver)の間にあり、
送信パケットの送信順序の変更、遅延、廃棄等の機能を提供します。
tcコマンドは、パケット廃棄等の統計情報の確認に使うことができます。

[root@server ~]# tc -s qdisc show dev eth0
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 353563 bytes 2635 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0

なお、qdiscのデフォルトはpfifo_fastですが、このqdiscはキューを持ちません。
カーネルから受け取ったパケットをそのままドライバに渡します。
したがって、キューでのパケット廃棄やリキューは発生しません。
つまり、上記dropped,overlimits,requeuesの統計情報はカウントアップしません。
一応ソースは確認しましたが、誤りがあればご指摘をお願いします。

23 ncコマンド

ncコマンドは、トラブルシューティングのときに使うのではなく、
他のコマンドの動作確認に使うことができます。

14 tcpdumpコマンド

24 digコマンド

ドメイン名(FQDN)からIPアドレスを求めるときに使います。

ここでは、www.example.comからIPアドレスを求めてみます。
www.example.comのIPアドレスは、93.184.216.34であることがわかります。

実行結果
[root@server ~]# dig www.example.com +short
93.184.216.34

なお、www.example.comはRFC2606で予約されているドメイン名です。

25 ethtoolコマンド

ネットワークドライバ、NICの統計情報を取得するときに使います。

統計情報の取得結果
[root@server ~]# ethtool -S eth0
NIC statistics:
     rx_packets: 8804
     tx_packets: 3184
     rx_bytes: 1986865
     tx_bytes: 428186
     rx_broadcast: 0
     tx_broadcast: 0
     rx_multicast: 0
     tx_multicast: 0
     rx_errors: 0
     tx_errors: 0
     tx_dropped: 0
     multicast: 0
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 0
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 14
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_long_byte_count: 1986865
     rx_csum_offload_good: 8149
     rx_csum_offload_errors: 0
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 0
     dropped_smbus: 0
NICの設定情報
[root@server ~]# ethtool -k eth0
Features for eth0:
rx-checksumming: off
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: on
        tx-scatter-gather: on
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: off [fixed]
        tx-tcp6-segmentation: off [fixed]
        tx-tcp-mangleid-segmentation: off
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-ipip-segmentation: off [fixed]
tx-sit-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-mpls-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
busy-poll: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-sctp-segmentation: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
41
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
41
Help us understand the problem. What is going on with this article?