この記事はチームラボエンジニアリングアドベントカレンダー8日目の記事です。
TCP/IPを学ぼうとすると、知っておくべき範囲が広く、様々な用語の略称が登場するため理解するのに時間がかかります。
そこで、図を交えて最低限の情報に絞って整理してみようと思います。
そもそもTCP/IPとは何か
TCP/IPという単語を分解すると
- TCP
- IP
となります。一見、TCP(Transmission Control Protocol)とIP(Internet Protocol)の2つのプロトコルを指すように見受けられ、実際その認識で正しい場合もあるようです。しかし、多くの場合はインターネットを構築するためのプロトコル群を指します。
プロトコルって何?
プロトコルは簡単に言えば通信の約束事 = 通信の仕様です。昔のコンピュータはメーカーごとにプロトコルが異なり、同じメーカー機器同士での通信しかできませんでした。
しかし、TCP/IPがデファクトスタンダードとなってからは、TCP/IPが共通の約束事になり、自由な通信が可能になりました。今世界中のコンピュータネットワークが接続できているのは、TCP/IPが共通の約束事になっているからです。
TCP/IPの階層
TCP/IPはインターネットのために開発されたプロトコル群です。TCP/IPの階層モデルは、OSI参照モデルとは少し異なります。
各階層の役割
TCP/IPの階層図を見ると、各階層にプロトコルが分けられているのがわかりますね。各階層、各プロトコルには明確な役割があり、この仕組みはアプリケーションの設計にも似ています。
アプリケーション層
アプリケーションプログラムの中で実現されています。今あなたがこの記事を実際に目で見れているのは、アプリケーション層のプロトコルであるHTTPS(HyperText Transfer Protocol Secure)を使って、アプリケーションであるWebブラウザがHTML(HyperText Markup Language)というデータフォーマットを受信し、WebブラウザがHTMLを解釈してページを表示しているからです。この仕組みは、どのWebブラウザ(Chrome,Firefox,Edge,Safari・・・)でも共通です。
トランスポート層
アプリケーション層では、アプリケーションプログラムの中の通信であることに対して、トランスポート層は、アプリケーションプログラムの間の通信を実現しています。コンピュータ内では様々なアプリケーションが存在するので、どのアプリケーション同士の通信なのかを識別する必要があります。識別にはポート番号が使われ、代表的なプロトコルとしてTCPとUDPがあります。
-
TCP(Transmission Control Protocol)・・・コネクション型(通信相手と接続が確立した状態で通信する)プロトコルです。接続が確立していて、データが届いたかどうかのチェックも行われるため、通信相手へのデータ到達性が保証されます。
-
UDP(User Datagram Protocol)・・・コネクションレス型(一方的にデータを送信する)プロトコルです。相手にデータが届いたかはチェックしていないので信頼性はありませんが、TCPに比べてデータの送信効率が良いので、動画配信などのデータ量の多い通信に向いています。
インターネット層
この階層の役割は、データを最終的な通信相手に届けることです。トランスポート層では、どのアプリケーションかを識別することはできますが、地球上のどのコンピュータ宛に通信するのかは識別できません。通信相手の識別は、インターネット層にてIP(Internet Protocol)を使って実現しています。IPではIPアドレスを使って通信相手を識別します。
ネットワークインターフェース層
ネットワークインターフェース層では、データリンクを利用して通信を行うためのインターフェースの役割があります。実際に通信を行う際の物理的な機器同士の接続ですので、OSI参照モデルの物理層と合わせて1つの層として扱われる場合もあります。
- データリンク・・・MACアドレスを使ってホストやルーター同士の通信をするための仕組みです。インターネット層では最終的な通信相手だけに着目しており、実際にどんな経路で通信するかは知りません。実際の通信ではデータリンクを利用してルーター(経路制御機器)を辿っていき、最終的な通信相手と通信できます。通信機器ごとにMACアドレスが割り当てられており、送信側ホストからルーターへ、さらに次のルーターへとMACアドレスを使って次々とデータの送り先を判別、転送していきます。
かなり簡単にデータリンクについて書きましたが、データリンクについて調べ出すと奥が深くて沼にハマるのでご注意ください。
通信の流れを図示してみる
しっかり学ぶならこの本がおすすめ
マスタリングTCP/IP 入門編
出版: オーム社
共著: 井上直也・村山公保・竹下隆史・荒井透・苅田幸雄
入門編と書いてありますが、かなり情報量は多く読み応えがあります。僕みたいなWebエンジニアの場合、IPの分割と再構築処理や、パケットの中身はどうなっているか等の知識は業務に直接結びつかないかもしれませんが、コンピュータネットワーク登場の背景は興味深かったですし、IPアドレスの仕組みの話、CIDRの話はAWSに触れる上で役に立つと思いました。ネットワークに興味ある人にオススメです。