🌐

TCP/IPのしくみ

2024/09/17に公開

TCP/IPとは?

普段私たちが、何も考えずともインターネットを通してWebページを検索したり、メールを送信したりできるのは裏でさまざまな通信ルールが定まっているからです。このルールのことをプロトコルと言い、プロトコルにはさまざまな種類があります。
TCPやIPもプロトコルの一種で、TCPとIPを中心に複数のプロトコルを集めたものがTCP/IPと呼ばれます。
TCP/IPは現在のインターネット通信などにおいて最も利用されている通信プロトコルです。

TCP/IPの階層構造

複数のプロトコルが集まったTCP/IPですが、データの送受信を効率化するために、以下の4つの階層に分かれています。

  • アプリケーション層
  • トランスポート層
  • インターネット層
  • ネットワークインターフェース層

それぞれの階層について詳しく見ていきましょう。

アプリケーション層

最上位層であるアプリケーション層の役割は、Webブラウザやメール、ファイル転送などのアプリケーションの機能を実行するためのデータフォーマットや処理手順などを決めることです。ユーザーと直接関連するため、文字や画像など人間が認識できるようにデータを表現します。
アプリケーション層では、様々なプロトコルが利用されており、それぞれ特定の種類の通信やデータ変換に特化しています。代表的なプロトコルとしてHTTP、SMTP、FTPなどが挙げられます。

  • HTTP(Hypertext Transfer Protocol)
    WebサーバとWebブラウザの間で、Web情報をやり取りするためのプロトコル。
  • SMTP(Simple Mail Transfer Protocol)
    インターネット上でEメールメッセージを送受信するために使用される通信プロトコル。
  • FTP(File Transfer Protocol)
    ファイルのアップロードやダウンロードなど、ファイルを転送する際に使用される通信プロトコル。

トランスポート層

第3層トランスポート層の役割は、データを適切なアプリケーションに振り分けることです。
このトランスポート層では、TCPUDPの2種類のプロトコルが場合に利用されています。
TCPは、1対1のセッションによる信頼性の高い通信を行うためのプロトコルです。相手との接続を確認してからデータを送信したり、相手の受信確認や何らかの理由でデータが相手に届かなかったときの再送処理などを行うため、信頼性の高い通信を行うことができます。Webサイトの閲覧やメールなどの一般的なインターネット利用にはTCPが利用されることが多いです。
一方、UDPはリアルタイム性が要求されるアプリケーションに適しています。接続の確認を行わずにデータの送信をしたり相手の受信確認も行わないため、TCPと比較して信頼性は落ちますが、高速なデータ送信が可能です。
UDPは音声通話や動画の再生、オンラインゲームなどに利用されます。

インターネット層

第2層インターネット層では、ネットワーク間のデータの転送を行う役割を持っています。
前提として、ネットワークは1つのネットワークにあらゆる機器が接続されているわけではなく、たくさんのネットワークが存在し、そこにいろんな機器が接続されています。ルータと呼ばれる機械でネットワーク同士を接続してデータの転送を行っています。
このルータによるデータ転送が正しく相手に届くように経路の選択を行う必要があります。この仕組みルーティングと呼びます。
この層で重要なプロトコルはIPで、データパケット(データを小分けにしたもの)のルーティングなどを行います。
他にも、ICMPやARPといったプロトコルも含まれますが、これらはデータ転送のエラー通知やMACアドレスの取得などIPを補佐するプロトコルです。

ネットワークインターフェース層

最下層であるネットワークインターフェース層の役割は、同じネットワーク内でデータを転送することです。
「0」「1」のデジタルデータを電気信号などの物理的な信号に変換して、電装媒体で伝えていきます。また、受信した物理的な信号をデータに変換する役割もあります。
ネットワークインターフェース層の具体的なプロトコルとして、有線(イーサネット)や無線LAN、PPPなどが挙げられます。(ネットワークインターフェース層のプロトコルは通信相手と同じものを使う必要はありません)   

階層 名称 主要なプロトコル
第4層 アプリケーション層 HTTP,SMTP,FTP,POP3,DHCP,DNS
第3層 トランスポート層 TCP,UDP
第2層 インターネット層 IP,ICMP,IP
第1層 ネットワークインターフェース層 Ethernet,PPP

TCP/IPの通信の流れ

TCP/IPでは、アプリケーションのデータを送受信できるようにするために、4つの階層のプロトコルを組み合わせます。
各層は、データを受け取り、利用するプロトコルに合わせてデータに制御情報を付加します。この制御情報のことをヘッダといい、ヘッダを付加することをカプセル化と呼びます。各層では、カプセル化を行い、次の層へデータを渡していきます。

Webページ閲覧時のWebブラウザとWebサーバのデータのやり取りを例に、説明していきます。

Webブラウザのデータはまずアプリケーション層でHTTPヘッダが付加されます。(メール送信やファイル転送など、アクションに合わせたプロトコルが利用されます。)
このHTTPヘッダには、ブラウザの種類やOS情報などのユーザーに関する情報や受け取りたいデータの形式などさまざまな情報が含まれます。
また、階層によってデータの呼び方が異なるのですが、アプリケーション層ではデータのことをメッセージを呼びます。

HTTPヘッダでカプセル化されたデータは次に、トランスポート層のTCPへ引き渡されます。ここでは、送信元のポート番号や宛先のポート番号、データが順番通り届いているかを確認する番号(シーケンス番号)などの情報を格納したTCPヘッダを付加します。(UDP形式の通信時はUDPヘッダ)
さらに、トランスポート層では、元々のデータを運びやすい適切なサイズに分割します。この分割されたデータの破片のことをセグメントと呼び、各セグメントにヘッダを付加します。

トランスポート層で分割されたデータは次にインターネット層へと渡されます。
ネットワーク層では、IPプロトコルを用いて、各セグメントにIPヘッダを付加していきます。
このIPヘッダには送信元IPアドレスや宛先IPアドレスの他に、バージョンやサイズを示す情報や優先度を示す情報なども含まれます。
IPヘッダを付加されたデータをパケットと呼びます。

パケットはネットワークインターフェース層に渡されます。上でも説明しましたが、この層では同じネットワーク内でデータの転送が行われます。その転送方法としてイーサネットと呼ばれるプロトコルが広く普及しています。
イーサネットに繋がれた端末をホストと呼び、各ホストを識別するための固有の番号をMACアドレスと言います。
この層に渡されたパケットは、イーサネットヘッダを付加され、イーサネットヘッダを付加されたデータをフレームと呼びます。また、エラーチェック用のFCSも付加されます。
イーサネットヘッダには送信元MACアドレスや宛先MACアドレスなどの情報が含まれます。
イーサネットヘッダを付加されたデータはこの層で、電気信号に変換され、ネットワーク上へと運ばれます。

Webブラウザからデータを送る時の流れ

送り出されたデータがWebサーバまで届けられると、Webサーバは今の流れと逆の順番でデータを処理していきます。
まず、ネットワークインターフェース層で、電気信号を「0」と「1」のデータに変換します。そして、イーサネットヘッダを参照して自分宛のデータであることを確認します。また、FCSによってデータにエラーがないかを確認します。
自分宛のデータであれば、イーサネットヘッダとFCSを外し、インターネット層へとデータを渡します。

インターネット層では、IPがIPヘッダを参照し、自分宛のデータであることを確認します。
自分宛のデータであることが確認できたら、トランスポート層へとデータを渡します。

トランスポート層では、TCPがTCPヘッダを参照し、どのアプリケーションのデータであるかを確認します。
そして、TCPヘッダを外してWebサーバアプリケーションへデータを渡します。
このようにして、Webサーバまでデータが届けられ、HTTPヘッダやその後のデータの部分の処理を行います。

Webサーバがデータを受信する時の流れ

ここではWebブラウザからWebサーバにデータが送られる場合の流れを見てきました。
注意点として、送信側と受信側は必ず決まっているわけではなく、通信は原則として双方向で行われます。そのため、このあとは送信側と受信側が交代し、Webサーバが送信側、Webブラウザが受信側となります。

最後に

今回は、TCP/IPがどのようなものなのか、どういう流れで利用されるのかについてまとめました。
普段スマートフォンやパソコンで検索をしたり、動画を見たりしている裏側では、様々なルールに従い、通信が行われているということを感じていただけたのではないでしょうか?
今回まとめた内容はあくまでざっくりとした内容になりますが、興味のある方は、詳しい解説がされている書籍を読んでみると面白いと思います!
また、記事の内容で間違っている箇所がありましたらご指摘いただけると幸いです。

Discussion