ソフトウェアデザイナー - コンピュータネットワークのメモ

📢 この記事は gemini-2.5-flash によって翻訳されました

画像リンクを見れば、これが2023年4月のメモだってすぐわかると思う。ずっと公開してなかったのは、ほとんど知識点の羅列って感じで、記事って形式じゃなかったからなんだ。でも、やっぱりメモはメモだし、たまに調べたい時とかブログで直接見る方が便利だよね。

1. ネットワーク機器

層機器ブロードキャストドメインの分離衝突ドメインの分離
物理層リピーター / ハブ××
データリンク層ブリッジ / スイッチ×√
ネットワーク層ルーター√√

物理層の相互接続機器

物理層の相互接続機器には、リピーター (Repeater) とハブ (Hub) があるよ。

  1. リピーター

​ 物理層でLANセグメントの相互接続を実現するもので、LANセグメントの長さを拡張するために使うんだ。

  1. ハブ

​ ハブは特殊なマルチポートリピーター(多ポートリピーター)だと考えられてて、信号増幅機能も持ってるんだよ。

データリンク層の相互接続機器

データリンク層の相互接続機器には、ブリッジ (Bridge) とスイッチ (Switch) があるね。

  1. ブリッジ

​ ブリッジは2つのLANセグメントをつなぐために使うよ。

  1. スイッチ

​ スイッチは多ポートのブリッジなんだ。

ネットワーク層の相互接続機器

ルーター (Router) はネットワーク層の相互接続機器で、論理的に分離された複数のネットワークをつなぐために使うんだ。

アプリケーション層の相互接続機器

ゲートウェイ (Gateway) はアプリケーション層の相互接続機器だよ。タイプが異なったり、プロトコルに大きな違いがあるネットワークをつなぐ時は、ゲートウェイ機器を選ぶ必要があるんだ。

2. プロトコルスイート

コンピュータネットワークのTCP/IPプロトコルスイート

プロトコルスイート

プロトコルスイート-2

3. TCPとUDP

インターネット層プロトコル IP

インターネット層(ネットワーク層)は、TCP/IPプロトコルスイート全体の要だよ。インターネット層で定義されているプロトコルは、IPの他にICMP、ARP、RARPなどの重要なプロトコルがいくつかあるんだ。

IPが提供するサービスは、通常、コネクションレス (Connectionless) で信頼性がない (Unreliable) と考えられているね。実際のところ、ネットワークの性能が良い状況では、IPで送信されたデータは問題なく目的地に届くんだ。

「コネクションレスな転送」っていうのは、ターゲットシステムがデータ受信の準備ができたことを確認する前にデータを送信することだよ。これと対照的なのが、コネクション指向 (Connection Oriented) の転送(TCPとかね)で、このタイプの転送では、アプリケーション層のデータ転送の前に、送信元と送信先の間でスリーウェイハンドシェイクが必要になるんだ。

信頼性のないサービスっていうのは、ターゲットシステムがパケットの受信成功を確認しないってこと。IPは、できるだけデータ転送を成功させようと努力するだけなんだ。でも、必要に応じて、上位層プロトコルがパケットが確実に届いたことを保証するための追加サービスを実装しないといけないんだよ。

IPはコネクションレスで信頼性のないサービスしか提供しないから、エラー検出やフロー制御みたいなサービスは他の各層プロトコルに任されているんだ。これがTCP/IPが効率的に動作する重要な理由の一つなんだよ。

トランスポート層プロトコル TCP

TCP (Transmission Control Protocol, 伝送制御プロトコル) は、TCP/IPプロトコルスイートの中で一番大事なプロトコルの一つなんだ。IPが提供する信頼性のないデータサービスをベースにして、アプリケーションに信頼性があって、コネクション指向の、全二重のデータ転送サービスを提供してくれるんだよ。

信頼性のある転送、コネクション管理、エラーチェックと再送、フロー制御、輻輳制御、ポートアドレス指定

そのうちフロー制御では、可変サイズのスライディングウィンドウプロトコルが使われているんだ。

TCPを使って送信元ホストと宛先ホスト間でコネクションの確立や切断を行うとき、確立と切断が成功したことを確認するために、どちらもスリーウェイハンドシェイクが必要になるんだ。

TCP-接続確立のスリーウェイハンドシェイク

トランスポート層プロトコル UDP

ユーザーデータグラムプロトコル (User Datagram Protocol, UDP) は、信頼性がなく、コネクションレスなプロトコルで、アプリケーションプロセス間の通信を保証してくれるんだ。同じトランスポート層にあるコネクション指向のTCPと比べると、UDPはコネクションレスなプロトコルで、エラー検出機能はずっと弱いよ。簡単に言うと、TCPは信頼性の提供に役立ち、UDPは高速転送に役立つってこと。例えば、インタラクティブなセッションをサポートする必要があるアプリケーション(FTPとかね)はTCPを使うことが多いし、自分でエラー検出したり、エラー検出が不要なアプリケーション(DNS、SNMPとか)はUDPを使うことが多いんだ。

UDPプロトコルソフトウェアの主な役割は、UDPメッセージをアプリケーション層に見せること。失われたりエラーになったデータメッセージを再送したり、受信した順不同のIPデータグラムを並べ替えたり、重複したIPデータグラムを削除したり、受信したデータグラムを確認したり、コネクションの確立や終了を担当したりはしないんだ。これらの問題は、UDPを使って通信するアプリケーションが処理する責任があるんだよ。

TCPは信頼性のあるデータ転送サービスを提供してくれるんだけど、それは通信量を犠牲にして実現しているんだ。つまり、同じタスクを完了するために、TCPはより多くの時間と通信量を必要とするってこと。これはネットワークが信頼できない時には、時間を犠牲にしてネットワークの信頼性を得るのが有効だけど、ネットワークが非常に信頼できる状況では、UDPを採用すれば通信量の無駄はすごく小さくなるんだ。

4. SMTPとPOP3

Eメール(電子メール)は、コンピュータを使って情報をやり取りする電子的な手紙のことだよ。コンピュータネットワークの登場とともに現れて、ネットワークの通信手段を使って普通のメール情報のやり取りを実現しているんだ。一番広く使われているサービスの一つだね。

Eメールシステムはクライアント/サーバーモデルをベースにしてるよ。Eメールサーバーは主にSMTP(Simple Mail Transfer Protocol, 簡易メール転送プロトコル)を使ってるんだけど、このプロトコルはメールの情報の形式とその配信処理方法を記述していて、転送されるメールが正しくアドレス指定され、信頼性を持って転送されることを保証してくれるんだ。これはテキストベースのネットワークプロトコルで、非ASCIIテキストや非テキストの添付ファイルを送れないっていう欠点があるんだよね。どんどん発展するマルチメディア環境や、みんなが気にするメールのプライバシーの面では、その限界がより顕著になってるんだ。

その後、多目的インターネットメール拡張プロトコル (MIME) や、プライバシー強化メール保護プロトコル (PEM) などのいくつかのプロトコルが、SMTPの欠点を補ったんだ。SMTPは大規模なマルチユーザー、マルチタスクのOSで使われてて、PCで受信に使うのはすごく難しいんだよね。だから、TCP/IPネットワーク上のほとんどのメール管理プログラムは、メール送信にSMTPを使って、ユーザーがすぐに取り出せなかったメールの保管にはPOP(Post Office Protocol, よく使われるのはPOP3)を使ってるんだ。

POPプロトコルにはPOP2とPOP3の2つのバージョンがあるよ。現在使われているPOP3は、SMTPと一緒に使うこともできるし、単独でメールの送受信に使うこともできるんだ。POPプロトコルはシンプルな純粋なテキストプロトコルで、転送はEメール全体を単位として行われるから、部分的な転送はできないんだ。

簡易メール転送プロトコルと、メール受信に使うPOP3は、どちらもTCPポートを使ってるんだ。SMTPで使うポート番号は25番、POP3で使うポート番号は110番だよ。

5. ARPとRARPとDHCP

ARPとRARP

アドレス解決プロトコル (Address Resolution Protocol, ARP) と逆アドレス解決プロトコル (RARP) は、インターネット層(ネットワーク層)にあるもう一つの重要なプロトコルなんだ。ARPの役割はIPアドレスを物理アドレスに変換することで、RARPの役割は物理アドレスをIPアドレスに変換することだよ。

ネットワーク上のどんな機器でも、ホスト、ルーター、スイッチなどには全部固有の物理アドレスがあって、それはNIC(ネットワークカード)によって与えられるんだ。それぞれのNICは工場出荷時に異なる番号が振られてて、これはユーザーが買うNICがそれぞれ固有の物理アドレスを持ってるってこと。一方で、下位層プロトコルや物理アドレスの違いを隠すために、IPプロトコルはIPアドレスを使ってるから、データ転送の際にはIPアドレスと物理アドレスの相互変換が必ず必要になるんだ。

ARPを使ったIPアドレスから物理アドレスへの変換プロセスはこうだよ。コンピュータが他のどのコンピュータと通信する必要がある時、まずARPキャッシュを調べるんだ。もしARPキャッシュにそのIPアドレスがあれば、それに対応する物理アドレスを使って、必要な物理NICに直接データグラムを送るよ。もしARPキャッシュにそのIPアドレスがない場合、ARPはLAN上でブロードキャスト方式でARPリクエストパケットを送信するんだ。

もしLAN上のIPアドレスとあるコンピュータのIPアドレスが一致したら、そのコンピュータはARP応答メッセージを生成して、その情報の中に対応する物理アドレスが含まれているんだ。ARPプロトコルソフトウェアはIPアドレスと物理アドレスの組み合わせを自分の高速キャッシュに追加して、これでデータ通信を開始できるってわけ。

DHCP

DHCP(Dynamic Host Configuration Protocol, 動的ホスト設定プロトコル)の機能は、IPアドレスを集中的に管理・割り当てて、ネットワーク環境内のホストがIPアドレス、ゲートウェイアドレス、DNSサーバーアドレスなどの情報を動的に取得できるようにすることだよ。あと、アドレスの利用率を向上させることもできるんだ。

DHCPクライアントはDHCPサーバーから、自身のIPアドレス、DNSサーバーアドレス、DHCPサーバーアドレス、デフォルトゲートウェイのアドレスなんかの情報を取得できるんだ。

Windowsの無効なアドレス:169.254.x.x

Linuxの無効なアドレス:0.0.0.0

168.254.x.xは、WindowsシステムがDHCP情報のリースに失敗した時に、クライアントに自動で割り当てるIPアドレスなんだ。

6. IPアドレスとサブネットマスク

IPアドレス

インターネットアドレスは名前で記述されるから、このアドレスの表現方法は理解しやすく、覚えやすいんだ。実際には、インターネット内のホストアドレスはIPアドレスで一意に識別されるよ。これはインターネットで使われるネットワークプロトコルがTCP/IPプロトコルだからで、そのため各ホストはIPアドレスで識別されなきゃいけないんだ。

それぞれのIPアドレスは256より小さい4つの数字で構成されてて、数字の間は「.」で区切られているんだ。インターネットのIPアドレスは全部で32ビット、4バイトだよ。表示形式は2種類あって、バイナリ形式と10進形式。バイナリ形式はコンピュータが認識する形式で、10進形式はバイナリ形式を「翻訳」したものなんだ。主に使いやすさや理解のしやすさのためだね。例えば、10進IPアドレスの129.102.4.11は、バイナリの10000001 01100110 00000100 00001011と同じだけど、明らかにドット付き10進形式で表現する方がずっと便利だよね。

ドメイン名とIPアドレスは一対一で対応していて、ドメイン名は覚えやすくて使いやすいから、かなり広く使われているんだ。ユーザーがインターネット上の特定のコンピュータと情報をやり取りする時は、ドメイン名を使うだけで良くて、ネットワークが自動的にそれをIPアドレスに変換してそのコンピュータを見つけてくれるんだよ。

インターネットのアドレスは、Aクラス、Bクラス、Cクラス、Dクラス、Eクラスの5種類に分けられるんだ。IPアドレスの中で、すべて0はネットワークを表し、すべて1はブロードキャストを表すよ。

各アドレスクラスの割り当て方式

  • Aクラスのネットワークアドレスは1バイト(8ビット)を占めてて、最上位ビットを0と定義してこのタイプのアドレスを識別するんだ。残りの7ビットが本当のネットワークアドレスで、1〜126個のネットワークをサポートしてる。後ろの3バイト(24ビット)はホストアドレスで、$2^{24}-2$個のエンドポイントのアドレス指定を提供しているよ。

    Aクラスのネットワークアドレスの最初のバイトの10進値は000〜127だよ。

  • Bクラスのネットワークアドレスは2バイトを占めてて、最上位2ビットを10としてこのタイプのアドレスを識別するんだ。残りの14ビットが本当のネットワークアドレスで、ホストアドレスは後ろの2バイト(16ビット)を占めるから、Bクラスの全てのアドレスは ($2^{14}-2$)($2^{16}-2$) = 16382×65534個になるよ。

    Bクラスのネットワークアドレスの最初のバイトの10進値は128〜191だよ。

  • Cクラスのネットワークアドレスは3バイトを占めてて、これが一番広く使われているインターネットアドレスだよ。最上位3ビットを110としてこのタイプのアドレスを識別するんだ。残りの21ビットが本当のネットワークアドレスだから、Cクラスのアドレスは$2^{21}-2$個のネットワークをサポートしてる。ホストアドレスは最後の1バイトを占めてて、各ネットワークは最大$2^8-2$個のホストを持つことができるよ。

    Cクラスのネットワークアドレスの最初のバイトの10進値は192〜223だよ。

  • Dクラスアドレスは比較的新しいタイプ。識別ヘッダは1110で、マルチキャストに使われるんだ。例えば、ルーターの変更とかね。

    Dクラスのネットワークアドレスの最初のバイトの10進値は224〜239だよ。

  • Eクラスアドレスは実験用に予約されていて、その識別ヘッダは1111だよ。

    Eクラスのネットワークアドレスの最初のバイトの10進値は240〜255だよ。

ネットワークソフトウェアとルーターは、サブネットマスク (Subnet Mask) を使って、パケットがネットワーク内部にだけ留まるのか、それとも他の場所へルーティングされるのかを識別するんだ。あるフィールド内で、1が出現することは、そのフィールドがネットワークアドレスの全部または一部を含んでいることを示し、0はホストアドレスの位置を示すよ。例えば、一番よく使われるCクラスアドレスは、最初の3バイトをネットワークの識別に使って、最後の1バイト(8ビット)をホストの識別に使ってる。だから、サブネットマスクは255.255.255.0なんだ。

デフォルトサブネットマスク

IPv6の紹介

IPv6は128ビットものアドレス空間を持ってて、IPv4のアドレス不足問題を完全に解決できるんだ。それ以外にも、IPv6は階層型アドレスモード、効率的なIPパケットヘッダ、サービス品質、ホストアドレスの自動設定、認証と暗号化など、たくさんの技術を採用してるよ。

7. Windowsコマンド

ipconfig/release:DHCPクライアントが手動でIPアドレスを解放する

ipconfig/flushdns:ローカルDNSキャッシュの内容をクリアする

ipconfig/displaydns:ローカルDNSの内容を表示する

ipconfig/registerdns:DNSクライアントが手動でサーバーに登録を行う

ipconfig:すべてのネットワークアダプターのIPアドレス、サブネットマスク、デフォルトゲートウェイの値を表示する

ipconfig/all:DHCPサービスが起動しているかどうかも含め、すべてのネットワークアダプターの完全なTCP/IP設定情報を表示する

ipconfig/renew:DHCPクライアントが手動でサーバーに更新要求(IPアドレスの再申請)を行う

8. ルーティング

Windows Server 2003のルーティングタイプは5種類あるんだ。WindowsサーバーがIPデータパケットを受け取った時、まずホストルートを検索して、次にネットワークルート(直接接続ネットワークとリモートネットワーク)を検索するよ。これらのルート検索が失敗した時に、最後にデフォルトルートを検索するんだ。

ルーティングタイプ

各種ルーティング情報源の管理距離は以下の通りだよ。

ルーティング情報源の管理距離

もしルーターが複数のルーティングプロトコルから転送された、ある宛先に関する複数のルート情報を受け取った場合、それぞれのルートの管理距離を比較して、管理距離が小さいルーティング情報源が提供するルート情報を採用するんだ。


yexca-236