最近、bgpをやった。
ちょっと整理してみる。
bgpは、egp(exterior gateway protocol)のひとつである。
AS外部との経路の交換をおこなうので、 exteriorというのである。
これに対し、AS内部での経路交換をおこなうルーティングプロトコルは igp(interior gateway protocol) という。OSPFが代表的である。
と言っても、ルーティングプロトコルと言えば、OSPF, static, BGP がほとんどではないだろうか。
egpに関しては、事実上BGPしかなく、egp = bgpと考えてよいだろう。
さて、egpとigpの違いについてまとめてみたい。
googleで検索したり本で調べれば、決まり文句のようにその違いが述べられている。
やれパスベクタ型だの、リンクステートだのなんだの。
私もそのように覚えていたのだが、
ずっと、bgpがなんなのかがよくわからなかった。
単に経路交換の仕組みが違うだけで、ルータに経路とそのネクストホップを知らせる、
という点については変わらないじゃないか、と。
そこで、GNS3で、簡単な構成を作ってみた。
client --- R1(アクセスルータ) --- R2(キャリア) --- R3(キャリア) --- R4(ISP/IX) ---(キャリア) --- Server
インターネットの通信というのは、基本的に上記のような経路を経ている。
client - R1 間は、パソコンとデフォルトゲートウェイである。
ここは経路は一つしかない。どこへ行くにも、R1を経由する。
R1-R2-R3-R4 の間は、igp(OSPF)でよい。
この区間は収容ユーザや回線数の都合、冗長性(耐障害性)の関係で同じ構成が並列にあったりするのでいくつかのノードを経る。
問題はR3とR4の間である。ここでbgpを使う。
clientからキャリアまでの間に選択すべき経路はそれほど多くないが、
ISP/IXからもらう経路は膨大である。
igpとegpを区別する一番の理由は、この経路数の規模である。
あと、bgpにはibgp と ebgpというのがある。
ibgpというのは同じAS同士、ebgpというのは異なるAS同士で使う。
ここで私はふと疑問に感じた。
「同じAS内の経路交換はigpでするんじゃないのか?なぜibgpが必要なのか?ibgpとigp(OSPF)の違いは?」
今日届いた「インターネットルーティング入門」をパラパラとめくっていると、以下のような記述があった。
「eBGPで得た自分以外のASからの経路情報を、さらに自分のAS内の他のBGPスピーカに伝えるときに使われるのがiBGPです。」
私は今まで、下から考えていた。clientがあって、キャリアがあって、ISPがあって、と。
逆に考えるのだ。eBGPでもらった経路を、iBGPでAS内に伝える。
この、AS内でのBGP交換というのは、ちょっと特殊なルーティングと言える。
あまり説明されることもない。
ibgpが必要になる理由は、先ほど言った、「この区間は収容ユーザや回線数の都合、冗長性(耐障害性)の関係で同じ構成が並列にあったりするのでいくつかのノードを経る」ということではないかと思う。
原理的なことだけを考えるなら、client - キャリア - ISP - IX - ISP - キャリア - Server
で済む。ここで登場するキャリア、ISP、IXはすべて異なるASである。
が、ネットワークというものは、複数束ねられているものである。
iBGPというのは、いわば大量の経路の複製である。
まず、2台のルータでBGPを設定する。同じAS、つまりiBGPである。
そこに、もう一台同じASのルータを追加すると、最初の2台で交換された経路が3台目には伝わらない。
ここがOSPFとは違うところである。こうなっているのは、経路交換のループを防ぐためである。
OSPFなら、3台目にも伝わる。(なぜ、OSPFだとループしないのか?は、改めて考える)
また、BGPで交換されているのに、ルーティングテーブルに載らないことがある。
つまり、show ip bgpでは存在しているのに、show ip routeでは存在していない。
いろいろな場合があるが、BGP特有なのは、「next hopへ到達できない経路はルーティングテーブルにのらない」ということである。
そもそもルーティングというのはnext hop情報を伝えることなのだから、「A宛のnexthopは100です」という情報があれば、それをテーブルに載せればいい、載るものだという認識があった。ルーティングテーブルに載っていてその宛先に送って届かないときは仕方がない、と。
だが、BGPでは「到達できないネクストホップ宛の経路情報」というものも交換されるのである。
R2(AS100) --- R3(AS100) --- R4(AS200)
R3とR4の間でBGP(eBGP)による経路交換がおこなわれると、
R3に、R4(の、R3と接続しているinterfaceのアドレス)をnext hopとする大量の経路情報が伝わる。
そして、R2とR3の間ではiBGPにより経路交換がおこなわれる。R3がR4からもらった経路情報はeBGPによる経路なので、R2に伝わる。
しかし、もしR2が、そのネクストホップつまりR4のR3の対向interfaceのアドレスに到達できないと、ルーティングテーブルに載らない。
だから、R2とR3間では、IGP(OSPFやstatic)によって、R3-R4間の経路情報を交換する必要がある。