仮想マシンを作ると仮想ブリッジとかできたりします。そのとき、TAPデバイスが作成されたりします。
そのTAPデバイスとかTUNデバイスとかが何者かちょっと分からなかったので備忘録的なメモです。
http://ja.wikipedia.org/wiki/TUN/TAP
wikipedia先生によると
TAP は、イーサネットデバイスをシミュレートし、データリンク層の操作を行う。
TUN はネットワーク層をシミュレートするもので、IPパケットなどを操作する。TAPはブリッジ生成に使われ、TUNはルーティングに使われる。
OSがTUN/TAPデバイスに送ったパケットは、そのデバイスに接続しているユーザープログラムに送信される。
また、ユーザープログラムからTUN/TAPデバイスにパケットを送ることもできる。
その場合、TUN/TAPデバイスはそれらのパケットをOSのプロトコルスタックに渡すので、OS側からはあたかも外部からパケットを受け取ったように見える。
とある。
うーん。わかったようなわからないような…。
http://archive.linux.or.jp/JF/JFdocs/kernel-docs-2.4/networking/tuntap.txt.html
http://syuu1228.github.io/howto_implement_hypervisor/part19.html
Rubyのプログラムみて分かった。
自分で投げたデータがそのまま自分のOSに届くような動作をするデバイスなのですね。
デバイスとしてそういう動作をするものを用意しておくと、プロセスから見ると便利な場面が多々あるという事かな。
TAPはL2で動作する仮想デバイス。
例えば、仮想ブリッジはL2だけで動作するものなので作成した時のポートにはTAPデバイスを追加していく。
TUNはL3で動作する仮想デバイス。
L3つまりIP層で動作する。なのでRubyの例の様なトンネルデバイスを作成する場合に利用する。
wikipedia先生の説明の通りで泣けるw