TUN/TAPについて備忘録

投稿者: | 2014年5月24日

仮想マシンを作ると仮想ブリッジとかできたりします。そのとき、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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です