python3ではtweepyが使えない

GNS3のためにpythonを2.x.xから3.x.xにしたら、

今まで動いていた pythonで書いたtwitterのブロックしているユーザ一覧表示スクリプトが

動かなくなった。



調べると、3系ではtweepyは使えず、3系で使える別のライブラリがあるようだ。


作り直しか・・・

bgp

最近、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間の経路情報を交換する必要がある。



行き詰まり

最近行き詰っている。

ルーティングとは何か?ルータとは何か?インターネットとは何か?

TCP/IPとは?ウェブとは?クラウドとは?L3スイッチとは?

BGPとは?OSPFとは?

冗長?経路?アドレス?


一応、どんなものでどんな風に使われどんな風に設定しどんな風に動くのかはなんとなく理解している。

しかし、なぜこうでなくてはならないのか、ほかにもっといい方法がないのか、とか、

どうしてOSPFなのか、どうしてBGPなのか、

なぜ冗長化するのか、なぜcatalystなのか、nexusなのか、という、根拠というか理由というか、
動機というのか、そういうものがわからない。



そもそも、ネットワークとはなんだろう。

そんなことすら考える。


ネットワークとは、「接続」のことか。

一番単純なネットワークは、2点間の間を結ぶことだ。

糸電話のような。


「通信」とはなにか。「接続」と「通信」の何が違うのか。

ルーティングとスイッチングとは、それぞれどういうことか。


両方「ネットワーク」に分類されるが、違うものである。

よく言われるのはL3(えるさん)、L2(えるに、えるつー)であるが、
果たしてそれらはそれぞれどういうものなのか。

本当にみんなわかっているのか?



1秒の通信断が発生すると、何が起きるのか。
パケットが一つ落ちると、どうなるのか。


電車の中でスマホでウェブを見ている人に何が起きるのか。

家のパソコンでオンラインゲームをしている人にどんな影響があるのか。


メールを受信中に、メールサーバとクライアントの間のどこかで0.5秒の通信断が発生したら、
どうなるのか。



「TCPは再送機能があるがUDPにはないからドロップする」というが、
youtubeを視聴中にパケットが一個おちたらどうなるのか。


マルチキャストを利用した通信というかサービスは具体的に何か?


ウェブ(グーグル)で検索して得られる情報、資格試験受験のための参考書に書いてあること、
その他一般的に言われること、

それらと自分がインターネットやATMやiPhoneや漫画喫茶などで通信・サービスを利用していることの間に、もやもやとしたものがある。

もしかして私は重要な誤解をしている、あるいは重大な認識不足があるのではないか?

そんな気がしてならない。


とりあえず、「インターネットルーティング入門」という本を買った。