from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

OSPFを理解する

OSPF

ospfはリンクステート型。リンクステート型なのでlinkのスピードとかの状態を計算してroutingを決定する。

そのためcpuリソースを使う。

ただし収束は早い。

認証もできる。md5だかで認証。OSPFは標準化されている

ospfのバージョン

ospfにはv1がない。欠番。

v2とv3を使う。

  • ospf v2

ospf v2はipv4を使う。2倍。通常はこれ。

  • ospf v3

ospf v3はipv6を使う。2倍。

ospfの動き。

まずospfを設定されたrouterはdownステートになっている。down stateの状態からhelloパケットを投げる。helloパケットはマルチキャストで送る。

その時のアドレスは224.0.0.5で送る

helloパケットを受け取った側はとりあえずinit状態になる。んで投げられたhelloパケットがエリアとかの条件を満たしていたら、ネイバーテーブルに追加する。

んで受け取った側はhelloパケットを返す。helloパケットが返ってきた状態で両方とも2way-state状態になる。

(ここなんだけど相手のhelloパケットの内容を確認して条件があってたら2way-state状態になるっぽい?)

んでマスターとスレーブを決める。交換し始めたらexstart状態になって、マスター側は先にDBDを送る。DBDには自分のLSDBの情報の概要が入っている。

DBDを受け取り続けて自分の知らない概要が来た場合、相手にLSR(link state request)を送る。

LSRを受け取った側はLSUパケットを送る。LSUパケットはLSAパケットの集まり(unitだから)。

終わったらLSackを投げて終了。

LSackを受け取ったら2つのルーターともfull stateになる。

full stateになった後も定期的にhelloパケットを送る。(新規ルーター発見とkeep aliveのために)

OSPFのコスト計算

OSPFは100mbps以上だと自動的にカンストする。

BR BDR

DR、隊長。 BDR、副隊長。

DRやBDRの決め方はプライオリティ+routerIDで決める。

プライオリティは0~255であり、高いほうがDRに選ばれる。

もし全部同じ場合、routerIDで選ばれる。

また、DR,BDRが選ばれない場合、全てのルーターとメッシュ的にネットワークを交換する

DB,BDR以外のDother同士はそれぞれ2way-state状態

p2pタイプの接続の仕方もある

routerID

routerIDはipみたいなやつ。

もしアクティブなループバックインターフェースが存在してるならそいつのipが選ばれる

これはたぶんno shut状態のloopback IFってことだろうな。

もしなければno shut状態のIFのipの最大値が取られる。

エリア

エリアによってLSDBの内容を分割してデカすぎないようにする。 area0はバックボーンエリアといって特別なエリア。

エリアごとにBRとDBRがいる。

エリアをトンネルでつなぐこともできる。

ABR...area border router

インターフェースでエリアが変わっている境界に位置するルーター.

ASR...ASが変わる位置にいるルーター

バックボーンルーター...バックボーンエリアにいるルーター

ネイバー

ネイバーはOSPFが生きている周りのルーター

ospfのアップデートについて

ripの場合は30秒に一回全データを勝手に送ってくるが、OSPFの場合は30分に一回同期するだけなのでネットワークを圧迫しない。

またトリガードアップデートするのでイベント駆動型のアップデートも送る。このときLSAを送るらしいがそもそもLSAってパケットじゃないよな・・・?

ospfとiso7層

ospfはipを使う。ipの中のセグメントのプロトコル番号の乱は87番になっている。また、tcp/udpを使わず直接ipがカプセル化している。

パケットの中身は案外簡単。タイプがあってバージョンがあってrouterIDがあってエリアIDがあって認証があってデータがある。データの中身はtypeによって違う。