目次
複数の転送プロトコルを組み合わせる
データを送受信する通信の主体はアプリケーションです。そして、アプリケーションのデータをネットワーク経由で適切な宛先まで転送します。そのために、以下の転送プロトコルを組み合わせて利用します。
階層 | プロトコル | 概要 |
---|---|---|
トランスポート層 | TCP/UDP | 適切なアプリケーションへ振り分ける(ポート番号) |
インターネット層 | IP | アプリケーションが動作しているホストまで転送する(IPアドレス) |
ネットワークインタフェース層 | イーサネット、無線LAN(Wi-Fi)など | 同じネットワーク内のインタフェース間で物理信号を送り届ける(MACアドレスなど) |
適切なアプリケーションへ振り分ける(TCP/UDP)
PCやサーバで動作しているアプリケーションは1つだけとは限りません。届いたデータがどのアプリケーションのデータであるかを識別して、適切なアプリケーションへデータを振り分ける必要があります。そのために、TCPまたはUDPを利用しています。アプリケーションを識別するために、ポート番号を割り当てています。TCP/UDPヘッダには宛先/送信元ポート番号が指定されています。
例として、Webサイトのアクセスについて考えます。Webブラウザのデータには、HTTPヘッダが付加されます。HTTPヘッダが付加されたデータをTCPで転送することになります。TCPヘッダの宛先/送信元ポート番号でWebブラウザとWebサーバアプリケーションをきちんと識別できるようにしています。そのため、TCPヘッダを付加する(カプセル化)ということは、WebブラウザとWebサーバアプリケーションが仮想的に直結されるようなイメージです。宛先/送信元ポート番号に関係のないアプリケーションにデータが振り分けられることはありません。
関連記事
ポート番号、TCP、UDPについては以下の記事をご覧ください。
アプリケーションが動作しているホストまで転送する(IP)
アプリケーションのデータは、アプリケーションが動作しているPC/サーバなどのホストまで転送しなければいけません。アプリケーションが動作しているホストまで転送するためにIPを利用しています。
IPにとってのデータは、TCPヘッダでカプセル化されているアプリケーションのデータです。ホストを識別する(正確にはホストのインタフェース)ために、ホストにはIPアドレスを割り当てています。IPヘッダに宛先/送信元IPアドレスを指定して、IPヘッダでカプセル化してIPパケットとします。IPヘッダでカプセル化することで、送信元ホストと宛先ホストの間が仮想的につながるようなイメージです。IPヘッダに宛先/送信元IPアドレスを指定しているので、まったく関係ないホストにデータが転送されることはありません。そして、ホスト間が仮想的につながっている中にデータを通していきます。これは、実際には経路上に存在するルータ/レイヤ3スイッチが適切なルーティングを行うことで実現しています。
関連記事
IPについては以下の記事をご覧ください。
また、IPアドレスについては、以下の記事からさらに詳細な解説記事をご覧いただけます。
同じネットワークのインタフェース間で物理信号を送り届ける(イーサネットなど)
TCP/UDPおよびIPは、物理的なデータの送信を行いません。ネットワーク上でデータを転送するとは、「0」「1」のビットを電気信号などの物理信号に変換して、その物理信号を適切なインタフェースまで送り届けることです。そのために、イーサネット/Wi-Fiなどのネットワークインタフェース層のプロトコルを利用します。
イーサネットでは、イーサネットインタフェースを識別するためにMACアドレスを割り当てています。イーサネットで転送するためには、宛先/送信元MACアドレスを指定したイーサネットヘッダでカプセル化します。イーサネットにとってのデータはIPヘッダまでカプセル化している部分です。
イーサネットヘッダでのカプセル化は、送信元インタフェースと宛先インタフェース間が仮想的につながるイメージです。ヘッダに宛先/送信元MACアドレスを指定しているので、関係のないインタフェースはデータを受信しません。(イーサネットフレームがフラッディングされると関係ないインタフェースに物理信号が流れることはあります)
宛先と送信元インタフェース間の仮想的なつながりの中にデータを通していきます。これは、具体的にはレイヤ2スイッチが転送しています。イーサネットをはじめとするネットワークインタフェース層のプロトコルは、同じネットワーク内だけです。ルータを越えてネットワークが異なるときには、新しいヘッダでカプセル化されることになります。
関連記事
以上のように、アプリケーションのデータを転送するためには、トランスポート層、インターネット層、ネットワークインタフェース層の3つの階層にわたる転送プロトコルを組み合わせています。
アプリケーションのデータに各転送プロトコルのヘッダでカプセル化してネットワークに送り出すデータを作り上げています。これにより、ネットワークを構成するルータ/レイヤ3スイッチやレイヤ2スイッチが転送の判断をして、適切な宛先までデータを表している物理信号が送り届けられるようにしています。
他のプロトコルも必要
各転送プロトコルのヘッダをつけるために、他のプロトコルも必要です。TCP/UDPヘッダのポート番号は特に意識して求める必要はありません。サーバアプリケーションのポート番号はあらかじめ決められているウェルノウンポート番号を利用し、クライアントアプリケーションはダイナミックにポート番号を割り当てるからです。
IPアドレスはそうはいきません。送信元IPアドレスは簡単にわかりますが、IPヘッダの宛先IPアドレスを求めるために、DNSが必要です。そして、MACアドレスも求めるための仕組みが必要です。イーサネットヘッダの宛先MACアドレスを求めるためには、ARPを利用します。
関連記事
DNSとARPについて、以下の記事をご覧ください。
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順