はじめに
「ネットワークの基本」という本を読んで、TCP/IPの立ち位置や概要が、すっきりした気がするのでアウトプットとしてまとめ記事を書くことにした。
ネットワークの基礎知識
まずはコンピュータネットワークを学んでいく上で重要な概念や、ネットワークの全体像について抑えていく
そもそもネットワークってなに?
TCP/IPの基礎知識
TCP/IPはインターネット環境の通信を実現するための最も有名なプロトコルと言える
プロトコルとはコンピュータとコンピュータがネットワークを利用して通信するために決められた約束ごとである
これからその全容と各層の役割について詳しく見ていく。
レイヤー構成
TCP/IPは4層のモデルに基づいて構成されている。
下から、ネットワークインタフェース層、インターネット層、トランスポート層、アプリケーション層と積み上げられる。
- ネットワークインタフェース層:直接繋がった相手と通信する機能を実現する
- 具体的なプロトコル:
- イーサネット
- ARP/RARP など
- 具体的なプロトコル:
- インターネット層:中継などにより任意の機器同士の通信を実現する
- 具体的なプロトコル:
- IP
- ICMP など
- 具体的なプロトコル:
- トランスポート層:高信頼性など目的に応じた通信品質を実現する
- 具体的なプロトコル:
- TCP
- UDP など
- 具体的なプロトコル:
- アプリケーション層:具体的な通信サービスを実現する(メール、Web)
- 具体的なプロトコル:
- HTTP
- SMTP
- POP3 など
- 具体的なプロトコル:
アプリは各層のプロトコルを用途によって組み合わせて使う。
OSI参照モデルとの対応
- OSI参照モデルとは
- 通信に必要な機能を7つの階層に分け、機能を分割することで、複雑なネットワークプロトコルを単純にしたモデルである
- 各階層は、下位層から特定のサービスを受け、上位層に特定のサービスを提供する
- 上位層と下位層の間でサービスのやり取りをするときの約束ごとを「インターフェース」と呼び、通信相手の同じ階層とやり取りするときの約束ごとを「プロトコル」と呼ぶ
- 多くの通信プロトコルは、OSI参照モデルの7階層のうちのどこかの層に当てはめることができる
ネットワークインタフェース層
ネットワークのハードウェアで直接つながっているコンピュータ同士が、相互に通信できるようにするための機能を実現する。
原始的でシンプルな最低限の通信機能をもたらす層。
主なプロトコルとしては以下。
イーサネット
有線LANで最も主流なネットワークの規格。
Wi-Fi
無線を使ってLANに接続するための規格。
PPPoE
イーサネットを使って1対1の接続を作り出すプロトコル。
インターネット接続サービスの利用者認証に使われる。
ARP/RARP
IPアドレスとMACアドレスを相互に変換するためのプロトコル。
イーサネットやWi-Fiの上で使われる。
インターネット層
複数のネットワークを繋いで、相互にパケットをやり取りする機能を実現する。
直接つながらないネットワークの間でデータを中継する。
インターネット層が加わることで直接つながっていないコンピュータ同士でも相互に通信できるようになる。
この層で大きな役割を果たすのがパケットの中継機能。
パケットを中継して所定の方向に転送することをルーティングと呼ぶ。これによってネットワークインタフェース層だけでは届けることができない任意の相手にデータを送り届けることが可能になる。
そして、もう一つ重要なのが、接続するコンピュータを識別するためのアドレスを付与すること。
代表的なプロトコルは以下。
IP(Internet Protocol)
直接つながっていないネットワーク間で、パケットをルーティングする機能を提供するプロトコル。
これによって直接つながっているかどうかを問わず、任意のコンピュータと通信ができるようになる。
ネットワーク全般にわたってコンピュータを一つ一つ識別するためのアドレスとしてIPアドレスを用いる。
IPアドレスはネットワークインタフェース層のプロトコルに何が使われていても影響しないようにMACアドレス(ハードウェアアドレス)とは無関係で、かつ、接続するネットワーク全体でコンピューターを一つ一つ識別できるもの。
IPアドレスにはいま主に用いられているIPv4とこれから普及が進むと見られるIPv6がある。
ICMP
IPの働きを補助するための特殊な機能を持つプロトコル。
任意の相手に到達できるかの検査、到達できない場合の理由の通知などに使われる。
トランスポート層
インターネット層が作り出す任意のコンピューター同士の通信機能をベースにして、ネットワークの使用目的に応じた特性を持つ通信を実現する。
より信頼性の高い通信を可能にしたり、知らんせいは低くてもすばやくパケットを送れるようにしたりする。
主なプロトコルは以下。
TCP
信頼性の高い通信を実現するプロトコル。
通信を始めるにあたって、まず相手との間で「接続」を作る。そして通信が終わるときに接続を切る。
再送や順序の入れ替えをするので、リアルタイム性には欠ける。
信頼性の高さは大部分の通信で有用なため、WebのためのHTTP,メール受信のためのSMTPなどインターネットアプリケーションで幅広く用いられている。
UDP
インターネット層の機能をほぼそのまま使い、事前準備が不要で身軽な通信を実現するプロトコル。
必要な時にすぐ相手にデータを送れ、到着したデータはすぐにアプリケーションに届く。
音声や動画のストリーミング、インターネット電話などに使われる。
事前の接続が不要な特性を活かしてDNSやNTPなど、サーバーへ頻繁に問い合わせをする用途にも用いられる。
アプリケーション層
個別のアプリケーションが持つ機能を実現する層。
下位にあるトランスポート層が作り出す「目的に応じた通信機能」の中からアプリケーションに適したものを選び、それを使ってアプリケーションプログラム同士がデータをやり取りする。
特に重要で幅広く使われているプロトコルを挙げる。
HTTP
Webへアクセスする。モバイルアプリの通信などにも使う。
SMTP
メールの送信やサーバー間の転送をする。
POP3
メールボックスからメールを取り出す。
IMAP4
メールボックスのメールを読む。
FTP
ファイルを転送する。
SSH
文字ベースでサーバーなどにコマンドを送り結果を見る
DNS
ドメイン名とIPアドレスを相互に変換する
NTP
コンピューターの時計を合わせる