ページの先頭です
「データはネットワークでつながった先のクラウドにあり、人と人のコミュニケーションもネットワークが媒介している」という状況が現在の社会です。したがって、ネットワークが停止してしまうと、データへのアクセスも不可能になり、人とのコミュニケーションにも支障が生じます。ネットワークはすでに社会を構成する重要基盤となっているのです。
それゆえに、ネットワークの安定運用は必須であり、また、安定運用しやすいネットワークを構築することも必須になっています。しかしながら、そのような安定運用のための技術や構築技術は、なかなか身につかない。その理由は、実践をともなった知識と技術を身につける場が少ないことにあります。座学だけで得た知識には限界があります。実践経験を伴ってはじめて、仕組みと原理の理解が深まり、血の通った技術的素養となるのです。そうなれば、その技術は、様々な局面で応用可能なものになります。
IIJアカデミーでは、ネットワークを中心とするいくつかの技術分野に対して、実践経験を積むことができ、仕組みと原理の理解が深まるよう工夫したカリキュラムを用意しました。一緒になってそのカリキュラムに取り組み、エンジニアとしての技術を向上していってもらうことを期待しています。
「動的経路制御を用いたネットワークの設計と構築」のカリキュラム開発を担当した岩崎です。本カリキュラムでは経験上カギとなるポイントを厳選してカリキュラムを組みました。また、カリキュラム後においても自己学習を進める上で役立つ知識を同時に身に付けられます。
業務上興味はあるが何から手を付ければよいかわからない、書籍を読むなどしたが自信を持って理解したと言えない、身近に識者が居らず正しく理解できているか不安、より確かな知識として身に付けたいという方は是非受講ください。
「クラウド基盤のためのデータセンターネットワークの設計と構築」のカリキュラムを担当している持田です。データセンターネットワークを題材にして、耐障害性を向上させた堅牢なネットワークの構築に必要な技術を習得していただきます。 サービス利用やアウトソースが進み、直接触れることが少なくなったこれらの技術を実習できる貴重な機会であり、カリキュラムを通して得られた知識や経験は、日常のIT業務やトラブルシューティングを行う際にも役立つと考えています。
IIJアカデミーではネットワーク・システムの中核となる技術の習得を目指す「本科」と、個別の技術テーマの理解を深める「探究科」、またIIJアカデミーの中心的な実習プログラムである「本科」の受講につながる基礎的なネットワーク技術を習得する「基礎実践科」の3つの実習プログラムを提供しています。
①高度な技術を学ぶ力を持った人材
高度なネットワーク技術の学習のために必要な、ネットワーク機器の設定や状態確認、パケットの観察方法などの技能を身につけた人材
②高度なネットワークを理解し、構築運用ができる人材
複雑なルーティングや確実な冗長化など、商用レベルで用いられる技術が適用されたネットワークの構築運用が行える人材
③ネットワーク技術に対する深い理解を持った人材
プロトコルの設計や、その背景にある思想・経緯を理解し、実際のネットワーク上で発生している現象を読み解くことができる人材
背景 |
TCP/IP というものは、教科書を読むだけではなかなか理解しづらいことは事実であり、やはり実践を通した技術経験が必要だとわれわれは考えています。 そこで、イーサネットの有線ケーブルを繋げるだけでオフィスのネットワークにアクセスでき、さらにインターネットにも繋がるという、今では一般的で身近なネットワーク環境を題材にして、その技術と仕組みを学習することにより
という意図が、本カリキュラムを用意した動機であります。 |
|
---|---|---|
目的 |
上の背景で述べた様に、コンピュータにイーサネットの有線ケーブルを繋げるだけでオフィスネットワークとインターネットが使える様になるネットワーク環境は、いまでは当たり前のものになっています。当たり前過ぎて普段はなんの疑いも持たないこの身近な環境ですが、いったいぜんたいどの様な技術と仕組みでできているのでしょうか。 多くの場合、接続するコンピュータは、ネットワークを利用するための必要な情報を DHCP サーバから受け取り、その内容を自分自身の設定情報として利用することによって、ネットワークに繋がるようになります。つまり、DHCP サーバの働きを基盤としてネットワーク環境が用意されているといえるでしょう。 本カリキュラムでは、まずこの DHCP サーバというものが
という基本的な働きを学習することを目的とします。 次に、実際に DHCP サーバを構築し種々の設定を行って、どのような情報をいかにして提供しているのかについて、DHCP クライアントプログラムとの通信をキャプチャすることにより実践を通じて習得してもらいます。この過程では、レイヤ2、レイヤ3それぞれのブロードキャストというものも登場してきます。それらブロードキャストの意味と振る舞い、機能を実際に「見る」ことによって TCP/IP への門をくぐる、ということが2つめの目的です。 その上で、DHCP をめぐる必要情報の流れ・振る舞いの習得の後、 DHCP を基本としたオフィス環境の管理運営が何の躊躇いもなくできる様になる、ということを3つめの目的としています。 |
|
概要 | カリキュラムの進め方 | 本カリキュラムは、カリキュラムに記された課題を受講者自身で実践して進めていただくという IIJ アカデミーの通常の方法で行います。その上で基礎実践科特有のやり方として、課題をめぐる技術内容トピックについての講義を週に一度実施します。講義時間は約1時間程度で、リモートでの受講が可能です。想定している内容は
|
環境 | IIJ アカデミーの環境のもとで受講者専用の物理サーバを用意し、その中で必要な分の仮想マシンを作成し、閉じたネットワークが構成されている環境(OS は Ubuntu Linux)を用意します。 |
|
利用するソフトウエア | 上記環境のもとで、DHCP サーバや DHCP クライアントプログラムを動かします。また通信をキャプチャするために、Wireshark または tshark (場合によっては tcpdump)などを使い通信の内容を覗きます。 |
|
必要な技能 | 本カリキュラム受講にあたっては、Linux 上でのファイル編集、簡単なコマンド操作の経験があることを前提としています。 |
背景 | オンプレミスと呼ぶ、手元に置いたサーバコンピュータからサービスを提供する機会は減り、クラウドを用いるのが一般的になりました。 クラウド事業者がデータセンターに設置して、クラウドサーバ用に設定された機器やネットワークを用いることで、容易にシステム構築できるだけでなく、機器障害時の代替機への切り替えも短時間低コストで実現できます。 また、データセンターは外部のネットワークと複数の通信回線(経路)で接続されており、特定の経路(ルート)が通信できなくなった場合に、他の経路に切り替えることでサービス提供を継続可能としています。 重要かつ多様な状況やニーズに対応するには、クラウド基盤のネットワークへの深い理解が求められることから、本カリキュラムでは「クラウド基盤のためのデータセンターネットワークの設計と構築」を体得します。 |
---|---|
目的 |
近年、システムを構築する際に最初にクラウドを選択するのが一般的となりました。ITエンジニアにとってはクラウドをどのように利用するかがもっとも重要であり、そのクラウドがどのように構成されているかを考察する必要は減ってきました。この状況は技術が進化した結果であり、ある意味では歓迎すべきことであるといえます。 一方、開発中、あるいは、提供中のITサービスに問題が生じたとき、その解決のためにクラウドの仕組みに対する深い理解が必要となることもあります。また、利用しているクラウドサービスの性能を最大限に活かしているか、利用しているリソースの拡張/縮退が必要かどうかなどの判断にはクラウドの仕組みに対する深い理解が必要です。 しかし、クラウドの実装においては、サーバやネットワークをはじめとする構成リソースの仮想化技術が重要となりますが、その技術の実態と応用の仕組みに触れる機会は多くありません。 本項目では、ネットワーク構成に重点を置きつつ、難易度の低い課題から高い課題へと実践を積み重ねながら、クラウドサービス(IaaS)の構築に必要な基礎知識の習得・再確認・補強を行い、数千台規模のサーバを収容可能なデータセンターネットワークの構築に必要な技術を身につけることを目的しています。 |
概要 | 本カリキュラムはエミュレータを活用し、課題に沿って論理リソースを接続したL2(イーサ)ネットワークを作成し、次にそれらのL2ネットワークを冗長化することを実習します。 また課題毎にレポートとしてまとめていただき、テレビ会議にて内容の確認/質疑応答/補足等を実施することで理解度を深めていただきます。 (※)IIJアカデミーでの実習の進め方・実習環境の詳細についてはこちら |
背景 | インターネットの技術的前身であるARPANET(Advanced Research Projects Agency NETwork、(アメリカ国防総省)高等研究計画局ネットワーク)は1969年10月29日に初のメッセージ交換に成功しました。 あくまでも言い伝えに過ぎませんが「ARPANETはどのような攻撃にも耐えるよう設計されたネットワークだ」と言われることがあります。 そう言われる理由の一つとして、コンピュータ間を複数の通信回線(経路)で接続しておき、特定の経路(ルート)が通信できなくなった場合に、他の経路に切り替えて通信を続行可能とする仕組みがあげられます。 この特徴は現在のインターネットにも受け継がれており、回線障害の際に適切な経路に自動切り替えする動的経路制御(ダイナミックルーティング)は、インターネットを支える技術の一つとなっています。 また回線障害だけにとどまらず、災害や機器故障、機器のアップグレード交換、健全性試験をはじめとした定期メンテナンスなどの事象でも、経路の自動切り替えが必要になります。体感はしていないのですが、その恩恵に日々あずかっているのです。本カリキュラムでは、インターネットを支える重要技術「動的経路制御(ダイナミックルーティング)」を体得します。 |
---|---|
目的 |
通常、動的経路制御というものに触れる機会は多くありません。企業ネットワークの場合には、ほとんどが静的経路制御でまかなっているか、動的経路制御を導入していても正しい使い方なのか不安に思うことも多いのではないでしょうか。
等の知識を正しく理解し使いこなすことが重要です。 本項目では、難易度の低い課題から高い課題へと実践を積み重ねながら、経路制御に必要な基礎知識の習得・再確認・補強を行いつつ、ISPクラスの経路制御技術を身に付けることを目的とします。 |
概要 | 本カリキュラムはエミュレータを活用し、課題に沿ったネットワークを構築する過程で関連する技術の調査や挙動の把握、またはトラブルシューティングを実際に経験することによって技術習得を目指していただく構成になっています。 また課題毎にレポートとしてまとめていただき、テレビ会議にて内容の確認/質疑応答/補足等を実施することで理解度を深めていただきます。 (※)IIJアカデミーでの実習の進め方・実習環境の詳細についてはこちら |
背景 |
利用者までの通信経路については、ラスト1マイルまで含めて考えると、その帯域や品質についてはアプリケーション側では関与することができません。いってみればそれは千差万別なのです。よって、場合によってはスループットが出ず、アプリケーションが期待しているデータ通信に支障を来し、そのアプリケーションの機能が実現されなくなる可能性があります。 しかしながら、データを送出する側の TCP 輻輳制御アルゴリズムを変更することで、利用者までのスループットを向上させることが可能な場合もあります。それができればアプリケーションの機能も満たされることになるでしょう。 実際の開発で得たこの輻輳制御アルゴリズムの変更によるスループット向上の経験を、自ら手を動かして実験と実装を通して体験していただきたかったので、このカリキュラムを用意しました。 |
|
---|---|---|
目的 |
TCP による通信は、信頼できるものであり確実なものでなければなりまりません。そしてこの TCP プロトコルは、end-to-end での双方向の通信を実現しているので、クライアントごとに通信の経路が異なるのが普通であって、それらが全て同じ「ネットワーク品質」であるとは限りません。というより、品質は均一ではないと考える方が自然です。 そのような異なる品質のネットワークに対して、TCP 通信としての大義である「信頼性と確実性」を担保するにはどのような努力をすれば良いでしょうか。それを実現するために、TCP においてはいろいろな輻輳制御機構が組み込まれています。 本カリキュラムでは、まず始めに TCP の基本となるフロー制御について理解を深め、次に輻輳に対する基本的な対応方法を理解していただきます。また、輻輳制御は数々のアルゴリズムによって実現されていますので、輻輳に対する効果がアルゴリズムごとにどう違うのかを、輻輳のシミュレーションとスループットの計測を通して実体験し、自らの知見とすることを目的としています。 現在では、ネットワーク全体の品質も驚くほどに向上し、もはや TCP 不要論(というと大袈裟かもましれないですね)も出てきているほどです。さらにより高いスループットを求めて QUIC というプロトコルも提案実装されてきています。そのような状況ではありますが、未来の新しいプロトコルやアルゴリズムを考えるためにも、TCP の輻輳制御を今一度実体験しておく必要があるだろう、と我々は考えています。 上にも述べたように、本カリキュラム前半では、TCP の基本となるフロー制御(window size や MSS の双方向通知など)と輻輳を避けるためのスロースタートメカニズムの基本を、通信のモニタリング(キャプチャリング)を通して理解します。 後半では、実際の輻輳発生(パケットの遅延や喪失、順序の入れ違いなど)を tc コマンドを用いてシミュレートし、Linux に実装されている輻輳制御アルゴリズム各々でのスループットの違いを計測します。アルゴリズムによる振る舞いの差異までも観測できれば最高でありますが、少なくともどのような得意不得意があるのか、適切なものは何なのかなどについて、計測結果を用いて考察していただきます。 |
|
概要 | 環境 | データ転送サーバを複数台用意し(VM にて作成)、そのサーバ各々で TCP の輻輳制御アルゴリズムが異なるものとなるように設定します(TCP の輻輳制御アルゴリズムについては、少なくとも、cubic、reno、bbr の3種類は必須の対象とします)。そして、データ受信用のクライアントマシンを別途独立に1台用意します。 |
測定 | 上記の環境で、サーバからクライアントに、TCP プロトコルを用いてデータ送信をし、そのスループットを計測します。これが、測定の骨格です。その際、具体的にどのような道具や方法を用いて計測するかについては、代表的な方法をカリキュラム詳細に記述していいますが(http や iperf3、netperf などの利用)、それ以外にも独自の方法を考察し計測しても構いません。 |
|
輻輳の シミュレーション |
tc コマンドを利用してサーバとクライアントの間に輻輳が発生している状況を擬似的に発生させて(シミュレーション)、上記の測定を行います。その際に tc コマンドの機能を利用して、複数パターンの輻輳状況をシミュレートして実施します。 |
|
比較検証 | シミュレートした輻輳状況と TCP 輻輳制御アルゴリズムの関係を、測定結果から考察し、レポートにまとめていただきます。最大のスループットを得るための適切な指針があるか、あるとすればそれはどういうものか、ということを見出すことがレポートの眼目です。 |
|
必要な技能 |
[補足] 本カリキュラムでは、評価検証環境の構築において、Linux 上で VM を作成しそれを利用します。IIJ アカデミー環境下での VM の作成については、こちら側から方法を案内するので、実際の作成手順に精通している必要はありませんが、もちろん VM 作成についての経験があればそれに越したことはありません。 また実際の TCP 通信の中身を覗くので、tcpdump や wireshark(tshark)を用いてのパケットモニタリングの経験があれば心強いです。とはいえ、このカリキュラムではパケットのモニタリングやキャプチャリングが必須となるので、実習している間に精通してしまうでしょう。したがって未経験でも問題はありません。 | |
得られる技術 |
|
背景 |
1987 年に Van Jacobson によって開発された traceroute コマンドは、目的地に到達するまでの経路の情報を表示してくれるとても便利で重要なコマンドであり、ping コマンドと共にネットワークに携わる者にとっては必須のものと言えましょう。この traceroute コマンドの機能がどの様に実装されているのかは、非常に興味深い所です。 初期の実装においては、UDP パケットを送信し、ICMP を受け取るという枠組みで作られていましたが、現在の実装では、送信するパケットのプロトコルが選べる様になっています。なぜそのように送信時のプロトコルが選べる様になっているのでしょうか。そしてまた、この機能はどういうご利益をもたらすのでしょうか。 ネットワークに携わるものとして、普段お世話になっているこのあまりにも便利な traceroute コマンドについて、その実装の内容を把握しておくことは必要不可欠な事柄だと、我々は考えています。また具体的な実装のされ方を知っておくことは、TCP/IP のより一層の理解にもつながるものだとも考えています。その様な考慮のもと、traceroute コマンドの実装に挑戦するカリキュラムを用意してみました。具体的にプログラミングをしてもらうカリキュラムです。 「すでにきちんと実装された traceroute コマンドが存在しているのになぜいまさら」とか「ふたたび車輪を作ってもしょうがないじゃないかぁ」という見解もあるかと思います。けれども我々は、「一度は自分でコードを書いてその自分のコードの動きを確かめるということが本質的なの理解のためには必要である」、と考えています。極座標でのラプラシアンの導出や、1/(1+x^4) の積分の様に一度は自分で計算しておくべき物があるのと同様、生涯に一度は C 言語で実装してみるべきプログラムのひとつが traceroute であると考えています。もちろん何回もやる必要はないでしょう。ただし一度はやるべきものであるはずです(くどい)。これを機会に一度自前での実装に挑んでみてください。 なお、ここで C 言語での実装を選択している理由は、UNIX 系の OS のカーネル部分が C 言語で書かれていることによります。つまり、C 言語に馴染んでいないとカーネルのソースコードは理解できないのです。なので、traceroute コマンドの自前実装を通して C 言語についても深く理解してしまおうという欲張った気持ちの反映が、C 言語での実装を選択した理由です。 |
|
---|---|---|
目的 |
本カリキュラムでは、
について実際の実装開発を通じて体得してもらうことを目的としています。 あわせて、C 言語でのプログラミングと、いわゆる socket プログラミング(ネットワークプログラミング)について習熟することも目的としています。 |
|
概要 | カリキュラムの骨格 |
まず現在の traceroute コマンドで、プロトコル選択によって結果として何が変わるのかを観察してもらいます。 次に、TCP/IP の機能(仕様)のどの部分がどの様に使われるのかに注目しながら、traceroute コマンドの実装の大きな枠組みを把握します。 その後、我々の方で用意したスケルトンプログラム(レベルに応じて複数存在)をベースにして、自前の traceroute コマンドを作成します。この自前プログラムでは、少なくとも3種類のプロトコル(UDP, TCP, ICMP)に対応していただきます。作成したものの評価については、既存の traceroute コマンドとの出力結果の比較で行います。 そして最初に戻って、プロトコル選択によって結果が変わることの理由の解明をしてもらいます。 |
環境 |
Ubuntu OS が動作する物理マシンを、われわれの環境の中で、受講者ごとに用意します。そこで実装開発作業を行ってもらいます。 |
|
必要な技能 |
UNIX 上での C 言語のプログラミング開発の経験。 |
|
補足 |
socket プログラミングについての知見があることが望ましいです。また受講者各人の必要に応じて、個別に解説を行うことも予定しています。 |
お申し込みは「基礎実践科」、「本科・探究科」のいずれかのプログラムから選択してください。
ページの終わりです