TCP/IP
目次
TCP/IP
ip address show
- inet の後がIPアドレス
- lo,ens3 はネットワークインターフェース(NICや無線LANアダプタなどを抽象化)
- IPアドレスはネットワークインターフェースに付与される
- 127.0.0.1はループバックアドレスで、自分自身を表す
- ループバックアドレスが付与されているインターフェースはループバックインターフェース
$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:97:68:97 brd ff:ff:ff:ff:ff:ff inet 192.168.122.243/24 brd 192.168.122.255 scope global dynamic ens3 valid_lft 3189sec preferred_lft 3189sec inet6 fe80::5054:ff:fe97:6897/64 scope link valid_lft forever preferred_lft forever
tcpdump パケットキャプチャ
- -t : 時刻情報出力抑制
- -n : IP逆引きしない
- -i : 対象インターフェースを指定 anyで全て
- icmp : icmp プロトコルに限定
$ sudo tcpdump -tn -i any icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes IP 192.168.122.243 > 8.8.8.8: ICMP echo request, id 2, seq 1, length 64 IP 8.8.8.8 > 192.168.122.243: ICMP echo reply, id 2, seq 1, length 64 IP 192.168.122.243 > 8.8.8.8: ICMP echo request, id 2, seq 2, length 64 IP 8.8.8.8 > 192.168.122.243: ICMP echo reply, id 2, seq 2, length 64
traceroute
- パケット通過ルーター
- TTL : 0-255と解釈される値が入りパケット送出時にノードが初期値を設定、ルーター追加ごとに1つづつ値が減る。経路で値が0になるとルーターにより破棄されるが、この時ルーターは、ICMPで時間切れメッセージを送信元に送る
- TTLにあえて小さな値を設定し、TTLを1つづつ増やしたパケットを送信、時間切れをおこした通知を組み立てる
- 時間切れを通知しないルーター設定は、* となる
$ traceroute typea.info traceroute to typea.info (160.16.110.88), 64 hops max 1 192.168.122.1 0.343ms 0.288ms 0.301ms 2 192.168.0.1 0.694ms 0.492ms 0.487ms 3 210.173.146.32 4.710ms 4.013ms 3.784ms 4 210.173.145.69 3.968ms 4.044ms 4.072ms 5 210.173.150.97 3.557ms 4.091ms 3.896ms 6 210.171.224.113 9.550ms 7.866ms 8.150ms 7 * * * 8 * * * 9 * * * 10 * * * 11 160.16.110.88 11.148ms 12.124ms 12.150ms
ip route show ルーティングテーブル
- 複数のルーティングエントリから構成(それぞれの行)
- 先頭に宛先のIPアドレス
- 宛先に続くのがネクストホップ(パケットを次に渡す相手)
$ ip route show default via 192.168.122.1 dev ens3 proto dhcp src 192.168.122.243 metric 100 192.168.122.0/24 dev ens3 proto kernel scope link src 192.168.122.243 192.168.122.1 dev ens3 proto dhcp scope link src 192.168.122.243 metric 100
IPアドレス
- 32bitの前半をネットワーク部(ネットワークアドレス)、後半をホスト部(ホストアドレス)
- 192.0.2.1/24 24bitで分割 -> ネットワーク部 192.0.2.0、ホスト部 .1
- ネットワーク部は、ネットワークセグメントを表す、同じなら同じセグメントに属する
- 192.0.2.1/24 この書き方はCIDR表記と呼ばれる
- サブネット表記では、255.255.255.0
Network Namespace
$ sudo ip netns add helloworld $ ip netns list helloworld
- ip nets exec
- 指定したNetwork Namespace環境でコマンドを実行
$ sudo ip netns exec helloworld ip address show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- Network Namespaceでシェルも起動できる
$ sudo ip netns exec helloworld bash
ネットワークを作成して接続
2つのNetwork Namespaceを作成
$ sudo ip netns add ns1 $ sudo ip netns add ns2
- 接続するには、veth(Virtual Ethernet Device)を作成
- Nework Namespaceに所属させる
$ sudo ip link add ns1-veth0 type veth peer name ns2-veth0 $ sudo ip link set ns1-veth0 netns ns1 $ sudo ip link set ns2-veth0 netns ns2
- 確認
$ sudo ip netns exec ns1 ip link show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 4: ns1-veth0@if3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether ca:f0:3b:a9:2a:eb brd ff:ff:ff:ff:ff:ff link-netns ns2
IPアドレスを付与
$ sudo ip netns exec ns1 ip address add 192.0.2.1/24 dev ns1-veth0 $ sudo ip netns exec ns2 ip address add 192.0.2.2/24 dev ns2-veth0
- 確認
$ sudo ip netns exec ns1 ip address show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 4: ns1-veth0@if3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether ca:f0:3b:a9:2a:eb brd ff:ff:ff:ff:ff:ff link-netns ns2 inet 192.0.2.1/24 scope global ns1-veth0 valid_lft forever preferred_lft forever
vethを有効化
$ sudo ip netns exec ns1 ip link set ns1-veth0 up $ sudo ip netns exec ns2 ip link set ns2-veth0 up
- 疎通
$ sudo ip netns exec ns1 ping 192.0.2.2 -c 3 PING 192.0.2.2 (192.0.2.2) 56(84) bytes of data. 64 bytes from 192.0.2.2: icmp_seq=1 ttl=64 time=0.334 ms 64 bytes from 192.0.2.2: icmp_seq=2 ttl=64 time=0.101 ms 64 bytes from 192.0.2.2: icmp_seq=3 ttl=64 time=0.091 ms --- 192.0.2.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2051ms rtt min/avg/max/mdev = 0.091/0.175/0.334/0.112 ms
ルーターを介したネットワーク
$ sudo ip netns add ns1 $ sudo ip netns add router $ sudo ip netns add route2 $ sudo ip netns add ns2
- それぞれのNetwork Namespaceを繋ぐvethインターフェースを作成
$ sudo ip link add ns1-veth0 type veth peer name gw-veth0 $ sudo ip link add ns2-veth0 type veth peer name gw-veth1
- vethをNetwork Namespaceに属させる
$ sudo ip link set ns1-veth0 netns ns1 $ sudo ip link set gw-veth0 netns router $ sudo ip link set gw-veth1 netns router $ sudo ip link set ns2-veth0 netns ns2
- vethをup
$ sudo ip netns exec ns1 ip link set ns1-veth0 up $ sudo ip netns exec router ip link set gw-veth0 up $ sudo ip netns exec router ip link set gw-veth1 up $ sudo ip netns exec ns2 ip link set ns2-veth0 up
- IPアドレスを付与
$ sudo ip netns exec ns1 ip address add 192.0.2.1/24 dev ns1-veth0 $ sudo ip netns exec router ip address add 192.0.2.254/24 dev gw-veth0 $ sudo ip netns exec router ip address add 198.51.100.254/24 dev gw-veth1 $ sudo ip netns exec ns2 ip address add 198.51.100.1/24 dev ns2-veth0
- セグメント内の通信
- ns1 と ns2それぞれから、rouer にping
$ sudo ip netns exec ns1 ping -c 3 192.0.2.254 PING 192.0.2.254 (192.0.2.254) 56(84) bytes of data. 64 bytes from 192.0.2.254: icmp_seq=1 ttl=64 time=0.362 ms 64 bytes from 192.0.2.254: icmp_seq=2 ttl=64 time=0.102 ms 64 bytes from 192.0.2.254: icmp_seq=3 ttl=64 time=0.108 ms --- 192.0.2.254 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2049ms rtt min/avg/max/mdev = 0.102/0.190/0.362/0.121 ms $ sudo ip netns exec ns2 ping -c 3 198.51.100.254 PING 198.51.100.254 (198.51.100.254) 56(84) bytes of data. 64 bytes from 198.51.100.254: icmp_seq=1 ttl=64 time=0.314 ms 64 bytes from 198.51.100.254: icmp_seq=2 ttl=64 time=0.106 ms 64 bytes from 198.51.100.254: icmp_seq=3 ttl=64 time=0.110 ms --- 198.51.100.254 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2051ms rtt min/avg/max/mdev = 0.106/0.176/0.314/0.097 ms
© 2006 矢木浩人