Linuxにおけるネットワークインターフェースについて
ネットワークインターフェースとは
コンピュータがネットワーク上にある他のコンピュータと通信する際に、パケットをやり取りする「境界」となるリソースでがネットワークインターフェースです。 「パケット」と書いたように、通常一つのインターフェースに対して一つのIPアドレスが割り振られます。
いまいちイメージがわかないかもしれませんが、コンピュータの裏にある、LANポートを想像するとわかりやすいかもしれません。
物理NIと仮想NI
物理NIとは、NIを物理的に実装したもので、前述のLANポートがついているボードが物理NIC(Network Interface Card)です。 それに対し、仮想NIとは物理NIを抽象化したもので、通常OSが作成します。最近のコンピュータでは、一つの物理NICしか搭載していないにもかかわらず、複数のNIを保有しているように見えます。 これはこの機能によるものです。
以下では仮想NIのことをNIと呼ぶことにします。
NIの種類
前項で複数のNIが存在していると言いましたが、どのような種類があるのか見てみます。 下にifconfigコマンドの実行結果の一部を載せます。 ifconfigコマンドはnetwork interface configurationの略で、オプション無しで実行すると、仮想NIを表示してくれます。
denjo@DJ00092/INS> ifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:0a:55:e9:55 txqueuelen 0 (イーサネット) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (ローカルループバック) RX packets 32314 bytes 2989566 (2.9 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 32314 bytes 2989566 (2.9 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.8.0.22 netmask 255.255.255.255 destination 10.8.0.21 inet6 fe80::81e6:710c:4a6f:e796 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (不明なネット) RX packets 21 bytes 6323 (6.3 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 307 bytes 17636 (17.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp5s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.71 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::657c:c1c1:f1cc:d9a1 prefixlen 64 scopeid 0x20<link> ether 20:79:18:54:e7:a5 txqueuelen 1000 (イーサネット) RX packets 1831222 bytes 1941088076 (1.9 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 765585 bytes 137548363 (137.5 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
このパソコンにはおそらくWiFi用のNICと、有線LAN用のNICしかないので物理的な限界を超えてNIが作られていることがわかります。
docker0
これはdocker用のNIです。dockerはそれぞれのコンテナがIPアドレスを持っているように振る舞うので、コンテナとホストの通信のためにこのNIが必要になってきます。
lo
inetという部分を見るとわかるように、これはループバック用のNIです。その他のNIとは異なり、OSが起動していれば存在し、外のネットワークの影響を受けないため自分自身に対する疎通確認などに使われます。
tun0
ifconfigをVPN接続中に実行したので、VPN用のNIであるtunが入っています。これはtunnelの略であり、実際のアドレスとは異なるアドレスを用いるルーティング方式でのVPN用であることがわかります。
wlps0
wlps0は、WiFi接続用のNIです。IPアドレスを見るとわかりますが、実際にインターネット等に接続する際のNIはこれであると推測されます。 これはWiFi接続をしているコンピュータなら、名前は違えど大体のコンピュータに共通のNIだと思います。