Skip to content

Instantly share code, notes, and snippets.

@tomfuru
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomfuru/5dfc91d4373aa43b02d7 to your computer and use it in GitHub Desktop.
Save tomfuru/5dfc91d4373aa43b02d7 to your computer and use it in GitHub Desktop.
advent

#大規模なネットワークのお話

この文章はOUCC Advent Calendar 2014 16日目の記事です. 昨日は @kurose_th 君によるhdd復活記と雑談でした.

すたー @star_TF です. 名前か何かを書くと「お疲れ様です」か「お世話になっております」と勝手に手が打とうとして仕事に染まっていっているのを感じます.

##自己紹介 OUCC内でも私を知らない人は少なくなさそうなので簡単に自己紹介を. 私はOUには2008年入学,基礎工情報→情報科学研究科で今年4月に修士を修了して就職しました.今は神奈川県川崎市に住んでいます.

最初は何を書こうかと悩んでいて,去年からハマっているラブライブ!のこととかラブライブ!のこととか書こうかと思ってましたが,色々考えを文字にしていると,話をどこに落としたらいいのかが分からなくなってしまいました. というわけで,とりあえず真面目方面で書くことにします.

というわけで真面目方向というわけですが,今自分はネットワークのシステム構築を仕事にしています.というわけで,そこらへんから学生時代には全然分からなかったこととか書き連ねていこうかなと.(まだプロジェクト等に入って数か月しか経ってないのでそこまで深く分かってるわけではないですが...)

##基幹ネットワーク 皆さんは"ネットワーク"と言えばどういうのを思い浮かべるでしょうか.

ネットワークの中でも,LANは構築したことのある人も多いと思います. ルータがあって,(もしかしたらスイッチがあって,)そこからLANケーブルでパソコンとかサーバとかに繋げる感じですね. ルータは最近は無線ルータも多くスマフォやタブレット,ノートパソコン等は無線で繋げてる人も多いでしょう.

このような誰でも手軽に構築できるLANネットワークは,OSI参照モデルで言うとL2(Layer2;データリンク層)までの範囲です。「LAN内でもIPアドレスは使うでしょ」って声も聞こえてきそうでまあその通りなんですが,実際の通信ではARPでIPアドレスからMACアドレスに変換されてそれを使って通信するので,まあL2までを使うと言っていいでしょう.

もちろん,インターネット等外部と通信をしたい場合は,ルータを介してL3(ネットワーク層)~L7(アプリケーション層)の機能も用いて通信するわけですが,大抵L3の機能を提供するルータは便利なもので,置くだけでDHCPもNAPTも他色々な機能が自動的に提供されて,あまりいじったことのない人も多いかもしれません.

前置きが長くなりましたが,「基幹ネットワーク」の話です. 基幹ネットワークってなんだ,って感じですが,ここでは「プロバイダ等が持っている大規模ネットワーク」のこととします.さらに言うと「大規模」とはネットワークを構成する機器が多いことや,通信の流量が多いこととします.

プロバイダは日々私たち消費者(やたとえば企業等)のネットワークから大量のトラフィック(通信データ)が流れてきます.そのため,LANネットワークのようにLANケーブルでスイッチやルータを繋いで構成した場合,帯域が足りず通信が輻輳(混雑)してしまいます.

構成機器

では実際にプロバイダがどういうものを使ってネットワークを作っているかというと,こういうやつです

http://www.cisco.com/web/JP/product/hs/routers/asr1000/index.html

http://www.alcatel-lucent.co.jp/products/router_switch/7750_service_router/index.html

ブレードサーバみたい,って思った人も多いかと思いますが実際似たようなもんです. 中にCPUもメモリも記憶装置も入ってますし,ネットワークの口が多いサーバですね.

機器の操作方法

一般的に使われるルータはルータのIPアドレスをPCのブラウザから入力したりするとwebブラウザ経由で機器の設定を変更することができます. では上記のようなでかい機器はどうやって設定を変えるのでしょうか. 主な方法としては,CLI(Command Line Interface)経由でコマンドを利用する方法があります. コマンドで設定を行うのですが,設定できる機能も非常に多いため,設定には階層構造があります.1コマンドで次の階層に移動し,さらに移動し,そして最後に値の設定等を行います.

例:

Router> enable
Router#  configure terminal 
Router(config)# interface fastethernet 0
Router(config-int)#  ip address 192.1.12.2 255.255.255.0
Router(config-int)#  no shutdown
Router(config-int)#  exit 
Router(config)#

機器のその他の操作方法

「いちいちコマンドを入力して設定しないといけないのか」と感じた人もいるかもしれません. 確かに,スクリプト等を使えばコマンドを自動的に大量に入力することはできますが,そのコマンドを生成するのも面倒です.

最近(?)よく聞くCLI以外のインタフェースは,netconfとOpenFlowがあります. SNMP(Simple Network Management Protocol)というのもありますが,これは専らネットワークの状況の監視等に使われています. 以下,netconf/OpenFlowについてそれぞれ簡単に説明します.

netconf

netconfは,ネットワーク機器の制御のためにデザインされたプロトコル,らしいです. 規格としてはRFCで規定されています(RFC4741-4744とか5277とか).

以下,netconfのメッセージの例です.

例:

    <?xml version="1.0"?>
    <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:cpi="http://www.cisco.com/cpi_10/schema" message-id="101">
       <get-config> 
            <source> 
                 <running/> 
             </source> 
              <filter> 
                  <config-format-text-cmd>
                   <text-filter-spec>
            interface Loopback113
                     </text-filter-spec>
                  </config-format-text-cmd> 
              </filter> 
          </get-config> 
    </rpc>]]>]]>

見たら分かるように,netconfはxmlの形式を取っています. xmlですが,設定の追加,変更,削除ができるようになっています. 設定がxml形式で取り扱えるので,ソフトウェアを用いて機器の制御を行うことはCLIに比べたら容易だと言えます.

OpenFlow

OpenFlowは聞いたことのある人もいるでしょう. というかOUCC Advent Calenderでも数日前に @klta6154 君が記事を書いてましたね. ちなみに自分はマスタリングTCP/IP OpenFlow編は部屋にありますがあまり読み進められてません...知識はOpenFlow1.0で止まってます(のでもしかしたら下記は時代遅れな情報かもしれない).

さておき,OpenFlowは何かと言うと,OpenFlowスイッチと呼ばれるスイッチ(実機の場合も仮想的な場合もあり)に対して動的にフローテーブルと呼ばれるテーブルの内容を書き換えたりして通信(トラフィック)を制御できます. フローテーブルは,イメージ的にはLinuxにあるiptablesみたいなもので,「hogeというデータのトラフィックはfugaというアクションをする」という要素(フローエントリと言う)が入っています. OpenFlowのバージョンが上がるにつれて,hogeのトラフィックの条件がより複雑にできたりします.

大規模ネットワークのルーティング

大規模ネットワークに使われる機器やその設定方法が色々あることが分かったかと思いますが,では実際これらの機器はどのように通信するのでしょう. 高価な機器と言えど,もちろん直接ポート同士を繋げば通信することはできます.VLANとかいうのが絡んでくると実際は物理的に繋いでも通信できなかったりすることもありますが,そこまでいくと非常にややこしくなるのでここでは考えません.

とはいえ,VLANを考えないとL2の範囲は特に何も特筆すべき場所もないですね. というわけで(手抜き),L3のルーティングについて考えてみます.

そもそも,「ルーティング」とは,機器から別の機器にトラフィックを届けるためにどこにトラフィックを流せばいいかということを決めることです. もちろん固定的に流す方向を決めるスタティックルーティングという方法もありますが,ネットワークの構成が変わると設定を変えないといけないデメリットがあるため,ダイナミックルーティングと呼ばれる方法が用いられています.

L3のダイナミックルーティングのためのプロトコルとしては,BGP(Border Gateway Protocol)やOSPF(Open Shortest Path Fast), RIP(Routing Information Protocol)等があります.

もう少し大きくわけるとL3のルーティングプロトコルにはIGPとEGPと呼ばれる区分けがあり,IGPで比較的小規模なルータのグループ間でのルーティングを行い,EGPでIGP同士のルーティングを行います. 上記で書かれた3つのプロトコルでは,IGPとしてOSPF,RIPが利用され,EGPとしてBGPが利用されます(3文字語ばかり並べるとややこしいな).

#まとめ というわけで,皆が使っているネットワークっていうのは実は裏ではこういう仕組みor機器を使って作られてるんだよ,というお話でした.

もう少し図とかもつけて色々説明したかったのもありますが残業の闇に飲まれて時間ありませんでしたごめんなさい.

ルーティングはともかく,機器とかその設定については学生の間ではふつーは知らずに過ごしていくものな気がするので,「こういうのが使われてるんだー」って感じに思ってもらえたらいいかな,と思います.

#ラブライブ!とか人生とか 気づけばもうラブライブ!にハマってから1年半以上経ってしましました. ここまで一つのコンテンツにどハマりしたのももしかすると人生で初めてかもしれません. μ'sの皆のことを考えてるだけで人生が豊かになっていくのを感じます.

今年に入ってライブやらアニクラやらその他イベントやらに頻繁に行くようになってしまいました(出費ェ). 2年前はこんなクソなイベントマンになってるなんて思ってもいなかったですが,本当に人生何が契機で変わるか分からんもんですね. ともかく,5thライブの来月末まで頑張って生きようと思います.

##終わりに 明日は @anonimeco さんです。お楽しみに!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment