B.A.T.M.A.N.

Better Approach To Mobile Adhoc Networking (B.A.T.M.A.N.) とは、ドイツの "Freifunk" コミュニティが開発する・モバイルアドホックネットワーク用ルーティングプロトコルである。リンクステートルーティングプロトコル、 を置き換えることを意図している。
B.A.T.M.A.N. の重要な特徴として、ネットワーク内の最良ルートに関する知識が非集中管理されることである。すなわち、全てのデータを持つノードは一つも存在し ない。この技術によりネットワークに関する情報をネットワーク内の全ノードに拡散する必要がなくなる。個々のノードはデータを受取先と送り先の「方向」を適宜保存する。データはノートからノードへと受け渡され、パケットは個々に、動的にルーティングされる。 集合知ネットワークが構築される。
2007年初頭、B.A.T.M.A.N. 開発者らはレイヤー3ではなくレイヤー2（イーサネット層）におけるルーティングというアイデアの試験を始めた。レイヤー3ルーティングデーモンとの区別のため、 "adv" () というサフィックスが採用された。ルーティングテーブルの操作のためには UDP パケットを送信するのではなく、仮想ネットワークインターフェイスを作成して透過的に独自のパケットをやりとりする。 batman-adv カーネルモジュールはバージョン 2.6.38 から公式な Linux カーネルの一部となっている。
動作.
B.A.T.M.A.N. は古典的ルーティングプロトコルの要素を備えている。他の B.A.T.M.A.N. ノードを検知し、そこに到達するのに最適な経路（ルート）を探索する。また、新たなノードの追跡も行い、近隣ノードにその存在を通知する。
静的ネットワークにおいては、ネットワーク管理者および技術者がどのコンピュータにどの経路・ケーブルを通じて到達すべきかを決定する。しかし、無線ネットワークは常に変化をしておりかつ参入障壁も低いため、"Freifunk" ネットワークの基礎の重要な一部として、このタスクをできるかぎり自動化する必要がある。
各ノードはある一定の間隔でブロードキャストを行い、これによってその存在を全ての近隣ノードに通知する。近隣ノードはこのメッセージを自ノードの近隣ノードに中継し、これが繰り返される。このようにして、ネットワーク内の全ノードに情報が拡散される。特定ノードへの最適経路の探索時のために、B.A.T.M.A.N. ではこのオリジネーターメッセージが計数され、どの近隣ノードからそのメッセージが届いたかが記録される。
距離ベクトルプロトコルと同じように、B.A.T.M.A.N. では経路全体を決定するのではなく、前述のオリジネーターメッセージを用いてパケットの一歩目を正しい方向へと送り出すことのみを行う。データはその方向の次の近隣ノードに受け渡され、今度はそのノードで同じ仕組みが使われる。この過程が宛先にデータが到達するまで繰替えされる。
B.A.T.M.A.N. は無線ネットワークの他にも、イーサネットなどの一般的な有線接続でも使うことができる。
歴史.
課題は、できるかぎり簡潔で、小さく、高速なプロトコルを創出することであった。したがって、開発を数段階に分け、反復過程を通じて複雑な機能を実装していくことが賢明であると思われた。
バージョン 1.
最初の段階として、ルーティングアルゴリズムが実装され、実際の課題に対する実用性と適性が試験された。オリジネーターメッセージ（ノードの存在についての情報）を送受信するためには、UDP ポート 1966 が使われた。
バージョン 2.
バージョン 1 のアルゴリズムでは、存在データを受信できたノードはその時点でデータを送り返すことも可能と考えるという重大な仮定が用いられていた。しかし、無線ネットワークでは、通信が一方向にのみ可能であるという、非対称リンクと呼ばれる状況が十分にありうる。この状況を許容し、これによって引き起こされる問題に対処するための仕組みが組み込まれた。 この仕組みにより、ノードは近隣ノードとの双方向通信が可能かどうかを判断することができるようになった。双方向通信の可能なノードのみがネットワークの一部とみなされ、一方向ノードは完全には組込まれなくなった。
バージョン 3.
このバージョンの B.A.T.M.A.N. における最も大きな 新機能は、複数のサポートである。B.A.T.M.A.N. を実行するコンピュータを教会その他の高い建物に設置し、複数の有線および無線ネットワークインターフェースを接続することによって、再送信ディレイなしに多方向へネットワークデータを中継できるようになった。
最適経路探索に際し、特定の稀な現象や特別な状況が生じうる。これらに対する取り組みと、発生するとデータが目的地に到達できなくなる循環ルーティングを防ぐための対処が行われた。
インターネットへのアクセスを提供するノードはそのことをネットワークに通知することができる。この情報を使って他のノードは近隣にインターネット接続があるかどうかと、どれだけのが利用可能かを評価する。また、特定のゲートウェイを使うことも B.A.T.M.A.N. に接続速度などの基準に基いてどのゲートウェイを使うかを決めさせることもできる。
このバージョンでは、B.A.T.M.A.N. を自分では実行していない機器の通知機能が追加された。通常、この手法は家庭内ネットワークをメッシュネットワークに接続するために用いられる。B.A.T.M.A.N. を通じて無線ネットワークに接続するためのアンテナを家の屋根に設置し、建物内の残りの機器を単に通知することでこれらも到達可能となる。
このバージョンの B.A.T.M.A.N. は高い安定性を示したが、実運用条件では若干収束時間が遅いことが示された。このことは理論的解析からも確認された。
BMX6.
BatMan-eXperimental (BMX) は OGM を別々のブロードキャストデータグラムで複数回送ることにより実際の代表者を推定することを狙っている。
メディアへの露出.
2017年に放映された HBO のドラマシリーズ『』のシーズン4第2話において、ホワイトボードに B.A.T.M.A.N. が書かれていた。このドラマの主要人物であるリチャード・ヘンドリクスは彼の「新インターネット」の要素の一つに B.A.T.M.A.N. を組み込んでいるようである。