Introduction
パソコンを起動したり新しいネットワークに接続したとき、どのようにしてネットワーク設定が自動的に構成されるのか、不思議に思ったことはありませんか?
自分の送ったパケットが目的地に届くまでに、いくつの機器や国を経由しているのか知りたいと思ったことはありませんか?
インターネット回線業者(ISP)から割り当てられるIPアドレスは1つなのに、なぜ自宅のすべての機器がインターネットに接続できるのか気になりませんか?
こうした疑問に答えるのが、このルームです。
このルームは、コンピュータネットワーキングに関する4部構成のシリーズのうち、2番目にあたります。
-
Networking Essentials(本ルーム)
学習前提知識
このルームを有効に活用するためには、以下の知識を持っていることを推奨します。
-
ISO OSIモデルと各レイヤー
-
TCP/IPモデルと各レイヤー
-
Ethernet、IP、TCPといったプロトコル
言い換えれば、「Networking Concepts」を終えてから取り組むのが理想的です。
学習目標
このルームの目的は、ネットワークをつなぎ合わせる標準的なプロトコルや技術を学ぶことです。
-
DHCP(Dynamic Host Configuration Protocol)
-
ARP(Address Resolution Protocol)
-
NAT(Network Address Translation)
-
ICMP(Internet Control Message Protocol)
-
Ping
-
Traceroute
DHCP: Give Me My Network Settings
お気に入りのカフェに行き、ホットドリンクを手に取り、ノートPCを開いたとしましょう。
するとノートPCはカフェのWiFiに接続し、自動的にネットワーク設定が行われ、そのままTryHackMeの新しいルームに取り組めるようになります。
IPアドレスを手入力したわけでもないのに、デバイスはすでに準備完了。さて、どうしてこんなことが可能なのでしょうか?
ネットワーク接続に必要な基本情報
どんなネットワークにアクセスする場合でも、最低限以下の設定が必要です。
-
IPアドレスとサブネットマスク
-
ルーター(ゲートウェイ)
-
DNSサーバ
新しいネットワークに接続するたびに、これらの設定を環境に合わせて変更しなければなりません。
サーバのように固定的に動く機器では手動設定が好ましい場合もあります。例えば、ドメインコントローラをカフェのWiFiに持ち込んで接続するようなことは普通しませんし、サーバは他の機器から固定のIPで参照される必要があるからです。
自動設定のメリット
接続された機器を自動的に設定できる仕組みには大きな利点があります。
-
手動設定の手間を省ける(特にモバイル端末にとって重要)
-
IPアドレスの重複(コンフリクト)を避けられる
もし同じIPアドレスが複数の機器に割り当てられると、通信ができなくなってしまいます。これを防ぐ仕組みこそが DHCP(Dynamic Host Configuration Protocol) です。
DHCPはアプリケーション層のプロトコルで、UDPを利用します。
-
サーバは UDP 67番ポート で待機
-
クライアントは UDP 68番ポート から送信
スマートフォンやノートPCは、デフォルトでDHCPを使うよう設定されています。
DHCPの基本手順「DORA」
DHCPは4つのステップから成り立ちます。
-
Discover: クライアントがDHCPDISCOVERメッセージをブロードキャストし、利用可能なDHCPサーバを探す
-
Offer: サーバがDHCPOFFERメッセージを送り、クライアントに利用可能なIPを提示する
-
Request: クライアントがDHCPREQUESTメッセージを返し、提示されたIPを受け入れる意思を示す
-
Acknowledge: サーバがDHCPACKメッセージを送り、クライアントへの割り当てを確定する
例:
ノートPC → DHCP Discover
サーバ → DHCP Offer
ノートPC → DHCP Request
サーバ → DHCP Acknowledge
パケットキャプチャ例
次のキャプチャでは、クライアントが 192.168.66.133 を割り当てられる様子が確認できます。
user@TryHackMe$ tshark -r DHCP-G5000.pcap -n
1 0.000000 0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Discover - Transaction ID 0xfb92d53f
2 0.013904 192.168.66.1 → 192.168.66.133 DHCP 376 DHCP Offer - Transaction ID 0xfb92d53f
3 4.115318 0.0.0.0 → 255.255.255.255 DHCP 342 DHCP Request - Transaction ID 0xfb92d53f
4 4.228117 192.168.66.1 → 192.168.66.133 DHCP 376 DHCP ACK - Transaction ID 0xfb92d53fここで重要なのは:
-
Discover や Request の段階では、クライアントはまだIPを持っていないため、
0.0.0.0から255.255.255.255へ送信している。 -
リンク層ではブロードキャストMACアドレス
ff:ff:ff:ff:ff:ffが使われる。 -
サーバはDHCPOFFERで利用可能なIPアドレスとネットワーク設定を提示し、クライアントのMACアドレス宛に送信する。
DHCPで得られる情報
DHCPによって最終的にデバイスは、ネットワークやインターネットにアクセスするための必要な設定をすべて取得します。
-
割り当てられたIPアドレス
-
ネットワーク外へのルーティングに使うゲートウェイ
-
ドメイン名解決のためのDNSサーバ(後で詳述)
Answer the questions below
How many steps does DHCP use to provide network configuration?
4
What is the destination IP address that a client uses when it sends a DHCP Discover packet?
255.255.255.255
What is the source IP address a client uses when trying to get IP network configuration over DHCP?
0.0.0.0
Answer the questions below
What is the destination MAC address used in an ARP Request?
ff:ff:ff:ff:ff:ff
In the example above, what is the MAC address of 192.168.66.1?
44:df:65:d8:fe:6c
ICMP: Troubleshooting Networks
Internet Control Message Protocol(ICMP) は主にネットワーク診断とエラー報告に使われます。ネットワークのトラブルシューティングやセキュリティでよく使われる代表的なコマンドが2つあり、どちらもICMPに依存しています。
-
ping:ターゲットへの接続確認と往復遅延(RTT)計測に使う。ターゲットが生きているか、返答が自分の端末まで届くかを確認できる。
-
traceroute / tracert:Linux/UNIX系では
traceroute、Windowsではtracert。ホストからターゲットまでの経路(経由するルーター群)を発見するのに使う。
Ping
ping は ICMP Echo Request(ICMP Type 8)を送信し、
相手は ICMP Echo Reply(ICMP Type 0)で応答します。これにより到達可否と往復遅延を測れます。WiresharkではICMPエコー要求/応答が IP パケット内に表示されます。
しかし、応答が得られない理由は複数あります:ターゲットがシャットダウンしている、あるいは経路上のファイアウォールがICMPをブロックしている、などです。下例では -c 4 で4回送信して停止しています。
user@TryHackMe$ ping 192.168.11.1 -c 4
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
64 bytes from 192.168.11.1: icmp_seq=1 ttl=63 time=11.2 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=63 time=3.81 ms
64 bytes from 192.168.11.1: icmp_seq=3 ttl=63 time=3.99 ms
64 bytes from 192.168.11.1: icmp_seq=4 ttl=63 time=23.4 ms
--- 192.168.11.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 3.805/10.596/23.366/7.956 ms出力からはパケット損失の有無や RTT の最小/平均/最大/標準偏差が分かります。
Traceroute
ルータ群を一つずつあぶり出すには、IPヘッダの TTL(Time-to-Live) フィールドを利用します。TTL は「経由できるルータの最大数(ホップ数)」を示し、ルータはパケットを転送する前に TTL を1減らします。TTL が 0 になったパケットはそのルータで破棄され、ルータは ICMP Time Exceeded(ICMP Type 11) を送ってくれます。これを利用して、各ホップのルータから応答を引き出していくのが traceroute の仕組みです。(ここでの “time” は秒ではなくホップ数を意味します。)
ただし、すべてのルータが応答するわけではありません。応答を返さない(ICMP をブロックしている)ルータも存在します。また、ISP 内部のプライベートIPを返すルータや、応答として公開IPを表示するルータがあり、その場合はドメイン名の逆引きや地理的な手がかりを得られることがあります。もちろん、ICMP 自体がブロックされると Time Exceeded が届かないため経路が分からない場合もあります。
下は traceroute example.com の実行例です。* * * はそのホップで応答が得られなかったことを示します。経路はコマンドを再実行するたびに変わる可能性があります。
user@TryHackMe$ traceroute example.com
traceroute to example.com (93.184.215.14), 30 hops max, 60 byte packets
1 _gateway (192.168.66.1) 4.414 ms 4.342 ms 4.320 ms
2 192.168.11.1 (192.168.11.1) 5.849 ms 5.830 ms 5.811 ms
3 100.104.0.1 (100.104.0.1) 11.130 ms 11.111 ms 11.093 ms
4 10.149.1.45 (10.149.1.45) 6.156 ms 6.138 ms 6.120 ms
5 * * *
6 * * *
7 * * *
8 172.16.48.1 (172.16.48.1) 5.667 ms 8.165 ms 6.861 ms
9 ae81.edge4.Marseille1.Level3.net (212.73.201.45) 50.811 ms 52.857 ms 213.242.116.233 (213.242.116.233) 52.798 ms
10 NTT-level3-Marseille1.Level3.net (4.68.68.150) 93.351 ms 79.897 ms 79.804 ms
11 ae-9.r20.parsfr04.fr.bb.gin.ntt.net (129.250.3.38) 62.935 ms 62.908 ms 64.313 ms
12 ae-14.r21.nwrknj03.us.bb.gin.ntt.net (129.250.4.194) 141.816 ms 141.782 ms 141.757 ms
13 ae-1.a02.nycmny17.us.bb.gin.ntt.net (129.250.3.17) 145.786 ms ae-1.a03.nycmny17.us.bb.gin.ntt.net (129.250.3.128) 141.701 ms 147.586 ms
14 ce-0-3-0.a02.nycmny17.us.ce.gin.ntt.net (128.241.1.14) 148.692 ms ce-3-3-0.a03.nycmny17.us.ce.gin.ntt.net (128.241.1.90) 141.615 ms ce-0-3-0.a02.nycmny17.us.ce.gin.ntt.net (128.241.1.14) 148.168 ms
15 ae-66.core1.nyd.edgecastcdn.net (152.195.69.133) 141.100 ms ae-65.core1.nyd.edgecastcdn.net (152.195.68.133) 140.360 ms ae-66.core1.nyd.edgecastcdn.net (152.195.69.133) 140.638 ms
16 93.184.215.14 (93.184.215.14) 140.574 ms 140.543 ms 140.514 ms
17 93.184.215.14 (93.184.215.14) 140.488 ms 139.397 ms 141.854 ms補足メモ
-
セキュリティ面:ICMPは診断に有用ですが、攻撃者による情報収集(ネットワーク探索やDoSの補助)にも使われるため、ファイアウォールで制御することが多いです。
-
オプション:
tracerouteはプロトコル(ICMP / UDP / TCP)、パケットサイズ、最大ホップ数など多くのオプションを持ち、状況に応じて使い分けられます(例:ファイアウォールでICMPがブロックされている場合はTCPトレーサートを試す等)。
Answer the questions below
Using the example images above, how many bytes were sent in the echo (ping) request?
40
Which IP header field does the traceroute command require to become zero?
TTL
Routing
下記のネットワーク図を考えてみましょう。わずか3つのネットワークしかありませんが、インターネットはどのようにして Network 1 から Network 2 や Network 3 にパケットを届けるのでしょうか? これは単純化した図ですが、Network 1 と Network 2・3 を相互に接続するにはアルゴリズムが必要になります。
複雑なネットワークにおける経路選択
実際のインターネットは何百万ものルーターと何十億ものデバイスから成り立っています。下記の例はインターネットのごく一部を示したものです。
モバイルユーザーがWebサーバに到達できるのは、経路上の各ルーターが適切なリンクを選んでパケットを転送するからです。
もちろん、モバイルユーザーからWebサーバに至る経路は複数存在します。そのため、ルーターには「どのリンクを使うか」を判断するための ルーティングアルゴリズム が必要です。
代表的なルーティングプロトコル
このルームの範囲外なのでアルゴリズムの詳細は扱いませんが、代表的なルーティングプロトコルを紹介しておきます。
-
OSPF(Open Shortest Path First)
ネットワークトポロジーの情報をルーター同士で共有し、最も効率的な経路を計算するプロトコル。ルーターはリンクやネットワークの状態を更新し合うことで全体の地図を持ち、最適な経路を判断できます。 -
EIGRP(Enhanced Interior Gateway Routing Protocol)
Cisco独自のプロトコルで、複数のルーティング手法を組み合わせたもの。ルーターは到達可能なネットワークとそのコスト(帯域幅や遅延など)を共有し、最も効率的な経路を選択します。 -
BGP(Border Gateway Protocol)
インターネットの基幹的なルーティングプロトコル。ISPなど異なるネットワーク間で経路情報を交換し、データを複数ネットワークにまたがって効率的に転送できるようにします。インターネット全体の疎通を担う極めて重要な役割を持ちます。 -
RIP(Routing Information Protocol)
シンプルなプロトコルで、小規模ネットワークで利用されます。ルーター同士が「到達可能なネットワーク」と「そこに至るまでのホップ数」を共有し、最もホップ数の少ない経路を選択します。
Answer the questions below
Which routing protocol discussed in this task is a Cisco proprietary protocol?
EIGRP
NAT
Networking Concepts のルームで説明した通り、IPv4 で扱えるアドレス数は最大約40億個です。しかし、インターネットに接続する機器(パソコンやスマートフォンから、防犯カメラ、洗濯機まで)が爆発的に増加した結果、IPv4 アドレス枯渇は避けられないものでした。その解決策のひとつが NAT(Network Address Translation) です。
NATの基本的な考え方
NAT の発想は「1つのパブリックIPアドレスを使って、多数のプライベートIPアドレスにインターネット接続を提供する」というものです。
例えば、20台のコンピュータがある会社を考えてみましょう。NATを使えば、20個のパブリックIPを契約する代わりに、1つのパブリックIPだけで全台をインターネットに接続できます。
(厳密には技術的制約から2つのパブリックIPを確保する必要がありますが、それでも32台分をカバーできるので、30個分のパブリックIPを節約できます。)
NATとルーティングの違い
通常のルーティングは、宛先ホストまでパケットを自然に届ける仕組みです。
一方、NAT対応ルーターは「どの内部ホストがどの外部接続を使っているか」を追跡する必要があります。そのため、内部アドレスと外部アドレスの対応関係を記録した 変換テーブル(Translation Table) を保持します。
-
内部ネットワーク:プライベートIPアドレス帯を使用
-
外部ネットワーク:パブリックIPアドレスを使用
NATの仕組み(例)
次の例では、複数のデバイスが NAT 対応ルーター経由でインターネットにアクセスしています。
-
ノートPCが Web サーバと接続を確立する
-
ノートPC視点では
192.168.0.129:15401から接続開始 -
Web サーバ視点では
212.3.4.5:19273から接続されたように見える
このときルーターは、内部IPとポート番号を外部IPとポート番号に対応付け、変換テーブルに保存します。外部のサーバには変換後のアドレスしか見えません。
NAT ルーターがこのアドレス変換をシームレスに行うことで、限られたパブリックIPを効率的に使い、IPv4アドレス枯渇を回避できるのです。
Answer the questions below
Closing Notes
このルームでは、日常的に直接あるいは間接的に利用しているさまざまなプロトコルを紹介しました。扱った内容は以下の通りです。
-
ICMP
-
DHCP
-
ARP
-
NAT
-
Routing
普段インターネットを利用していると、これらの略語に出会うことはほとんどありません。
しかし、これらのプロトコルこそが、ネットワークを正しく機能させるための基盤となっています。








