class: title, smokescreen, shelf, no-footer # コンピュータネットワーク(2024-)<br><small>第05回 ルーティング</small> <div class=footnote> <small><small> Copyright (C) Ken'ichi Fukamachi &lt;fukachan@fml.org&gt;, 2021-2025. CC BY-NC-SA 4.0 </small></small> </div> --- class: compact # 用語集 <div class=footnote> <small><small> </small></small> </div> - パケット ... packet - デジタルデータのかたまり(もじどおり「packet = 小包」) - 経路制御、ルーティング ... routing - 経路の選択肢がある場合に、ルールに沿って、いずれかの経路へ通信を曲げる - 静的経路制御 ... static routing - 管理者が設定したルールにそって経路制御すること - おもにLANで使われる設定 - 動的経路制御 ... dynamic routing - 各ネットワーク機器が自律的に考えて経路制御すること - おもにWANで使われる設定 --- class: compact,img-right # <small>パケット交換方式(1)</small> <div class=footnote> <small><small> (脚注1) 「理解・分解・再構築」((C)鋼の錬金術師)みたいなものです!という例え話はどうでしょう?(w) <br> (脚注2) 「パケット交換」の対極は「回線交換」です。 古典的なアナログ電話はTCP/IPとは全然ことなり、巨大な糸電話みたいなものです。 電話をしている人どうしの間に、 実際に(物理的に)電話線(銅線)が接続している状態を作っていました </small></small> </div>     <small> - <b>TCP/IPにおけるデータ転送の仕組み</b>は、 現実の<b>郵便や宅急便に非常によく似ています</b> - デジタルデータは、ある程度の大きさに切って、小包や宅急便のように送ります - 送信元で、大きいデータは多くの小包に分けられ、配送されます。 送信先で小包群をつなぎ合わせてデータを再現するのです(右図(上)) </small> --- class: compact,img-right # <small>パケット交換方式(2)</small> <div class=footnote> <small><small> </small></small> </div>   <small> - <b>デジタルデータの小包(パケット)</b>にも伝票を付けて送信します - このデジタルデータの伝票には、 <B>送り主と宛先の住所、誰から誰、中身について書きます</B> これを<B>ヘッダ</B>と呼びます。伝票の中身は次のとおり - 送信元と送信先のIPアドレス - 送信元と送信先のポート番号<br>(例:WWWサーバの80) - 中身(TCP) </small> </small> --- class: compact,img-right # <small>パケット交換方式(3): 伝票とヘッダ</small> <div class=footnote> <small><small> (脚注1) 正確には各階層ごとに伝票(ヘッダ)=制御情報が必要です。 つまりHTTP、TCP、IP、イーサネットのヘッダがあります <br> (脚注2) 各階層ごとに別々の配送担当者がいると考えてください。各担当者に指示書(伝票、ヘッダ)が必要なのです </small></small> </div>  <small> - たとえ話として郵便や宅急便は良くできていますが、 一点だけ「伝票」について注意を! - 実際には<b>伝票を二つ書きます</b>。 <b>階層モデルの各階層(担当)ごとに別々の伝票を書く</b> (指示を出す)必要があります - HTTPを例に取れば(TCP/IPの伝票は)<b>TCPヘッダとIPヘッダの二つから構成</b>されます </small> --- class: compact,col-3 # パケットが転送されていく様子は現実の郵便そっくり <div class=footnote> <small><small> </small></small> </div> <small> - パケットの転送も現実の郵便や宅急便そっくり <small> - <b>パケット</b>(小包)ごとに配送 </small> - 途中に中継する拠点が多数 <small> - <b>ルータ</b>群のことです </small> - 伝票の宛先をみながら配送 <small> - <b>ヘッダ</b>を見ながら考えます </small> </small>    --- class: compact,img-right # 経路制御(ルーティング)とは  <small> - 郵便配送の例え話(右図) <small> 1. 札幌から東京行の小包(群)を送り出します 1. 千歳まで持ってきました 1. ふだんは飛行機に載せますが 1. 天候が悪くて、今日は飛行機が飛ばません 1. JRに載せかえて送ることにしました </small> - 4.から5.のステップで行われた「<b>どちらの経路を選ぶか?</b>」 これがルーティング(経路制御)です </small> --- class: compact,col-3 # <small>経路制御の設計:学内は静的、域的には動的</small> <div class=footnote> <small><small> (脚注1) 動的経路制御のプロトコルが色々あるのですが、すべて省略します。 大学院の授業で少し解説しています <br> (脚注2) 動的経路制御 = dynamic routing、 静的経路制御 = static routing </small></small> </div> <small><small> - 前頁の郵便配送は目的地(例:東京)行きの選択肢が複数ある例です - これは大域的なインターネットに相当しています。 障害を回避するために、各機器が自分の判断で宛先を考える <b>動的経路制御</b>で動作しています - 一番右は学内の模式図ですが、そもそも経路の選択肢がありません。 このようなLANでは、 管理者が事前に設定したルールに沿って動作する<b>静的経路制御</b>で十分です </small></small>  <small><small> <br> 図:郵便配送 </small></small>  <small><small> <br> 図:学内LAN(上がInternet) </small></small> --- class: compact, img-right # <small>【ふりかえり】 第2回の演習は何をやっていたのか?</small> <div class=footnote> <small><small> (脚注) 210.128.53.193 は大学にある本科目の演習環境(図(下))の入口 </small></small> </div>   <small> - 第2回の`tracepath`を使う演習では、 どのようにデータが流れていくか?を可視化していました - これは<b>各機器の経路制御の判断結果を次々と表示していた</b>わけです ``` $ tracepath -n 210.128.53.193 1: 172.31.32.1 0.082ms ... 略 ... 7: 206.81.80.237 7.548ms 8: 58.138.88.225 124.263ms ... 12: 210.128.52.7 138.867ms 13: 210.128.53.193 ``` </small> --- class: title, smokescreen, shelf, no-footer # 第05回の演習パート --- class: compact # おしながき <div class=footnote> <small><small> (脚注) データセンターの調整の案内を希望者には送付したので見てください </small></small> </div> <small> 1. おしらせ - <b>第6回(来週)はグループワークなのでH101に集合</b> - 第1回にデモをしてみせたアレを、こんどは自分たちでやってもらいます - 第6回分の予習スライドはありません - 第6-9回あたり(次の一月)月曜日の授業は変則なので、よく掲示をみてください - ELの注意:(1)ELのタブを複数開く(2)再読み込み -> 強制退出(涙) 1. EL 1. 解説 1. 演習 - 経路表を作成できる - ルーティングを実感し経路表をつかいルーティングの説明ができる - 例題は一緒にやります 1. 【課題】 - ポータルのレポート機能で提出してください </small> --- class: compact # <small>【例題】経路表を書こう(郵便局たとえ話版)</small> <div class=footnote> <small><small> 送信先=<b>デフォルト</b>が「具体的な送信先が見つからない場合すべて」に使うエントリです。 いわゆる<b>丸投げ先(w)</b>ですね </small></small> </div>  --- class: compact,col-2 # <small>【例題】経路表を書こう: router(1)</small> <div class=footnote> <small><small> (脚注1) ここからが本番です。サイバースペース版、IPアドレスを扱います (脚注2) 図はイメージです。細部は無視してください <br> (脚注3) router(1)にはSSHログイン出来ないので経路表(解答)を示しています <br> (脚注4) 上の表ではrouter(1)に直結している210.128.53.200/29のエントリを省略しています </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |------------------|---------------------| | デフォルト | インターネット(*) | | LAN | 210.128.53.204 (f3) | | (図の下側すべて) | | <small> - 送信先「<b>LAN(図の下側すべて)</b>」は文字どおりの意味です。 IPアドレスに直せば (図の(f3)より下に割り当てられている) <b>210.128.53.208 - 210.128.53.255 </b>の範囲 - 渡す先が「インターネット(*)」 ... 正確にはインターネット側にあるISPのルータのIPアドレスになります </small> </small>  --- class: compact,col-2 # <small>【例題】経路表を書こう: にせポータル (portal)</small> <div class=footnote> <small><small> (脚注1) この機材にはSSHログイン出来るので確認してみるとよいでしょう (脚注2) この機器でip routeを実行すると、 直結している「210.128.53.248/29は(p)側へ送信」エントリも表示されますが、 上の表では省略しました </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |------------------|---------------------| | デフォルト | 210.128.53.249 (f2) | <small> - portal(にせポータル)には経路が一つしかありません (ネットワークケーブル1本) - よって送信先は事実上一つだけです。 - 「デフォルト」は対向の(f2) 210.128.53.249です - <b>対向の(f2)宛に、すべてのパケットを送信します</b> </small> </small>  --- class: compact,col-2 # <small>【例題】経路表を書こう: router(2)</small> <div class=footnote> <small><small> (脚注1) ワークシートに記入してください。 このあとの課題でも使います <br> (脚注2) この機材にはSSHログイン出来るので確認してみるとよいでしょう </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | デフォルト | 210.128.53.201(g1) | | 210.128.53.200/29 | | | 210.128.53.208/29 | | | 210.128.53.216/29 | | | 210.128.53.224/29 | | | 210.128.53.232/29 | | | 210.128.53.248/29 | | <small> <small> - `ip route`コマンドの出力を読み解いていきます <br> (スライド末/コマンドリファレンスp.21を参照) </small> </small>  --- name: pause class: compact,col-2 # <small>(アーカイブ動画で見ている人は)一時停止して手を動かしてください</small> <div class=footnote> <small><small> 困っている人は「手をあげる」かチャットで合図を! ブレイクアウトルームでTAさんが相談にのります </small></small> </div>   --- class: compact # <small>【参考】ルータ2の経路表を作成する(1a)</small> <div class=footnote> <small><small> (脚注) コマンドの解説は、コマンドリファレンス「厳選UNIXコマンド 第2版」を参照してください。 このリファレンスは、 <A HREF="https://distribution.techbooks.fml.org/">PDF</A> も印刷物も配布しています。 印刷版はH101のメディアコンサルタント席(プリンタがある隅のテーブルのところ)で配布しています </small></small> </div> <small> 1. ルータ2(210.128.53.204)にSSHログインしてください 1. ipコマンドを使います。 具体的には`ip route`を実行してください 1. 前回作成したIPアドレスの表を参考にしながら、経路表を埋めていきます ``` 学籍番号@fw$ ip route default via 210.128.53.201 dev enp3s8 onlink 210.128.53.200/29 dev enp3s8 proto kernel scope link src 210.128.53.204 210.128.53.208/29 dev enp1s0 proto kernel scope link src 210.128.53.209 210.128.53.216/29 via 210.128.53.212 dev enp1s0 210.128.53.224/29 via 210.128.53.212 dev enp1s0 210.128.53.232/29 via 210.128.53.212 dev enp1s0 210.128.53.248/29 dev enp2s0 proto kernel scope link src 210.128.53.249 ``` </small> --- class: compact,img-right # <small>【参考】ルータ2の経路表を作成する(1b)</small> <div class=footnote> <small><small> </small></small> </div>  <small> - IPアドレスは前回の例題の解答を参照してください。ちなみに次のとおり - ルータ2のIPアドレス - (f1) 210.128.53.209/29 - (f2) 210.128.53.249/29 - (f3) 210.128.53.204/29 </small> --- class: compact # <small>【参考】ルータ2の経路表を作成する(2): 直結のネットワーク</small> <div class=footnote> <small><small> (脚注1) dev右のenp3s8といった文字列は、 OSがネットワークインターフェイス(ケーブルを挿す口)を識別するための名前(デバイス名) </small></small> </div> <small> - ip routeの出力で「link src」のある行は、 ルータ2に直結しているネットワークの情報です - 「link src ...」の部分は上の(f1)(f2)(f3)と同じですね? 左端のネットワーク(ルータ2と直結しているネットワーク)は、 このlink srcの先にあると読みます - 例: 210.128.53.248/29 ... の行は「 <b>LAN31(210.128.53.248/29)はイーサネットの口(f2)210.128.53.249の先</b> 」にあると読みます。 実際<b>にせポータル(210.128.53.254)は(f2)の先</b>にありますよね? ``` 210.128.53.200/29 dev enp3s8 proto kernel scope link src 210.128.53.204 210.128.53.208/29 dev enp1s0 proto kernel scope link src 210.128.53.209 210.128.53.248/29 dev enp2s0 proto kernel scope link src 210.128.53.249 ``` | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | 210.128.53.200/29 | (f3)側へ送信 | | 210.128.53.208/29 | (f1)側へ送信 | | 210.128.53.248/29 | (f2)側へ送信 | </small> --- class: compact # <small>【参考】ルータ2の経路表を作成する(3): 経由先があるネットワーク</small> <div class=footnote> <small><small> (脚注) 直結でないネットワークです。 経由先のIPアドレスが via ... 部分で表示されています </small></small> </div> <small> ``` default via 210.128.53.201 dev enp3s8 onlink 210.128.53.216/29 via 210.128.53.212 dev enp1s0 <- ここ 210.128.53.224/29 via 210.128.53.212 dev enp1s0 <- ここ 210.128.53.232/29 via 210.128.53.212 dev enp1s0 <- ここ ``` - 「via 〜」という表示がある行が4行あります。まず、より具体的な下の3つから - 「via 〜」部分は経由する機器のIPアドレスです。 ルータ2と直結していないため経由する機器があります。その情報です。 ちなみに210.128.53.212はルータ3のIPアドレス(c4)ですね? 前回のワークシートと照らし合わせて、IPアドレスと構成図を確認してみてください | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | 210.128.53.216/29 | 210.128.53.212(c4) | | 210.128.53.224/29 | 210.128.53.212(c4) | | 210.128.53.232/29 | 210.128.53.212(c4) | </small> --- class: compact # <small>【参考】ルータ2の経路表を作成する(4): デフォルトルート</small> <div class=footnote> <small><small> (脚注1) 直結でないネットワークです。 経由先のIPアドレスが via ... 部分で表示されています (脚注2) 設定の文脈では、 たいていデフォルトは「最後に使うもの」(last resort, 丸投げ先)と言う意味です。 当然<b>インターネット宛の通信はdefaultに該当</b>します </small></small> </div> <small> ``` default via 210.128.53.201 dev enp3s8 onlink ``` - 最後にdefault行です。これも「経由先があるネットワーク」の一つですが特別な意味があります - これは、いままでに登場した宛先(210.128.53.x/29)のどれにも一致しない場合に使うエントリです - 当然<b>インターネット宛の通信はdefault行</b>を使うことになります | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | デフォルト | 210.128.53.201(g1) | </small> --- name: pause class: compact,col-2 # <small>(アーカイブ動画で見ている人は)一時停止して手を動かしてください</small> <div class=footnote> <small><small> 困っている人は「手をあげる」かチャットで合図を! ブレイクアウトルームでTAさんが相談にのります </small></small> </div>   --- class: compact,img-right # <small>【例題】AWS Academy〜ポータルの経路を読み解く(1)</small> <div class=footnote> <small><small> (脚注1) 第2回では、 AWS Academy (vocareum)から 210.128.53.193 (ルータ1、図の(g3))へpingを撃ちました。 第3回では、 AWS Academy (vocareum)から 210.128.53.254 (portal、図の(p))へ telnet 80をしました。 おぼえてる? <br> (脚注2) 本当は途中に13〜14個ルータがあるのですが、そこは無視して、図にある部分だけを見てみます </small></small> </div>  <small> <small> ``` eee_W_3120626@runweb121229:~$ ping -n 210.128.53.193 PING 210.128.53.193 (210.128.53.193) 56(84) bytes of data. 64 bytes from 210.128.53.193: icmp_seq=1 ttl=240 time=134 ms ``` </small> - 経路: AWS Academy -> ... 太平洋を越えて ... -> router(1) -> router(2) -> portal - 次頁から「router(1) -> router(2) -> portal」の部分を詳細に見ていきます </small> --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く(2)</small> <div class=footnote> <small><small> (脚注) LANの範囲は<b>210.128.53.208 - 210.128.53.255 </b>の範囲です </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |------------------|---------------------| | デフォルト | インターネット | | LAN | 210.128.53.204 (f3) | - AWSから送信されたパケットがrouter(1)に到着 - パケットの宛先(destination)は210.128.53.254です - 経路表と照らし合わせるとIPアドレスはLANに含まれています。 パケットを渡す先は210.128.53.204です。 これはrouter(2)(ワークシートの図中(f3))に当たります - 210.128.53.204(router(2))へパケットを転送 </small>  --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く(3)</small> <div class=footnote> <small><small> (脚注) ここで少々、時間を取ります。各自かんがえてみてください </small></small> </div> <small> - パケットがrouter(2)に到着 - 経路表を照らし合わせると? </small>  --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く(4)</small> <div class=footnote> <small><small> (脚注) こたえあわせ: 経路表を照らし合わせ、ルーティングの説明をしてください </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | デフォルト | 210.128.53.201(g1) | | 210.128.53.200/29 | | | 210.128.53.208/29 | | | 210.128.53.216/29 | | | 210.128.53.224/29 | | | 210.128.53.232/29 | | | 210.128.53.248/29 | | </small>  --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く: 返事(1)</small> <div class=footnote> <small><small> (脚注) 返りのパケットはAWS宛つまり図外になるため、 図の機器群では、つねに経路表のデフォルトを選んでいくことになります </small></small> </div> <small> - portalはpingの返事を送信元(AWS)へ返します - pingの返事の宛先はAWS Academyです。この図の外つまりインターネット側になります - portalの経路表を見て、デフォルトのrouter(2)宛にパケットを送信します </small>  --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く: 返事(2)</small> <div class=footnote> <small><small> (脚注) 該当行は元々のスライドにあるので、返りの分は、最初から解答が書いてあったわけですね:-) </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | デフォルト | 210.128.53.201(g1) | | 210.128.53.200/29 | | | 210.128.53.208/29 | | | 210.128.53.216/29 | | | 210.128.53.224/29 | | | 210.128.53.232/29 | | | 210.128.53.248/29 | | <small> - pingの返事の宛先はAWS Academyです。この図の外つまりインターネット側になります - 経路表の一番上がデフォルトです - router(2)はrouter(1)へパケットを送信します </small> </small>  --- class: compact,col-2 # <small>【例題】AWS Academy〜ポータルの経路を読み解く: 返事(3)</small> <div class=footnote> <small><small> (脚注1) 図には書いてありませんが、パケットを送信する先はISPのルータになります <br> (脚注2) router(1)の先でも、 同じように十個くらいルータがパケットを中継していき、 AWS Academyへパケットが返っていきます </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |------------------|---------------------| | デフォルト | インターネット | | LAN | 210.128.53.204 (f3) | - router(2)からパケットがrouter(1)に到着すると - router(1)の経路表を見くらべ - 前述のように、返事のパケットの宛先はインターネットの彼方なので、 インターネット側へ(上側へ)パケットを送信します </small>  --- class: compact,col-2 # <small> 【課題】各機器の経路情報と動作を説明してください</small> <div class=footnote> <small><small> (脚注) インターネット側も、 できればtracepathかtracerouteコマンドで推測を頑張ってほしいところですが ... まぁ出来れば、ね </small></small> </div> <small> <small> Q: 次の課題1〜3をワークシートに記入し、 ポータルのレポートボックスで提出してください。 なお、PC(g201-01)の経路表は右上の表を参照のこと 1. 「ルータ3」の経路表を作成してください 1. PC(g201-01)からポータル(図の(a) -> (p))に向かうパケットは、各機器で、どの経路を選択しますか? パケットが通過する各機器の経路表を用いて説明してください。 1. 図の(a) -> (x)に向かうパケットは、各機器で、どの経路を選択しますか? パケットが通過する各機器の経路表を用いて説明してください - 注: ルータ1の上(インターネット)側は調べようがないので 「インターネットを通過」などと省略してOK | 送信先 | 渡す先(next hop) | |------------------|---------------------| | デフォルト | 210.128.53.225 | </small> </small>  --- name: pause class: compact,col-2 # <small>(アーカイブ動画で見ている人は)一時停止して手を動かしてください</small> <div class=footnote> <small><small> 困っている人は「手をあげる」かチャットで合図を! ブレイクアウトルームでTAさんが相談にのります </small></small> </div>   --- class: title, smokescreen, shelf, no-footer # <small>参考:ip routeコマンドによる経路表の作成<br>(答え合わせ)</small> --- class: compact,col-2 # <small>まとめ: router(2) 経路表</small> <div class=footnote> <small><small> (脚注) この機材にはSSHログイン出来るので確認してみるとよいでしょう </small></small> </div> <small> | 送信先 | 渡す先(next hop) | |-------------------|--------------------| | デフォルト | 210.128.53.201(g1) | | 210.128.53.200/29 | (f3)側へ送信 | | 210.128.53.208/29 | (f1)側へ送信 | | 210.128.53.216/29 | 210.128.53.212(c4) | | 210.128.53.224/29 | 210.128.53.212(c4) | | 210.128.53.232/29 | 210.128.53.212(c4) | | 210.128.53.248/29 | (f2)側へ送信 | <small> </small>  --- class: compact # router(3)で ip routeを実行した結果 ``` default via 210.128.53.209 dev enp3s0 onlink 210.128.53.208/29 dev enp3s0 proto kernel scope link src 210.128.53.212 210.128.53.216/29 dev enp1s0 proto kernel scope link src 210.128.53.217 210.128.53.224/29 dev enp2s0 proto kernel scope link src 210.128.53.225 210.128.53.232/29 dev enp3s8 proto kernel scope link src 210.128.53.233 ```