コンピュータネットワーク
かつては、コンピュータは単体で使われており、データは個々のコンピュータが持っていたため、それぞれで修正を行う必要があった。
コンピュータネットワークが考え出されたことにより、複数のコンピュータを互いに接続し、個々のコンピュータが持つ情報を共有したり、送ったりすることができるようになった。
コンピュータネットワークは、LANやWANなどに分類される。
LAN(ラン / Local Area Network): フロア内や、1つの建物や大学のキャンパスなど、限られた狭い地域の中でのネットワーク。
WAN(ワン / Wide Area Network): 離れた地域のコンピュータやLAN同士を接続した、広範囲に及ぶネットワーク。
TCP/IPプロトコルスイート
コンピュータネットワークで最もよく使われるプロトコル。
TCP/IPとは、2つのプロトコルTCPとIPを指す場合もあれば、インターネットを構築する上で必要なプロトコル(UDP、TELNET、FTP、HTTPなど)の総称としても使われる場合もある。
TCPやIPおよびその周辺の主要なプロトコル群をまとめて、TCP/IPプロトコルスイートと呼ぶ。
OSI参照モデル
ISO(国際標準化機構)により標準化された通信体系をOSI(Open Systems Interconnection/開放型システム間相互接続)と呼ぶ。
通信プロトコルの標準化により、コンピュータのハードウェアやOSの違いを意識することなく、ネットワークに接続されたコンピュータと通信できるようになった。
OSI参照モデルは、通信に必要な機能を7つの階層に分け、ネットワークプロトコルを単純化するためのモデル。
各階層は、下位層(物理層~)から特定のサービスを受け、上位層(~アプリケーション層)に特定のサービスを提供する。
OSI7階層モデル | 機能 | 代表的なプロトコル |
---|---|---|
7. アプリケーション層 | 利用されるアプリケーションの中で通信に関係する部分を定めている。 ファイル転送や電子メール、遠隔ログイン(仮想端末)などを実現するためのプロトコルがある。 |
DNS、HTTP、URI、SSH、Telnet、FTP、SMTP アプリケーションごとのプロトコル。 |
6. プレゼンテーション層 | アプリケーションが扱う情報を通信に適したデータ形式にしたり、また下位層から来たデータを上位層が処理できるデータ形式にしたりと、データ形式に関する責任を持つ。 | MIME、HTML、FTP、DSMTP、Telnet 文字列や画像、音声などの情報の表現の違いを吸収する。 |
5. セッション層 | コネクション(データの流れる論理的な通信路)の確立や切断、転送するデータの切れ目の設定など、データ転送に関する管理を行う。 | TLS/SSL コネクションんをいつ確立していつ切断するか?いくつ張るか? |
4. トランスポート層 | 宛先のアプリケーションにデータを確実に届ける役目がある。通信を行う両端のノードだけで処理され、途中のルーターでは処理されない。 | TCP、UDP、SCTP データの抜けがないか? |
3. ネットワーク層 | 宛先までデータを届ける役割を持つ。宛先は複数のネットワークがルーターでつながった先にある場合もある。 そのためアドレス体型決めや、どの経路を使うかなどの経路選択の役割を持つ。 |
IP、ICMP、ARP どの経路を通って宛先まで届けるか? |
2. データリンク層 | 物理層で直接接続されたノード間、たとえば1つのイーサネットに接続された2つのノード間での通信を可能にする。 0と1の数字の列を意味のあるかたまり(フレーム)に分けて、相手に伝える(フレームの生成と受信)。 |
Ethernet、PPP フレームとビット列の変換。 |
1. 物理層 | ビットの列(0と1の数字の列)を電圧の高低や光の点滅に変換したり、逆に電圧の高低や光の点滅をビットの列に変換したりする。 | 電話線、ハブ、無線、光ケーブル ビット列と信号の変換。 コネクタやケーブルの形状。 |
TCP/IP階層モデル
OSI参照モデルとよく似ているが、
OSI参照モデルが「通信プロトコルに必要な機能は何か」を中心に考えてモデル化されているのに対し、
TCP/IP階層モデルは「プロトコルをコンピュータに実装するにはどのようにプログラミングしたらよいか」を中心に考えてモデル化されている。
TCP/IP階層モデル | 代表的なプロトコル | |
---|---|---|
4. アプリケーション層 | DNS、HTTP、URI、MIME、HTML、FTP、DSMTP、Telnet、SSH、Telnet、FTP、SMTP | アプリケーションプログラム |
3. トランスポート層 | TCP、UDP、SCTP | オペレーティングシステム |
2. インターネット層 | IP、ICMP、ARP | オペレーティングシステム |
1. ネットワークインタフェース層 | Ethernet、PPP | デバイスドライバとネットワークインタフェース |
(ハードウェア) | 電話線、ハブ、無線、光ケーブル | デバイスドライバとネットワークインタフェース |
ネットワークを構成する機器とその役割
実際にネットワークを構築するときに必要になる、さまざまなケーブルや機器。
とくに、コンピュータ同士を接続するためのハードウェア。
機器 | 例 | 役割 |
---|---|---|
ネットワークインタフェース(Network Interface) | 有線LAN(NIC)、無線LAN(Wi-Fi)、USBポート | コンピュータをネットワークに接続するための装置 |
リピーター(Repeater) | リピーターハブ | ネットワークを物理層で延長する装置 |
ブリッジ(Bridge) / レイヤ2スイッチ |
スイッチングハブ | ネットワークをデータリンク層で延長する装置 |
ルーター(Router) / レイヤ3スイッチ |
ルーター(ブロードバンドルーター、CPE) | ネットワーク層によってパケットを転送する装置 |
レイヤ4-7スイッチ | ロードバランサー | トランスポート層より上の情報でトラフィックを処理する装置 |
OSI参照モデルの各層の代表的なプロトコル
7. アプリケーション層
DNS(Domain Name System)
ドメイン名とIPアドレスの対応関係を管理し、名前解決を行うためのシステム。
インターネットの電話帳に相当する。
トランスポートプロトコルとしてUDPを使用する。
DNSは、ユーザーがブラウザにウェブサイトのドメイン名を入力した時に、Webブラウザが対話する。
名前解決
ドメイン名に対応するIPアドレスを探し出す仕組みのこと。
「問い合わせ」と「応答」によるやりとり。
問い合わせには、 「ドメイン名」と「種類(タイプ)」が指定される。
例: 「example.jp」の「IPアドレス」
ゾーン
DNSは、委任によって、ドメイン名に対応する形で管理範囲を階層化している。
-
ゾーン
- 委任によって管理を任された範囲(例: ルートゾーン、jpゾーン、example.jpゾーン、abc.example.jpゾーン)のこと。
-
ネームサーバー
- それぞれのゾーンの管理者が、ゾーンの情報を管理するサーバーのこと。
DNSの3つの構成要素
1. スタブリゾルバ(DNSクライアント)
- クライアントサイドのホストやソフトウェア。
-
名前解決の要求
- フルリゾルバに名前解決を要求する。
- Webブラウザは、スタブリゾルバのAPIを使用して、ドメイン名に対応するIPアドレスを調べる。
- Webブラウザは、スタブリゾルバからIPアドレスを受け取ると、そのIPアドレスを使用してWebサーバーにアクセスする。
2. フルサービスリゾルバ(キャッシュDNSサーバー)
-
名前解決の実行
- スタブリゾルバから送られる名前解決の要求を受けて、権威サーバーに対して問い合わせを行い、結果をスタブリゾルバに返す。
-
DNSキャッシュ
- 以前に名前解決されたDNS問い合わせの結果を一時的に保存しておくことで、同じドメイン名に対する繰り返しのクエリを高速に解決でき、インターネットのトラフィックを軽減する。
- キャッシュされたデータの有効期限(TTL / Time To Live)が切れた場合、新たなDNS問い合わせを行う。
3. 権威サーバー(ネームサーバー)
- フルサービスリゾルバに、必要な情報を提供する。
- ドメイン名に関連するIPアドレスやサブドメイン、メールサーバーの情報など、さまざまなDNSレコードを管理している。
- Amazon Route 53 は主に権威ネームサーバーに相当する。
- 以下の2つは、特別な役割を担う権威サーバー。
-
ルートネームサーバー(Root nameserver)
- ルートゾーンを管理する権威サーバー。
- フルサービスリゾルバに、「トップレベルドメイン(TLD)のネームサーバー」への委任情報を返す。
- インターネット上のドメイン名階層の最上位(
.
)に位置する。 - 世界中に分散して存在し、13個のIPアドレスで表現される。
- インターネット上のドメイン名階層の最上位(
-
TLDネームサーバー(Top Level Domain nameserver)
- トップレベルドメイン(例:
.com
、.org
、.jp
など)のゾーンを管理する権威サーバー。 - フルサービスリゾルバに、「特定のドメイン名のネームサーバー」への委任情報を返す。
- トップレベルドメイン(例:
-
ルートネームサーバー(Root nameserver)
DNSレコード(リソースレコード)
DNSレコードは、DNSがドメインのIPアドレスを名前解決したときに、権威サーバーが返す応答の一部。
DNSレコードの構成要素
$ dig yokoto.net. ns @1.1.1.1
...
;; QUESTION SECTION:
;yokoto.net. IN NS
;; ANSWER SECTION:
yokoto.net. 3600 IN CAA 0 issue "amazon.com"
タイプ | 内容 |
---|---|
ドメイン名 | DNSクエリ(問い合わせ)で指定したドメイン名 |
TTL | リソースレコードをキャッシュしても良い時間が秒単位で入る |
クラス | ネットワークの種類で、インターネットを意味する「IN」が入る |
タイプ | DNSレコードのタイプ参照 |
データ | タイプによって異なる、リソースレコードのデータが入る |
DNSレコードのタイプ
タイプ | 内容 | 例 |
---|---|---|
A(Address) | ドメインの IPv4アドレス を指定する | example.com -> 192.0.2.1 |
NS(Name Server) | ゾーンのDNSクエリを処理する 権威サーバー(ネームサーバー) のホスト名を指定する | example.com -> ns1.example.com |
CNAME(Canonical Name) | ドメインの 別名(エイリアス) を設定する | www.example.com -> example.com |
MX(Mail Exchanger) | ドメインに送られるメールを処理する 受信側メールサーバー を指定する | example.com -> mail.example.com |
AAAA(Quad-A) | ドメインの IPv6アドレス を指定する | example.com -> 2001:0db8:85a3:0000:0000:8a2e:0370:7334 |
TXT(Text) | ドメインの SPFレコード や任意のテキスト情報を指定する | example.com -> "v=spf1 include:_spf.google.com ~all" |
HTTP(HyperText Transfer Protocol)
Webシステムにとって最も重要なアプリケーション層のプロトコル。
HTML、CSS、JavaScript、画像、音声、動画などの送受信を、WebブラウザとWebサーバー間で行うためのプロトコル。
HTTP/2 で、ネットワークの混雑を解決する1つの接続での 並列処理 や ヘッダ圧縮 などのネットワークリソース効率化が実現された。
また、HTTP/1.1、HTTP/2では、トランスポートプロトコルとしてTCPを使用するが、
HTTP/3 では、より多数のクライアント接続をサポートし、TCPの代わりに UDP を使用する。
以下のような特徴を持つ。
- クライアント/サーバーモデル
- クライアントがサーバーに情報を要求し、サーバーがクライアントに情報を送信する。
- ステートレス
- HTTPサーバーは、HTTPクライアントの状態を保持しない。
- リクエストメソッド
- GET、POST、PUT、DELETE等
- ステータスコード
- 成功 2xx、リダイレクト 3xx、クライアントエラー 4xx、サーバーエラー5xx
- HTTPヘッダ
- Content-Type、認証、キャッシュなどのメタデータ
リクエストの例:
https://uchy.me/tools/request_headers.html
Google Chrome Developer toolsのNetworkタブを開いた状態でリクエストを送ってみることで確認することもできる。
レスポンスの例:
https://so-zou.jp/web-app/network/http-response/?url=www.yahoo.co.jp
SMTP(Simple Mail Transfer Protocol)
電子メールを配送するアプリケーションプロトコル。
MTA(Mail Transfer Agent) / SMTPサーバー
MTAは、SMTPを利用してメールを送受信するソフトウェアのこと。
SMTPサーバーは、MTAの一種であり、SMTPを利用してメールを送受信するサーバーのこと。
SMTPサーバーは、メールの送信に特化した 送信用メールサーバー と、受信を行う 受信メールサーバー に分けられる。
以下のような種類がある。
-
Postfix
- 最もポピュラーなオープンソースのMTA。
- 送信元メールサーバー、受信メールサーバーの両方の役割を持つ。
-
smtp.gmail.com
- Gmailの送信用SMTPサーバー。
- 個人ユーザーまたは小規模なビジネスが一般的なメール送信のために使用する。
- Gmail自体は、受信メールサーバーの役割を持つ。
-
Amazon SES
- AWSが提供する送信用SMTPサーバー。
-
SendGrid
- 企業や開発者が大量のメールを送信するために使用される送信用SMTPサーバー。
- カスタマイズ性やスケーラビリティに優れる。
- 開発初期は、Postfixをカスタマイズして使っていた。
迷惑メール対策
SMTPには送信者を認証するための機能がなく、迷惑メールの送信に自分の送信用メールサーバーが使われてしまうことを防ぐためには、以下のような対策が取られる。
-
SMTP認証(SMTP Authentication)
- メール送信時にSMTPサーバーで、 メールの送信元ユーザーの認証 を行うようにしたSMTPの拡張仕様。
-
SPF(Sender Policy Framework)
- 受信側メールサーバーが、以下を比較することによって 送信元のドメイン認証 をする仕組み。
- 受信したメールのヘッダに記載された送信元メールサーバーのIPアドレス
- メールの送信ドメイン(
gmail.com
,amazon.com
,qiita.com
など)にDNS問い合わせを行うことで取得できる、SPFレコードに登録された送信元メールサーバーのIPアドレス
-
DKIM(DomainKeys Identified Mail)
- 送信元メールサーバーで電子署名を付与し、受信側メールサーバーで電子署名を認証することで、送信元のドメイン認証 をする仕組み。
- 送信元メールサーバーで署名に使用する公開鍵をDNSサーバーに登録しておき、受信側メールサーバーが公開鍵を取得し署名を認証できるようにする。
-
DMARC(Domain-based Message Authentication, Reporting and Conformance)
- SPFやDKIMなど送信元ドメインを認証する仕組みにおいて、認証が失敗したときのメールの取り扱いポリシーを送信者がDNSサーバーに登録して公開する仕組み。
- 受信側メールサーバーは、認証に失敗した場合に送信者のポリシーによって取り扱いを決定したり、送信者へ認証に失敗したことを通知したりすることができる。
5. セッション層
TLS(Transport Layer Security)/SSL(Secure Sockets Layer)
TLSおよびその前身であるSSLは、通信を 暗号化 するためのプロトコル。
- 通信の暗号化が行われない場合のリスク
- 悪意のある人が通信の内容を覗き見することができてしまう。
HTTPS
- Webにおいて、TLS/SSLを使って、HTTP通信が暗号化されたプロトコル。
- 最初に公開鍵暗号方式を使用して、送信者と受信者が安全に共通鍵を共有できるようにし、
その後、データの送受信は共通鍵暗号方式を用いて暗号化処理が行われる。
証明書チェーン(Certificate Chain)
- ドメインと通信先のサーバーが一致することを検証(= ドメインを認証)する仕組み。
- 3階層のチェーンによって構成される。
-
ルート証明書
- 多くのブラウザは、OSに事前にインストールされている証明書を使用するが、Firefoxはブラウザ自体が持つ証明書を使用する。
- 認証局(CA / Certificate Authority)によって自己署名されている。
-
公開鍵 を含んでいる。
- 公開鍵は、中間CA証明書やサーバー証明書を検証するために使用される。
-
中間CA証明書
- ルート証明書によって署名されている。
- ルート証明書とサーバー証明書の間に位置する。
-
サーバー証明書
- 中間CA証明書によって署名されている。
- サーバー内に設定されている証明書。
- クライアント(Webブラウザ)は、この署名を検証することで、サーバーの正当性を検証する。
共通鍵暗号方式(対称暗号化)
- HTTPSでは、共通鍵暗号方式で、通信データの暗号化を行う。
- クライアントは共通鍵を使用してデータを暗号化し、サーバーは同じ共通鍵を使用してデータを復号化する。
- クライアントとサーバーは、共通鍵を事前に安全に共有する必要がある。
- メリット: 暗号化の計算量が少なく、高速。
- デメリット: 鍵の安全な配布が難しい。
公開鍵暗号方式(非対称暗号化)
- HTTPSでは、公開鍵暗号方式で、共通鍵の暗号化を行う。
- サーバーは、公開鍵とそれに対応する秘密鍵という、ペアになる2つの鍵を生成する。
- クライアントは、サーバーから提供された 公開鍵でデータを暗号化 する。
- サーバーは、その公開鍵に対応する自身の 秘密鍵でデータを復号化 できる。
- メリット: 暗号化の鍵の配布が容易であり、認証も可能。
- デメリット: 計算量が多く、通信速度が遅い。
TLSハンドシェイク
- (ClientHello / クライアントハロー)クライアントから、HTTPSでサーバーにアクセスする。
- (ServerHello / サーバーハロー)サーバーから、クライアントに応答する。
- (Certificate / 証明)サーバーは、認証局(CA)によって署名されたされた自身の「デジタル証明書」をクライアントに送信する。
証明書には、「公開鍵」が含まれる。
クライアントは、証明書の公開鍵を使用して、サーバーの身元を検証(認証)する。 - (Client Key Exchange / 鍵交換)クライアントは、プリマスターシークレットを生成し、公開鍵で暗号化してサーバーに送信する。
プリマスターシークレットは乱数情報で、マスターシークレットおよび共通のセッションキー(「共通鍵」)を生成するために使用される。 - (Change Cipher Spec)クライアントは、プリマスターシークレットを使用して、マスターシークレットを生成し、マスターシークレットから共通のセッションキー(共通鍵)を生成する。
クライアントは、サーバーへ暗号化通信の準備ができたことを知らせる。 - (Finished)クライアントは、ハンドシェイクが正しく完了したことと、通信が改ざんされていないことを確認する。
- (Change Cipher Spec)サーバーは、プリマスターシークレットを使用して、マスターシークレットを生成し、マスターシークレットから共通のセッションキー(共通鍵)を生成する。
サーバーは、クライアントへ暗号化通信の準備ができたことを知らせる。 - (Finished)サーバーは、ハンドシェイクが正しく完了したことと、通信が改ざんされていないことを確認する。
- 共通鍵暗号方式によって暗号化通信(TLS/SSLによるHTTPS通信)を行うことができる。
4. トランスポート層
基本用語
ポート番号
ネットワークアプリケーションやサービスを識別するために使用される、数値の識別子。
IPアドレスがネットワーク上のデバイスを一意に識別するのに対して、ポート番号はそのデバイス内で実行されている特定のアプリケーションやサービスを識別する。
これにより、複数のアプリケーションが同時に通信を行うことが可能になる。
ポート番号は、0から65535までの範囲で割り当てられており、以下の3つのカテゴリに分類される。
- ウェルノウンポート(0-1023)
- よく知られたサービスやプロトコルに割り当てられたポート番号。
- 例: HTTP(80番)、HTTPS(443番)、FTP(21番)、SSH(22番)など。
- よく知られたサービスやプロトコルに割り当てられたポート番号。
- 登録済みポート(1024-49151)
- 一般的なアプリケーションやサービスに割り当てられるポート番号。
- IANA(Internet Assigned Numbers Authority)によって管理される。
- ダイナミックポート(49152-65535)またはプライベートポート
- 通常、クライアントアプリケーションによって一時的に使用されるポート番号。
- アプリケーションが通信を開始する際に、利用可能なポート番号が動的に割り当てられる。
ソケット
アプリケーションがネットワークにアクセスするためのエンドポイント、インターフェイス。
アプリケーションがソケットを利用して通信相手の接続情報(IPアドレス、ポート番号、トランスポート層のプロトコル)を要求すると、OSによってTCP/IPによる通信が行われる。
- ソケットAPI
- socket()
- bind()
- listen()
- accept()
- connect()
- send()
- recv()
- close()
- ストリームソケット(TCPソケット)
- 信頼性のある接続指向の通信を提供する。
- データの到達と順序が保証され、エラー検出と再送制御が行われる。
- データグラムソケット(UDPソケット)
- コネクションレス型で信頼性の低い通信を提供する。
- データの損失や順序の入れ替わりが許容されるアプリケーションに適している。
3ウェイハンドシェイク
TCPのコネクション確立において、クライアントとサーバー間でシーケンス番号や確認応答を交換し、双方が通信準備ができていることを確認するプロセス。
- TCPは、クライアントからサーバーへのデータ通信前に、TCPヘッダだけからなるコネクション確立要求のパケット(SYNパケット)を送信して、サーバーからの確認応答を待つ。
- サーバーからSYNに対する確認応答(ACKパケット)とコネクション確立要求(SYNパケット)が送られてきた場合にはデータ通信が可能になる。
- 最後に、クライアントはサーバーからのSYNに対して、ACKを返す。
電話に例えると、1. もしもし、2. はい聞こえています、3. OKですね、というやりとりをしている状態になる。
- SYN: Synchronize Flag。コネクションの確立に使われる。シーケンス番号の初期化を行う。
- シーケンス番号は通し番号で、データの順序を示す。
- ACK: Acknowledgement Flag。確認応答番号のフィールドが有効であることを示す。
- 確認応答番号は次に受信すべきデータのシーケンス番号になっている。
- FIN: Fin Flag。コネクションを切断したいという意志を示す。通信を開始したいときはSYNを送信するが、通信を終了したいときはFINを送信する。
TCP(Transmission Control Protocol)
インターネット上で信頼性の高いデータ転送を行うためのプロトコル。
以下のような特徴を持つ。
- 信頼性がある
- 確認応答(ACK)と再送制御を使用してデータの正確な送受信を保証する。
- コネクション型
- クライアントとサーバー間でデータの送受信を行う前に、接続を確立する。
両者間で通信のパラメータを交換し、信頼性を確保できる。
- クライアントとサーバー間でデータの送受信を行う前に、接続を確立する。
- フロー制御
- 受信側のバッファが一杯にならないように、送信側のデータ送信速度を制御する。
受信側がデータを適切に処理できることを確保する。
- 受信側のバッファが一杯にならないように、送信側のデータ送信速度を制御する。
- 輻輳制御
- ネットワーク上の輻輳(送信要求がネットワークの処理能力を超えることによるパフォーマンス劣化)を検出し、送信速度を調整することで、ネットワークの効率を最適化し、安全性を維持する。
- シーケンス番号とポート番号
- シーケンス番号を使用して送信されるデータを順序付けし、正確な順序で再構築することができる。
- ポート番号を使用して、送信先と受信元のアプリケーションを識別する。
TCPの使用例
Web閲覧において機能するHTTPや、メールの配送に使われるSMTPが代表的な例。
ファイルのアップロード/ダウンロードに用いられるFTPもTCP上で動作する。
最近では、YouTubeなどの動画視聴サービスには一部でTCPが用いられている。
動画をリアルタイムで再生するのではなく、TCPでデータを少しずつダウンロードしながら再生することで動画の途切れをなくし、視聴者のストレスを解消することができる。
TCPの最適化
- 初期輻輳ウィンドウ(IW)の調整
- 初期輻輳ウィンドウ(TCPコネクションの開始時に送信できるデータ量)の値を適切に設定することで、コネクション開始時の輻輳制御を改善し、データ転送のパフォーマンスを向上させる。
- ウィンドウスケーリング
- 受信側が処理できるデータ量(ウィンドウサイズ)を増やすことで、ネットワーク帯域幅をより効率的に利用し、大容量データを高速に転送できるようにする。
- TCP Fast Open
- コネクションの確立とデータの送信を同時に行うことで、レイテンシを削減する。3ウェイハンドシェークによる遅延が軽減される。
- セレクティブACK(SACK)
- 受信側が欠落している(できるだけ少ない数の)パケットだけを通知することで、再送の効率を向上させる。
TCP最適化によるユーザーエクスペリエンスの改善 - net one
UDP(User Datagram Protocol)
インターネット上でデータを軽量かつ高速に転送するために使用されるプロトコル。
接続の確立やデータの到達確認が不要なため、オーバーヘッドが低く、効率的なデータ転送が可能。
- コネクションレス型
- データ送受信の前にクライアントとサーバー間で接続を確立する必要がなく、低遅延の通信が可能。
- 信頼性がない
- データの到達確認や再送制御を行わないため、データの欠損や順序の不整合が発生する可能性がある(ただし、アプリケーション層で信頼性を実現するような対応が考えられる)。
- 軽量性
- ヘッダーサイズが小さく、プロトコルのオーバーヘッドが低いため、データ転送にかかる負荷が軽減される。
UDPの使用例
リアルタイム通信(オンラインゲーム、VoIP)、ビデオストリーミング、DNS問い合わせなど、低遅延や高速転送が重要なアプリケーション。
3. ネットワーク層
基本用語
パケット
データを表す単位のことをパケットと呼ぶ。
パケットは、「ヘッダ」と「データ」から構成されている。
ヘッダにはパケットの送信元と送信先のアドレス、プロトコル情報、パケットの順序、エラーチェックなどの制御情報が含まれ、データとは上位のプロトコルに転送されるデータ本体のこと。
- 物理層
- ビット(10010111...)
- データリンク層
- フレーム
- MACヘッダを持ち、IPヘッダ、TCPヘッダ、HTTPヘッダ、データを含む。
- フレーム
- ネットワーク層
- IPデータグラム
- IPヘッダを持ち、TCPヘッダ、HTTPヘッダ、データを含む。
- IPデータグラム
- トランスポート層
- TCPセグメント、UDPパケット
- TCPヘッダを持ち、HTTPヘッダ、データを含む。
- TCPセグメント、UDPパケット
- セッション層
- データ
- HTTPヘッダを持ち、データを含む。
- データ
- プレゼンテーション層
- アプリケーション層
ルーター
インターネット上でデータパケットを適切な宛先に転送するためのネットワークデバイス。
ルーティングテーブルと呼ばれる経路制御表に基づいて最適な経路を選択し、パケットを次のホップ(ネットワークの一区間)へ送る。
ルーターはIPアドレスが付けられているが、ルーティング(経路制御)を行う機器であるという点で「ホスト」と区別される。
ホストとルーターを合わせてノードと呼ぶ。
NAT
NATとは、プライベートIPアドレスをパブリックIPアドレスに変換を行うこと。
NATデバイスはLAN(ローカルエリアネットワーク)内のデバイスからインターネットへの接続要求があると、その要求をパブリックIPアドレスに変換してインターネット上に送信する。
ルーターはNATデバイスの一つ。
IPアドレス
デバイスがネットワークに参加するときに動的かつ一意に割り当てられる識別子。
※ 静的に割り当てることもできる。
IPアドレス(IPv4アドレス)は32ビットの正整数値で表され、コンピュータの内部では2進数で処理されるが、
8ビットずつの4つの組に分け、
境目にピリオド(.)を入れて10進数にすることで、
人間に分かりやすいように表現する。
例:
10101100000101000000000100000001(32ビットの2進数)
↓
10101100.00010100.00000001.00000001(8ビットずつの境目にピリオドを入れた2進数)
↓
172.20.1.1(10進数)
IPアドレスのネットワーク部とホスト部
ネットワーク部(ネットワークアドレス)とホスト部(ホストアドレス)を設定すると、接続されているネットワーク全体で同じIPアドレスを持つコンピュータが1台しか存在しないように設定できる。
つまり、ユニークなIPアドレスを割り当てられるようになる。
- ネットワーク部
- ネットワークを特定する。
- データリンクのセグメントごとにユニークな値を割り当てる。
- 接続されている他のセグメントとは重複しないように設定する。
- 同じセグメントに接続されているホストやルーターのNICには、同じ値を設定する。
- ホスト部
- ネットワーク内におけるコンピュータを特定する。
- ネットワークのセグメント内でユニークな値を割り当てる。
例:
192.168.128.0/24のネットワークAに、
IPアドレス192.168.128.10/24が紐づけられたホストa
IPアドレス192.168.128.11/24が紐づけられたホストb
192.168.144.0/24のネットワークBに、
IPアドレス192.168.144.10/24が紐づけられたホストc
IPアドレス192.168.144.11/24が紐づけられたホストd
IPアドレスのCIDR表記とサブネットマスク表記
どちらも、IPアドレスのどこまでがネットワーク部なのかを示すための形式。
- CIDR(Classless Inter-Domain Routing)表記
- どこまでがネットワーク部なのかを「/ネットワーク部のビット数」と記述する。
- 例1:「192.168.1.0 ~ 192.168.1.255」の場合、ネットワーク部は192.168.1 = 24ビットなので、「192.168.1.0 /24」と記述する。
- 例2:「192.168.0.0 ~ 192.168.255.255」の場合、ネットワーク部は192.168 = 16ビットなので、「192.168.1.0 /16」と記述する。
- どこまでがネットワーク部なのかを「/ネットワーク部のビット数」と記述する。
- サブネットマスク表記
- どこまでがネットワーク部なのかを2進数の「1」をビット数分並べることで記述し、残りは「0」を記述する。
- 例1:「192.167.1.0 ~ 192.168.1.255」の場合、ネットワーク部は192.168.1 = 24ビットなので、「192.168.1.0 /255.255.255.0」と記述する。
※ 2進数の11111111.11111111.11111111.00000000は、10進数で255.255.255.0と表せる。 - 例2:「192.168.0.0 ~ 192.168.255.255」の場合、ネットワーク部は192.168 = 16ビットなので、「192.168.1.0 /255.255.0.0」と記述する。
- 例1:「192.167.1.0 ~ 192.168.1.255」の場合、ネットワーク部は192.168.1 = 24ビットなので、「192.168.1.0 /255.255.255.0」と記述する。
- どこまでがネットワーク部なのかを2進数の「1」をビット数分並べることで記述し、残りは「0」を記述する。
IPアドレス範囲をCIDR表記する場合、その範囲をCIDRブロックと呼ぶ。
IPv4アドレス vs IPv6アドレス
IPv6の登場背景は、主にIPv4の技術的な制約に対処するためであり、インターネットの成長とデバイス数の急激な増加に適応することが求められた。
- IPv4アドレス
- 32ビットで、4組の10進数(例:192.168.0.1)で表現される。2の32乗 = 約43億個のIPアドレスが利用可能。
- IPv6アドレス
- 128ビットで、8組の16進数(例:2001:0db8:85a3:0000:0000:8a2e:0370:7334)で表現される。約3.4 x 10の38乗個のIPアドレスが利用可能。
- IPsec(インターネット・プロトコル・セキュリティ)がデフォルトでサポートされており、暗号化や認証機能が強化されている。
- マルチキャスト(1対多)とアニキャスト(1対最も近い1)の通信がサポートされており、効率的な通信が可能。
IP(Internet Protocol)
IPは、パケットを目的のコンピュータまで届けるという、TCP/IPで最も重要な役割を持っている。
以下のような特徴を持つ。
- ルーティング
- ルーターを使用してパケットを適切な宛先に転送する。
- コネクションレス型
- パケットを送信する前に通信相手とコネクションを確立しないため、高速。
- コネクションの確立が必要な場合は、上位層のTCPによって信頼性を提供する。
- 信頼性がない
- データの到達確認や再送制御を行わないため、データの欠損や順序の不整合が発生する可能性がある(ただし、トランスポート層で信頼性を実現するような対応が考えられる)。
ARP(Address Resolution Protocol)
IPv4アドレス(IPアドレス)を対応するMACアドレス(物理アドレス)に変換するために使用される、アドレス解決のプロトコル。
IPアドレスが決まれば、宛先IPアドレスに向けてIPデータグラムを送信することができるが、実際にデータリンクを利用して通信をするときにはIPアドレスに対応したMACアドレスが必要になる。
2. データリンク層
基本用語
Ethernet
LAN上でデバイス間のデータを通信するためのプロトコル。
通信媒体で直接接続された機器間で通信するための仕様。
ここでの通信媒体とは、ツイストペアケーブル、光ファイバー、電波、赤外線など。
フレーム
Ethernetでは、IPにおけるパケットに相当するデータの単位をフレームと呼ぶ。
MACアドレス(Media Access Control Address)
物理アドレス、ハードウェアアドレスとも呼ばれる。
同じ通信媒体に接続された機器を識別するためのアドレス。
48ビットの長さを持ち、6つの2桁の16進数(例: 00:1A:2B:3C:4D:5E)で構成される。
先頭の3 ~ 24ビットは、製造元(ベンダー)を示すベンダ識別子(OUI、Organizationally Unique Identifier)であり、残りの25 ~ 48ビットは、ベンダーの製品固有の値。
すなわち、NICの製造元ごとに特定の数字が割り当てられている。
EthernetやWi-Fiなどの通信に使用される。
NIC(Network Interface Card)
ネットワークアダプタ、ネットワークインターフェイスカード、ネットワークカード、LANカードとも呼ばれる。
最近のコンピュータであればはじめから無線LAN(Wi-Fi)のインタフェースを備えた機種が多いが、中にはUSBポートを介してネットワークを利用するように設計されている機種があったり、以前のパソコンでは有線LANが主流だった。
コンピュータや他のデバイスがネットワークに接続するための専用のインタフェースをNICと呼んでいる。
デバイスとネットワーク間のデータの送受信を行う。
コンピュータにはLANケーブル(インターネットをするための線)を挿す穴が付いているが、パソコンの蓋を開けて見た時に、その穴がくっついている部品のこと。
NICには、デバイスがネットワーク上で一意の識別子を持つための MACアドレス が割り当てられている。
無線LAN
無線通信では、電波や赤外線、レーザー光線などを利用する。無線通信の中で、オフィス内のようなLANの範囲を比較的高速で接続するものを無線LANと呼ぶ。
無線通信ではコンピュータ機器などをネットワークに接続するケーブルが不要になる。
当初は移動して使うことが多い軽量の機器に用いられていたが、省スペースで配線コストを削減できるメリットから、オフィスや家庭、店舗、駅、空港などでも使われるようになった。
例: Bluetooth、Wi-Fi、WiMAX、LTE、4G、5G
無線LANは、盗聴や改ざんといった危険に常にさらされている。
データの暗号化に加えて、認証された機器だけがその無線LANを利用できるようなアクセス制御を併用し、できる限り安全な環境で利用する必要がある。
ブリッジ
ブリッジは、データリンク層でネットワーク同士を接続し、データを転送するデバイス。
ポート数が限られており、高度な機能は提供しないことが一般的。
宛先MACアドレスが同じネットワークセグメントにある場合、ブリッジはそのデータフレームをフィルタリングし、転送しないことで、ネットワークのトラフィックを制御し、パフォーマンスを向上させる。
小規模なネットワークや2つの異なるセグメント(ネットワーク)を接続する必要がある場合に適している。
以下の例では、goldengateブリッジが、sanfranciscoネットワーク、sausalitoネットワーク、ハブを接続している。
スイッチ(スイッチングハブ)
スイッチは、ブリッジの機能を持ち、ハブのような多くのポートを提供するデバイス。
レイヤ2スイッチ(L2スイッチ) と呼ばれることもある。
ハブやブリッジと比べて、より高速で効率的に動作し、高度な機能を提供することができる。
例えば、VLAN(仮想LAN)がサポートされていたり、QoS(Quality of Service)の設定を行うことができる。
また、リモート管理が可能なため、SNMP(Simple Network Management Protocol)を使用してネットワーク管理者が監視や設定を行える。
大規模なネットワークや高度な機能が求められる環境に適している。
1. 物理層
基本用語
ハブ(リピータハブ)
ネットワーク上の複数のデバイスを接続するためのシンプルなネットワーク機器。
接続されたすべてのデバイスに対して受信した信号を送信する。
ハブは、スイッチやブリッジと比べて機能がシンプルであり、現代のネットワーク環境ではあまり使われなくなっている。
代わりに、スイッチがハブに代わってよく使われており、データ転送の効率とネットワークパフォーマンスが向上する。
参考
マスタリングTCP/IP 入門編(第6版)
Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
絵で見てわかるITインフラの仕組み 新装版