class: title, smokescreen, shelf, no-footer # <small>情報技術応用特論 第03回<br>TCP/IP(3) インターネット層</small> <div class=footnote> <small><small> Copyright (C) Ken'ichi Fukamachi <fukachan@fml.org>, 2021-2025. CC BY-NC-SA 4.0 </small></small> </div> --- class: title, smokescreen, shelf, no-footer # インターネット層の概要 <div class=footnote> <small><small> </small></small> </div> --- class: img-right,compact # インターネット層(IPとICMP)の役割 <div class=footnote> <small><small> (脚注) ホスト=コンピュータ。 ホスト(host)というと英語では主人ですが、 かつて(大型コンピュータの時代)、 サービスを提供する(ユーザをおもてなしする)ことから<B>ホストコンピュータ(略してホスト)</B>と呼びました。 その名残り。 当時ユーザはホスト本体には触れず、 ホストにつないだ<B>小型の端末(ターミナル)</B>でコンピュータを使っていました。 <B>ターミナル</B>という名のアプリは、その名残り </small></small> </div>  <small> - IPは右図のようにインターネット層でのパケット転送を担当します - END-TO-ENDで、 あるホスト(IPアドレス)からホスト(IPアドレス)への転送 - IPは**大域的な転送**の担当、 ネットワークインターフェイス(NI)層 (イーサネットなど)は**隣あった機器間の転送** - TCPとIPはコンビです(再掲) - IPはIPアドレス(**住所**)間の転送を担当 - TCPはアプリケーション(**誰**)宛の担当 </small> --- class: img-right,compact # IPパケット(再掲) <div class=footnote> <small><small> (脚注) [復習] パケットとは封筒のようなもので宛名書きがヘッダにあたります。 それを右下図のように書きます </small></small> </div>   <small> - インターネット層(IP,ICMP)は、 トランスポート層(TCP,UDP)から渡されたパケットにIPヘッダを追加し、 IPパケットをネットワークインターフェイス層(NI層,Ethernetなど)へ渡します。 例: - TCPパケットにIPヘッダを追加してIPパケットを作り、 下層(NI層)に託します <br> 図(上)は、封筒に入れて入れて...のイメージ - IPパケットサイズの上限も(TCPと同様で)下層の制限で決まります。例: - Ethernt(1500) - PPPoE(IP over PPP over Ethernet(1500)) </small> --- class: img-right,compact # IPv4ヘッダ <div class=footnote> <small><small> (脚注1) IPSec = IP Security (脚注2) ヘッダを丸暗記する必要はありませんが、 <b>IPアドレスが書いてあることは覚えておいてください</b> </small></small> </div>  <small> - ヘッダに**送信元と送信先のIPアドレス**(図の上から4行目と5行目)があります - ペイロードにトランスポート層のTCPパケットなどが入ります。 3行目にあるprotocol(数字)がペイロードに入っているパケットの種類を表しています - 1 ... ICMP (後述) - 6 ... TCP - 17 ... UDP - 50 ... ESP (IPSec, VPNで利用) - 51 ... AH (IPSec, 最近使わない) - あとの細かいところは省略します </small> --- class: img-right,compact # IPのエラー対応(ICMP)  <small> - IPはUDPと同様でエラーに対処しません <br> TCP/IPのエラー対策は (1)**TCP**に頼るか (2)**各ソフトウエアの独自対策**のいづれか - **ICMP (Internet Control Message Protocol)** - インターネット層の各種情報を通知する仕組みとしてICMPがあります - 用途: デバッグ、エラー、おすすめの情報などの通知 - ただし悪用を恐れて**実際の運用ではICMPを許可しないことが多い**ため、 かなり使えないプロトコルです - 通信相手の生死確認程度であれば使えることが**多い** e.g. pingコマンド </small> --- class: img-right,compact # ICMPパケットとICMPヘッダ <div class=footnote> <small><small> (脚注) ヘッダを丸暗記する必要はありません </small></small> </div>   <small> - <b>ICMPパケットを転送するのはIP</b> - IPヘッダの<b>プロトコル番号は1</b> - IPパケットのペイロードがICMP(右下図) - ICMPヘッダはシンプルに3要素32ビット - typeとcode次第でヘッダの次にオプション要素があることもあります - ICMPペイロードでデータも運べます - 中身はtypeとcode次第 - もしくは独自拡張 </small> --- name: pause class: compact,col-2 # <small>(アーカイブ動画で見ている人も)一時停止して休憩</small> <div class=footnote> <small><small> 30分ごとにヨタ話をしろというのが指導教官の教え <br> 正確には「アメリカでは30分ごとにジョークを言わないといけない」だけれど、そんな洒落乙なこと無理:-) </small></small> </div>   --- class: title, smokescreen, shelf, no-footer # ネットワーク構成 <div class=footnote> <small><small> </small></small> </div> --- class: img-right,compact # ネットワークの基本構成  <small> - **社内/学内**と**社外/学外**という用語があるのは、 1990年代半ば以降、 図のようなネットワーク構成が基本だからです - この基本構成図を覚えてください <br> (家庭のネットワークは右図の劣化版) - くわしくは春学期後半で取り上げます <br> (具体的に設計してもらいます) </small> <div class=footnote> <small><small> (脚注) 正確には、 ルータの先(インターネット側)に通信事業者(キャリア)の機材 (回線終端装置,ONUなど)があるのですが、 (そこはプロバイダ屋の仕事の範囲外、キャリアさんの仕事範囲なので)省略してます </small></small> </div> --- class: col-2,compact # 用語: ネットワークの基本構成(<small>論理的な区分?or文脈依存?</small>) <div class=footnote> <small><small> (脚注1)物理的には(1)(2)も学内 (脚注2) 90年代なかばからDMZ(=非武装地帯)という用語を使っていますが違和感しかない。 ここ別に平和な場所ではないです。 個人的には<B>区画(frame/compartment)</B>と<B>隔壁(bulkhead)</B>という用語を使いたいところです。 なぜなら、われわれは、<B>やられる前提でサーバを置いて</B>いて、 非常時には切り離す場所(<B>ダメージコントロール</B>の対象)だからです </small></small> </div> <small> |場所| 用語|備考| |----|-----|----------------| |学外| WAN | いわゆるインターネットですが(2)より上は世界中と通信できる領域 | |学内| LAN | イントラネットと呼ばれることも | |DMZ | DMZ | インターネット向けサーバなどを置く場所。学外からの通信は厳しく制限しつつ、学内むけサービスも行う | |(1) | | ルータ(+通信事業者との接続に必要な装置)でインターネットに接続| |(2) | | ファイアウォールという装置を置きます(業務用,一般家庭には無し)| </small>  --- class: img-right,compact # 用語: ネットワークの基本構成 (セグメント) <div class=footnote> <small><small> (脚注1) セグメントは連続したIPアドレス帯。 例: 192.168.10.0〜192.168.10.255が使えるセグメント </small></small> </div> <!-- さしかえ -->  <small> - **セグメント**(segment) - ネットワークの断片、範囲 - 正しくはnetwork segmentですが... - ネットワークも同義語(ですがnetworkも曖昧な用語なので) - **ブロードキャスト**(後述)とセグメント - **一斉送信可**=**ブロードキャストが届く範囲**がセグメント ([Ethernet](https://lectures.fml.org/slides/network/tcpip/ni_ethernet/)で後述) - ネットワーク機器の区別 - **ルータ**は異なるセグメント間の接続 - **スイッチ**は本来**同一セグメント**をつなぐ機材 (学内はスイッチが基本、詳細は春学期後半の設計編へ) </small> --- class: img-right,compact # 用語: ネットワークの基本構成 (学内ではVLANを利用) <div class=footnote> <small><small> (脚注1) VLANを使うと一つのスイッチから複数のセグメントが伸びます (論理的な構成図と物理的な構成図が異なります) <br> (脚注2) 上の図は論理構成図です </small></small> </div> <!-- さしかえ -->  <small> - 大昔は、**一つの部屋**の中にあるPC群が一つの**同じセグメント**に接続されていると思えばよかったのですが、1990年代以降のイントラネットではセグメントを論理的に延長する**VLAN(Virtual LAN)**という技術を使うことが普通です - PC教室のセグメントは、図のように、建物すら越えた複数の部屋にまたがっています。 PC教室セグメントのPCは、すべて172.23.x.yというIPアドレスです - とりあえずPCの引越しは楽ですね... </small> --- class: col-2,compact # ネットワークの基本構成とIPアドレス <div class=footnote> <small><small> (脚注) AWSはglobal IP (addres)のことをPublic IPと称しています。 まぁ普通に英語なので意味は通じますよね? </small></small> </div> <small> |種類 |説明 | |------------------------|----------------------| | グローバルアドレス |住所としての意味があるIPアドレスで、ホストを世界で一意に識別するための数字です。(2)より上側で利用します| | プライベートアドレス |ユーザが自由に**利用してよい**IPアドレスで、(2)より下側つまり社内/学内/家庭内ネットワークで使います。次の3つの範囲が利用可能(アドレスの表記法は後述)| | |10.0.0.0/8 | | |172.16.0.0/12 | | |192.168.0.0/16 | </small>  --- class: title, smokescreen, shelf, no-footer # IPアドレス <div class=footnote> <small><small> </small></small> </div> --- class: col-2,compact # ネットワークの基本構成とIPアドレス(再掲) <small> |種類 |説明 | |------------------------|----------------------| | グローバルアドレス |住所としての意味があるIPアドレスで、ホストを世界で一意に識別するための数字です。(2)より上側で利用します| | プライベートアドレス |ユーザが自由に**利用してよい**IPアドレスで、(2)より下側つまり社内/学内/家庭内ネットワークで使います。次の3つの範囲が利用可能です(表記法は、このあと解説)| | |10.0.0.0/8 | | |172.16.0.0/12 | | |192.168.0.0/16 | </small>  --- class: img-right,compact # 注意: IPアドレスはネットワークインターフェイスごと  <small> - 図の(1)や(2)の機材には複数のIPアドレスがついています (例: 図中(2)の*3ヶ所) - 接続しているセグメントごとに異なるIPアドレスになります - たとえば(2)のファイアウォールは、 上側の学外側インターフェイスが210.128.52.4、 下側の学内側インターフェイスが172.16.0.4、 右側のDMZ側インターフェイスが192.168.1.4 - 正確をきすと、 IPアドレスとは、 ホストではなく**ネットワークインターフェイスにつける識別子**です。 ただ、 **ほとんどのホストでインターフェイスは一つなので、 ホストの住所と思ってOK** </small> --- class: col-2,compact # 二つのIPアドレス体系(おおまかな比較) <div class=footnote> <small><small> (脚注1) 実際のJPNIC申請はISPが代行します。 ユーザが直接JPNICとやりとりすることはありません <br> (脚注2) NATは次節で取り上げます </small></small> </div> <small> - IPv4 (IP version 4) - 大きさは**32ビット** - 表記法:**8ビット**ずつ**.(dot)**で区切り**10進数表記**(詳しくは後述) - 210.128.52.45 - 192.168.10.1 - グローバルIPアドレスは[**JPNIC**](https://www.nic.ad.jp/) に申請しJPNICから割り当ててもらいます (ドメインと同様に申請した組織がIPアドレスの管理を委任されると考えてください) - プライベートアドレスの利用は自由 (使い方は後述の[NAT](https://lectures.fml.org/slides/network/tcpip/inet_nat/)を参照) <wbr> - IPv6 (IP version 6) - 大きさは**128ビット** - 表記法:**16ビット**ごとに**:**で区切り**16進数表記** - 2403:3a00:202:1209:49:212:144:112 - 2001:240::105 <br> 0000を0、さらに連続した0を::で省略可 (::は一ヶ所限定) - 申請手続きは同様です - IPv6のアドレスの**種類**は複数あり、 **一つのインターフェイスに複数種**つけられます。 その中にはイントラネットのみで使うプライベートっぽいアドレスもありますが IPv4のような使い方はしません ([NAT](https://lectures.fml.org/slides/network/tcpip/inet_nat/)は無い) </small> --- class: title, smokescreen, shelf, no-footer # IPv4アドレス詳細 <div class=footnote> <small><small> </small></small> </div> --- class: col-2,compact # IPv4の表記法 <small> - クラス (classfull) - 旧表現 (1993年以前?) - IPアドレスを二つに分けて考えます - **ネットワーク部(network part)** - **ホスト部(host part)** - 分け方は**サブネットマスク**(subnetmask)で指定します - 分け方は3種類のみで、それぞれ**クラスA,B,C**に対応します(後述) - **IPアドレス/サブネットマスク**という表記をすることもあります - 例: 192.168.10.1/255.255.255.0 - IPアドレスが192.168.10.1 - サブネットマスクが255.255.255.0 <wbr> - CIDR (Classless Inter Domain Routing) - 新表現(1993〜) - 分け方は可変長で、分け方(ネットワーク側の大きさ)を/数字 (network prefixもしくは単にprefix)で表現しています。 (network prefix, host prefixという表現もあるそうです) - **VLSM(Variable Length Subnet Mask)** つまり可変長のサブネットマスクと呼んでいます - **IPアドレス/prefix**と表記します - 例: 192.168.10.1/24 - **IPアドレスが192.168.10.1** - **network prefixが24** </small> --- class: compact # IPv4の分類(クラス) <div class=footnote> <small><small> (脚注) multicastを使った会議中継を90年代前半までは見かけました。 認証や課金が出来ないため商用インターネットではmulticastの使いどころがないです。 ちなみにIPv6の裏側ではmulticastを多用しています(なぜなら作者が同じだから:-) </small></small> </div> <small> | クラス | 役割 |ネットマスク(/prefix)| IPアドレスの範囲 |通信の仕方 | |--------|-------------------------|-------------------|------------------------------|---------------------| | A | 大規模組織用 | 255.0.0.0 (/8) | 0.0.0.0 〜 127.255.255.255 |ユニキャスト(1対1) | | B | 中規模組織用 | 255.255.0.0(/16) |128.0.0.0 〜 192.255.255.255 |ユニキャスト(1対1) | | C | 小規模組織用 | 255.255.255.0(/24)|192.0.0.0 〜 223.255.255.255 |ユニキャスト(1対1) | | D | マルチキャスト | |224.0.0.0 〜 239.255.255.255 |マルチキャスト(1対多)| | E | 予約済(未使用) | |240.0.0.0 〜 255.255.255.255 |- | - **クラス**は、 1990年代なかばには旧式になった用語ですが、 大昔のネットワークがあるかぎり現場では使いますので、 おぼえてください(基本情報でも出ます) - **ユニキャスト**は**1対1**の通信です。 IPアドレスは住所に相当します - **マルチキャスト**の場合、 通信は**1対複数**で、IPアドレスはチャンネルにあたります。 そのチャンネルに参加しているホストすべてに通信が届きます </small> --- class: img-right,compact # 例: 192.168.10.1/24の新旧表記法 <div class=footnote> <small><small> (脚注) /28とか/14とか半端なprefixにすると分かりにくいですが、 10進数表記にするから分かりづらいだけ </small></small> </div>  <small> - 旧表現 192.168.10.1/255.255.255.0 - 新表現 192.168.10.1/24 - 旧表現では**ネットワーク部が24ビット**、**ホスト部が8ビット**です - /24 (network prefix が 24)はネットワーク部が24ビットという意味です - 255.255.255.0を2進数で書くと**左から1が24個**ならびます(右下図)。 network prefixの24は、この24を意味しています </small> --- class: col-2,compact # IPv4アドレスの使い方(割り当て方) <small> - 割り当てられたIPアドレス群の中で、両端はホストの割り当てに使えません - 最小のIPアドレスを**ネットワークアドレス**、 最大を**ブロードキャストアドレス**と呼びます - 残りの部分をホストに割り当てます - つまりホストに使えるIPアドレスの数は 「**ホスト部の大きさ(2^ホスト部のビット数) - 2**」個が上限 - CIDR表現なら**2^(32 - network prefix)**個になります <wbr> - 例: あなたの研究室では192.168.10.0/24を使ってください - IPアドレスは192.168.10.0 〜 192.168.10.255 までの256個 - ただし両端は使えません - 192.168.10.0(一番小さいIPアドレス)は**ネットワークアドレス** - 192.168.10.255(一番大きいIPアドレス)は**ブロードキャストアドレス** - ホストに使えるIPアドレスは - 192.168.10.1 〜 192.168.10.254 までの254個 - ホスト部は8(32-24)ビットなので <br> (2^8=256) - 2 = 254 </small> --- class: col-2,compact # IPv4アドレスの使い方で特別なもの(1)(半分は復習) <small> - ブロードキャストアドレス - **同一セグメントにあるホスト(群)へパケットを一斉に送信したい**場合に使う宛先 (IPパケットでブロードキャストアドレスを宛先として送信) - 動作は[イーサネット](/slides/network/tcpip/ni_ethernet/)の回で解説 - **一番大きなIPアドレス**を使う約束 - 例: 192.168.10.0/24 というセグメントの場合、 192.168.10.255がブロードキャストアドレス <wbr> - ネットワークアドレス - **一番小さなIPアドレス**で、 利用するIPアドレス帯を**代表**するIPアドレスです。 「192.168.10.0/24のセグメント」といった表現をします。 例: 192.168.10.1/24は192.168.10.0/24の中でホストに割り振るIPアドレスの1つ - 例: 192.168.10.0/24 - 192.168.10.0 がネットワークアドレス - 実際のところ特別な用途はないのですが、後方互換性のため利用しません </small> <div class=footnote> <small><small> (脚注)BSD Unixの初期実装ではネットワークアドレスがブロードキャストでした </small></small> </div> --- class: col-2,compact # IPv4アドレスの使い方で特別なもの(2)(半分は復習) <small> - プライベートアドレス(既出) - 自由につかってよいIPアドレスなので**世界中で重複**しています - このアドレスをつけているホストは**インターネットに直結**できません (同じIPアドレスのホストが世界中に無数にあるから) - この変なアドレスをどう使うのか?は、 [NAT](/slides/network/tcpip/inet_nat/)の回で説明 - 各クラスから1領域ずつ割いています - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 <wbr> - 127.0.0.1 (loopback address) - **自分自身**を意味します。とうぜん全コンピュータに存在します。 自分宛=他のホストと通信しないため、127.0.0.1は重複していても問題なし - デモで127.0.0.1を使っているので既出 - この特別な127.0.0.1があるので、 実は127.0.0.0/8は一般のIPアドレス割当に使っていません (もったいない) </small> <div class=footnote> <small><small> (脚注) ふつう127.0.0.1に物理的な実体はありません。 OS(カーネル)では127.0.0.1をソフトウエアで処理する実装なのでsoftware loopbackという表現もあります </small></small> </div> --- class: title, smokescreen, shelf, no-footer # IPv6アドレス詳細(少し) <div class=footnote> <small><small> 基本情報処理試験でも出るのでIPv6も少しだけ </small></small> </div> --- class: col-2,compact # IPv6アドレス <small> - 前述の大きさやアドレス表記法といった基本的な事柄は覚えてください - 大きさは**128**ビット - **16ビットごと**に**16進数**、**:**つなぎ - 連続した0は省略可 - IPv4と同じ**CIDR表記**です - 2403:3a00:202:1209:49:212:144:112/128 - 2403:3a00:202::/64 - IPv6のユニキャストアドレス(住所の意味合いを持つアドレス)は、 左側64ビットが**サブネットプレフィックス**、 右側64ビットが**インターフェイス識別子** (MACアドレスを元に自動生成したホストごとに異なる値) <wbr>  - たとえば70:85:c2:da:bb:72という MACアドレスのネットワークインターフェイスに自動でつくIPv6アドレスは fe80::7285:c2ff:feda:bb72 になります。ここで fe80::/64 が prefix で、 7285:c2ff:feda:bb72が自動生成(Modified EUI-64という規則で変換) された右側64ビットです </small> --- class: col-2,compact # IPv6のメリット <div class=footnote> <small><small> (脚注)参考:(ネットワーク運用) IPv6を使うユーザが少なくv6ネットワークが空いている (俗に言うスカスカの状態な)ので、 自宅のフレッツをIPv4 over IPv6で接続すると速くなるらしいです (という噂に引っかかって...) </small></small> </div> <small> - IPv6の必要性 - IPv4ではIPアドレスが足りないため - v4の最大43億程度では地球人口以下 - そこで1990年代前半には開発開始 - 128ビットの巨大なアドレス空間 - IPv4の96ビット倍は簡単に数えられない巨大さで、 アドレスが足らないという話は当分ありません <wbr> - IPv6の開発開始と同時に、 **IPv4延命策としてプライベートアドレスと[NAT](/slides/network/tcpip/inet_nat/)**(後述)を導入しましたが... <br> - **IPv6ではTCP/IPの原点へ回帰** - **IPv6ではグローバル**アドレスで通信 - **正しいEND-TO-END通信** - NATはしません、出来ません - ヘッダの整理など細かな技術的改良 - 新機能 - IPSec (IP Security, VPNなどで利用) - IP Anycast </small> --- class: title, smokescreen, shelf, no-footer # 私論 (<small>中間試験には出ません</small>)<br>IPv6のデメリット <div class=footnote> <small><small> (脚注1) IPv6の闇を語るよ〜 (脚注2) 我々の産業は巨額の先行設備投資ビジネスな点にも注意 </small></small> </div> --- class: col-2,compact # 私論: IPv6のデメリット <div class=footnote> <small><small> (脚注1) デメリットについては異論もありましょうや (脚注2) 近年「家庭のBフレッツをIPv6経由にすると高速」という営業をしてますが、 v6の技術が優位だからではなく、 v6の設備投資がダブついているからv6へ誘導したいキャリア都合でしょう (フレッツのIPv6バックボーンがスカスカの間だけ真実なので、 買ってみたけど速くない!だまされた!と思う人が出てきてて当然の案件; みんなで使えば遅くなる;実際そういう人が出てきてます) </small></small> </div> <small> - 巨大なIPアドレス空間という利点だけでは移行の動機として不十分です - 欧米諸国(1990年代初頭にインターネットを導入した国々)では、 IPv4アドレスをわりとたくさん確保しているため、あえてIPv6に移行する動機が希薄です - 後発の中国やロシア、インド、中東、アフリカはIPv6を使いたいでしょう <wbr> - IPv4でもIPv6の新機能のほとんどが使えるため技術的な動機も希薄です - (NATなしという)「ネットワーク設計が抜本的に異なる」設計・運用を解決する説得力のある提案を聞きません。 これは膠着状態が20年くらい続いている所謂「**鶏が先か、卵が先か**」問題です。 IPv6が普及しないのでIPv6用の機器が進化しませんが、 機器がないからIPv6が使えないわけで... </small> --- class: title, smokescreen, shelf, no-footer # NAT<br>(Network Address Translation) <div class=footnote> <small><small> </small></small> </div> --- class: col-2,compact # IPv4延命策としてのプライベートアドレスとNAT <div class=footnote> <small><small> (脚注) まずIP masqueradeという機能がLinuxカーネルに登場し、 のちにNAPTと呼ぶようにしたため名称が二つあります。 設定にnatではなくmasqueradeという名称を使うことがあるため、 どの用語も覚えること </small></small> </div> <small> - IPv6の開発開始と同時に**IPv4延命策としてプライベートアドレスとNAT**を導入 - 図の(2)でNATを行っていて、 (2)より上はグローバルアドレス、 (2)より下はプライベートアドレス (色がついているところはグローバルIP) |用語 | | |-------------|----------------------------------| |**NAT** |Network Address Translation | |**NAPT** |Network Address Port Translation | |**IPマスカレード**|NAPTと同じ意味|  </small> --- class: img-right,compact # NAT 行きの通信 <div class=footnote> <small><small> (脚注) DST = destination, SRC = source </small></small> </div>  <small> - 例: 学内のホストからWWWサーバ(IPは182.48.54.220)へのアクセスを考えます - 図(2)の機器のインターネット側インターフェイスのIPアドレスは210.128.52.4です - 図(2)のファイアウォールを通過時、IPヘッダとTCPヘッダを書き換えます - 送信先(DST)のIPアドレスとポートは変えません。 送信元(SRC)のIPアドレスを210.128.52.4へ書き換え、 送信元ポート番号を適当な番号(注: 通信ごとに異なる番号)へ書き換えます - この書換えルールを機器は覚えておきます - WWWサーバには送信元(SRC IP)がグローバルIPアドレス=210.128.52.4に見えるので普通に通信できます </small> --- class: img-right,compact # NAT 返りの通信  <small> - 返りのパケットは、 182.48.54.220(送信元=SRC)から210.128.52.4(送信先=DST)へ送られてきます。 当然ポート番号はHTTPコネクションごとに異なります - 図(2)の機器は各HTTPコネクションの書き換えルールを覚えているので、 IPアドレスとポート番号の組み合わせを見ながらIPとTCPヘッダを逆に書き換えます - 書き換え後、学内側へ送信します - こうすれば、プライベートアドレスでもインターネットのサーバと通信ができるわけです </small> --- class: col-2,compact # NAT メリット <div class=footnote> <small><small> (脚注1) 16ビットの使い方にも流儀があり、 実際には16ビットすべてをNAT変換に利用していません <A HREF=https://www.nic.ad.jp/ja/basics/terms/port-number.html> ->JPNICの解説 </A> <br> (脚注2) アドレスとポートを書き換えてゴマかす小手先芸を、 (NAPTも含めて)総称でNATと呼ぶことが普通ですが、 本来のNATはIPアドレスだけを変換する規格のことです <br> (脚注3) なおIPv6ではNATを使いません。あくまでもNATはIPv4の延命策で邪道な技です </small></small> </div> <small> - 前頁で説明した例では、アドレスとポート番号の両方を変換するので、 **NAPT**もしくは**IPマスカレード**と呼ばれます。 - 通信(例: TCPコネクション、UDPパケット)ごとに、 送信元ポート番号(SRC PORT)を変えていくことで、 ポート番号の大きさ、 つまり16ビット(65536個)分の書き換えルールが(最大)使えます (理論上は使えるという話です;脚注1も参照) <wbr> - 例: 大学のユーザ数は1000人強ですが、 短時間のTCPコネクションも多いため、 1つのグローバルIPで(つまりSRCポート番号変換だけで)十分さばけています - 16ビット以上に書き換えルールを増やすには、 書き換え先のIPアドレス候補も追加します。 例: SRC IPとして210.128.52.4と210.128.52.5の2つを使えば、 最大で約13万とおりの変換が可能となります </small> --- class: col-2,compact # NAT デメリット <small> - IPアドレスに住所の意味が無くなります - ホストにつけるプライベートアドレスは、 世界で一意にホストを識別する数字になっていないので、 正しい意味での住所(ユニキャストアドレス)になっていません <wbr> - 本来のEND-TO-END通信ではないです - 必ず途中にNATをする機材が挟まります。 この機材のせいで、通信がうまくいかないことがあります </small> --- class: col-2,compact # NAT デメリット <div class=footnote> <small><small> </small></small> </div> <small> - 自由な双方向通信が出来ません - 本来のEND-TO-END通信なら特別な制限なく出来るはずです - たとえばIP電話で受信する場合を考えます。 インターネット側から来た(いわば一見さんの)初パケットに対しては、 NATの書き換えルールが分からないので変換できません - 右図は返りのNATの説明(再掲): <br> あくまでも、まず最初に学内から学外へ出て行く通信があり、 そのときに書換えルールが決まります。 そのあとはじめて逆変換も出来るようになるわけです </small>  --- class: title, smokescreen, shelf, no-footer # ルーティング <div class=footnote> <small><small> </small></small> </div> --- class: center,compact # たとえ話: 郵便の配送におけるルーティング <div class=footnote> <small><small> (脚注) くわしくは次頁 </small></small> </div>  --- class: compact # たとえ話: 郵便の配送におけるルーティング <div class=footnote> <small><small> (脚注) 本質は、これだけです。 現実的な設定は難しいですが、 ルーティング設定はバックボーン担当の醍醐味 </small></small> </div>  <small> 1. 郵便物を投函すると、郵便局員さんが収集して最寄りの郵便局に集めます 1. 飛行場へ輸送しましたが、今日は天気が悪くて飛行機が飛びません 1. そこで鉄道輸送に切り替えます。 これが**動的経路選択(dynamic routing)** </small> --- class: img-right,compact # 二種類のルーティング(経路選択) <div class=footnote> <small><small> (脚注) 今回は大域的な動的経路制御つまりインターネット側がメインテーマです。 インターネットの醍醐味 </small></small> </div>  <small> - **動的経路制御** (**dynamic routing**) - ルータ群が**自律**的に考え経路変更 - 図のインターネット部分 - **大域的な経路制御**はdynamic - **静的経路制御** (**static routing**) - 設定されたとおりに動作 <br> 障害時は人間が対応 - 大学敷地内はstatic - **大学敷地内は学外(インターネット側)も学内もstatic** (注:インターネットへの出口が一つではdynamic routingする理由も手段もない) </small> --- class: col-2,compact # 図に登場する機器の説明 <div class=footnote> <small><small> (脚注1) L3スイッチとルータは似ていますが、 ルーティング機能(頭のよさ)に力点がある機材がルータ、 スイッチング機能(パケット転送能力)に力点がある機材がL3スイッチ (だと思う) (脚注2) cs,ds,asはCisco用語 (だと思う) </small></small> </div> <small> |機材|説明| |--------------------------|---------------------------------------| |ルータ | インターネットへの経路制御担当<br>この構成では仕事のしがい無し | |スイッチ(cs) | **core switch**<br>**L3スイッチ**<br>VLAN間ルーティングを行う | |スイッチ(ds) | **distribution switch**<br>建物の出口を担当する**L2スイッチ**<br>建物内のアクセススイッチ(as)群<br>への接続を集約する役目<br>coreまでVLANを中継 | |スイッチ(as) | **access switch (edge switch)**<br>末端に置く**L2スイッチ**<br>PCや無線LAN機器などをつなぐ先 | </small> <wbr>  --- class: img-right,compact # 学内ルーティング(static routing) <div class=footnote> <small><small> (脚注1) 用語「学内」が曖昧です。 実際、図の大枠の中は<B>物理的に学内</B>です。 でも、ネットワーク的(or 論理的)には、 ファイアウォールの上(インターネット)側を<B>学外</B>と言うことが多いと思います。 このへん普段から文脈とあうんの呼吸で互いに理解している感じです <br> (脚注2) つまり異なるセグメント間の通信は一度coreまで行って戻ってきます </small></small> </div>  <small> - 最初に設定したまま動作しつづけます - **学内**側:**そうそう学内の構成は変わらない**ので、これで問題ありません - 学外側:インターネット接続回線が一つなので**敷地内の学外側もstatic**です (注:複数のインターネット接続回線があるならdynamicを検討します) - **障害時は人間が対応**する必要あり - coreは**VLAN間ルーティング**をします - 異なるセグメント間(例:PC教室〜研究室)や、 学内セグメントとインターネット側とのパケットのやりとり <br> (学内 -> core -> ファイアウォール -> インターネット,DMZ) </small> --- class: img-right,compact # 学外(敷地内インターネット側)ルーティング <div class=footnote> <small><small> (脚注) さて、次頁ではISP内のdynamic routing(Internetの正体)へ進むことにしましょう </small></small> </div>  <small> - ファイアウォール〜ルータ〜ISP - ファイアウォール〜ルータ <br> (ISP接続ルータ)間はstatic - ISP接続ルータ〜ISP間もstatic <br> (この図ではdynamicの必要が無い) - 図中一番上のインターネットの**ごく一部**がISP(大学の契約先ISP)に当たります </small> --- class: col-2,compact # インターネットは数万のプロバイダの集合体です <iframe width="480" height="270" src="https://www.youtube.com/embed/DdaElt6oP6w?rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <br> "The Internet: 1997 - 2021 (1m)" by Barret Lyon, CC-BY 3.0 <small> ルーティング情報をもとに可視化したもの <br> (生物的なイメージ?生命の樹?) </small>  <br> The Internet 2003 by Barret Lyon, CC BY 4.0 --- class: img-right,compact # インターネットは数万のプロバイダの集合体です  <small> $$インターネット = \sum_{AS} プロバイダ(AS)$$ - **インターネットは数万のISPの集合体** - **ISP** (**Internet Service Provider**, 単に**プロバイダ**とも言う) - ISPのほぼすべてが民間企業 - 大手ISPは**AS番号**を持っています - AS番号は**16ビット** - 32ビットAS番号というのもあります。 16ビットでは足りなくなったのでBGP4(後述)のオプションで拡張 </small> --- class: img-right,compact # インターネットルーティングアーキテクチャ: IX <div class=footnote> <small><small> (脚注) BGPで渡す経路情報は、 自ASのIPアドレス一覧(と付随するAS情報) = いわば自ASの電話帳です </small></small> </div>  <small> $$インターネット = \sum_{AS} プロバイダ(AS)$$ - 大手ISP同士は**IX**という施設に各自のルータを持ち寄り相互接続しています - IX = Internet eXchange - IXの実態はL2スイッチの提供です - 各ISPはIXに自社設備を置き相互接続 (要:ルータ設置、IXまでの回線調達) - IXではルータ同士がBGP4で経路情報を交換します </small> --- class: img-right,compact # インターネットルーティングアーキテクチャ: ISP間 <div class=footnote> <small><small> (脚注) BGPで渡す経路情報は、 自ASのIPアドレス一覧(と付随するAS情報) = いわば自ASの電話帳です </small></small> </div>  <small> $$インターネット = \sum_{AS} プロバイダ(AS)$$ - 大手ISPは互いのルータ間でBGP4を使い経路情報を交換します - **BGP** = Border Gateway Protocol - 4 は version 4 - ルータ間のBGP接続(179/tcp)を設定することを 「BGP **peerを張る**(**peering**する)」と言います (図の点線部分) - **パスベクトル型**: 基本戦略は目的地までに通過するASの数が少ない経路の選択 (後述するディスタンスベクトルの応用と考えてよい) </small> --- class: img-right,compact # インターネットルーティングアーキテクチャ: ISP内外 <div class=footnote> <small><small> </small></small> </div>  <small> $$インターネット = \sum_{AS} プロバイダ(AS)$$ - ISP間のBGP peeringは比較的タイムスケールの長い処理と思ってよいですが - **ISP内**でのルーティングでは**高速な(秒単位の)障害回避**が必要です - ISP内のルーティングには **OSPF**や **IS-IS**を使うことが普通です。 ちなみにOSPFはIETF、IS-ISはOSIの規格です - 商用インターネット以前の古えの時代には **RIP** という単純なルーティングで運用できました <br> (例:かつて日本全体をRIPで運用:-) </small> --- class: img-right,compact # インターネットルーティングアーキテクチャ: ISP内 <div class=footnote> <small><small> (脚注1)OSPFはstatefull (脚注2)雑なたとえをすれば、RIPはUDPぽくて、OSPFはTCPぽいイメージ </small></small> </div>  <small> - **RIP (Routing Information Protocol)** - **ディスタンスベクトル**型 - 複数経路がある場合、目的地までのルータの数が少ない方を選択(図右) - **OSPF (Open Shortest Path First)** - **リンクステート**型 - 参加している全ルータが定期的に情報交換し、 互いの**状態**や構成について知っています。 そのため障害時には高速な経路変更が可能(図左) - 基本的にfull meshを組んで情報交換するので、 ルータ数が増えると急激に計算量が増えます(O(N^2))。 巨大なネットワークでは使えません </small> --- class: compact # インターネットルーティングまとめ <div class=footnote> <small><small> (脚注1) 実際の運用では、 会社間の力関係、 大域的なISPの接続関係、 回線やピアリングの費用など、 多くのファクタを考慮し、複雑な条件を満たすよう設定することになります (脚注2) 資格よりBGPの経験値のほうが重要 </small></small> </div> <small> |ケース|ルーティングプロトコル| |----------------------------|----------------------------| |イントラネット|基本は静的(static)、大きな組織ではRIPやOSPFで動的経路制御あり| |ISP内|OSPFやIS-IS、ある程度大きいとBGP、小規模組織ならRIPもありうる| |ISP間|BGP| - OSPF(IETF)やIS-IS(OSI) - 賢くて高速な判断が出来るかわりに負荷は高い傾向があります。 よって巨大なネットワークでは使えません。 そのため大きなISPでは、 ISP内もBGPでミニインターネットのように運用することがあります (e.g. BGP confederation) - BGP - 基本戦略は簡単ですが、実際には... (脚注を参照) <br> -> いろいろあるけど、でも、ルーティング屋さんは楽しそうにみえる:-)? </small>