3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TCP/IPの話

Last updated at Posted at 2023-09-08

OSI参照モデル

現在では、異なるメーカーの製品、OS同士でも、互換性をもってネットワークが繋がれ、
膨大なデータのやり取りを正確にできています。

1970年代では、各メーカーがそれぞれネイティブなプロトコルを用いて、通信を行っていたため、
他のメーカーとの通信に互換性がないことが問題としてありました。
TCP_IPの存在意義.png
同じメーカーの製品を買い続ける必要があること、他部署で他メーカーを使用していた場合、プロトコルに互換性がないため、ネットワークが接続できないことなど。

全ての機器が同じ規格に準拠すれば、このような問題がなくなると考えた国際標準化機構(ISO)が通信の標準化をを定めたのが、OSI参照モデルです。
OSI参照モデル.png
OSI(Open System Interconnection:開放型システム間相互接続)はISO(国際標準化機構)とITU(国際電気通信連合)により、異なるベンダー間(様々なメーカーが製造した機器)で相互通信するためのネットワークアーキテクチャで、通信の機能を7つの階層に分類しています。

コンピュータ処理と通信機能との分離と、その標準化により、膨大なネットワークが今日までに存在しています。

TCP/IP

TCP/IPとは、現DARPA(米国国防高等研究計画局)が策定したデータ通信機能におけるモデルであり、
OSI参照モデルと通信概念が異なり、4つの階層を持っています。
TCP_IPモデル.png
また、世界で標準的に利用されている通信プロトコルで、インターネット・プロトコル・スイートと呼ばれています。

アプリケーション層

アプリケーションが通信するために扱うデータフォーマットやその手順を定めている階層である。
電子メール(SMTP)、Web(HTTP/HTTPS)、ファイル共有(FTP)、遠隔ログイン(TELNET)などがこの層にあたり、
個別に機能として実装したプロトコルが定義されています。
信号データを、ユーザがわかる表現に変換する役割を持つ。
アプリケーション層.png

トランスポート層

主なプロトコルはTCPとUDPが存在し、
データを適切なアプリケーションに振り分ける役割を持ちます。
TCPでは、データにエラーがないように、再送を行い、送り先まで確実に届けるのに対し、
UDPでは、データの欠損があった場合でも、送り続けます。
TCPとUDP.png

インターネット層

複数あるネットワーク間の中で、目的の転送先(PC)を特定しデータ転送を行う役割を持ちます。
(”エンドツーエンド通信”と呼びます。)
ルータがネットワークを相互接続しており、ルータ間でデータ転送を行っています。
このような、ルータによるネットワーク間のデータ転送を”ルーティング”と呼びます。
インターネット層.png
以下のプロトコルなどが使用されて、転送先のPCの特定、通信の診断を行います。

  • IP(Internet Protocol)
  • ICMP(Internet Control Message Protocol)
    • Pingコマンドがこのプロトコルを使用しています。
  • ARP(Address Resolution Protocol)
    • IPアドレスとMACアドレス(Media Access Control)の変換を行うプロトコル

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

デバイスドライバと呼ばれて、OSとハードウェアのインターフェースを担っています。
アプリケーションが通信機能を利用するための仲介、周辺ネットワークの管理を行うために存在します。

OSI参照モデルとTCP/IPモデル

OSI参照モデルとTCP/IPモデルとでは、通信の概念が異なるため、区分に違いがありますが、
基本的には、OSI参照モデルに当てはめて考えることができます。
TCP_IP.png
OSI参照モデルでは、"通信プロトコルに必要な機能"をモデル化しているのに対し、
TCP/IPの階層モデルでは、"コンピュータへプロトコルの実装"を中心としてモデルが考えられています。
(OSIでは、TCP/IPと比べて、実際に動作するプロトコルが迅速に作成出来なかったことが、普及しなかった原因として挙げられています。)

TCP/IPの内部処理

送信から受信までのTCP/IPの内部処理を大まかに表した図です。
※LはLayerの略、L4ヘッダーとはLayer4のヘッダーという意。

下層へ行くにつれて、”ヘッダー”と呼ばれるプロトコルの目印が付与されていき、
L2では、”トレーラ”と呼ばれる伝送中の情報の抜け落ちを調べるチェックコードが後ろに付与される。
送信側から、データに対してヘッダー等でコーティングすることをカプセル化と呼び、
受信側がそのコーティングを剝がしていき(プロトコルを認識していき)、データを取り出すことを非カプセル化と呼ぶ。
TCP処理.png
このようにデータにメタデータを付与することで、
プロトコルを認識し、それに応じて対応したデータを取り出すことができるといった仕組みである。

ソケット通信

ソケット通信とは、TCP/IP(概念)を利用する通信全般を指す。(TCP/IPの実装時の呼び名?)
ソケット(通信端点)とはプログラム、アプリと世界をつなぐ出入り口のことである。
(そのため、ソケット通信の呼び方で、UDPも含有している。基本的にはTCP)

ソケット通信を行うためには、IPアドレスとポート番号が必要となります。

IPアドレスは、ネットワーク上で各コンピュータに振り分けられた番号で、
同じIPアドレスを持ったコンピュータはインターネット上には、存在しません。
1つのコンピュータが複数の通信をするためには、ポート番号と呼ばれる、
通信をするプログラムを指定するものが必要になってきます。

プロトコルによるポート番号の違い.png

IPアドレスとアプリケーションに応じたポート番号を指定することで、通信が行えます。
ウェルノンポート番号と呼ばれる予約された番号が存在するので注意。
例えば、

  • メールの送信
    • SMTP、ポート番号:25
  • Web
    • HTTP、ポート番号:80
    • HHTPS、ポート番号:443

通信方法

ソケット通信は、双方向通信(Two-Way Communication)で、
サーバ側とクライアント側同士が双方向に要請を送ることができる。
応答後も接続は確立されており、リアルタイムにやり取りができることがメリットである。
また、双方向通信には、さらに、

  • 半二重通信:
    • 物理)信号経路が1つのみしか存在しない
    • 通信)信号が衝突しないように送信動作を制御、衝突した場合は修正
      • トランシーバーのようなやり取り
  • 全二重通信:
    • 物理)信号経路が送受信で別々に存在する
    • 通信)信号が衝突しないので、衝突することを考慮せず、送信動作を行う
      • 携帯電話でのやり取り

に分類できることも言及しておく。
なお、物理的な意味ではなく、通信上の意味で使われていることに注意。

ソケット通信は3回のパケットの送受信を行い接続を確立させるため、スリーウェイ・ハンドシェイクとも呼ばている。
ソケット通信.png
基本的に8つのメソッドで通信を行えます。

  • socket():ソケットを作成
  • bind():ソケットを関連づける
    • ソケットにIPアドレスやポート番号を設定する
  • listen():接続待ち
    • サーバ側がソケットを接続待ちにする
  • connect():接続を要求する
    • クライアント側が実行し、接続をどこにするか定める
  • accept():接続の受け入れ
    • サーバ側がクライアント側からの接続要求を受け入れる
  • send():データの送信
  • receive():データの受信
  • close():ソケット通信の切断
    ソケット通信(コネクション型).png

HTTPとの違い

HTTP通信

HTTP通信では、クライアント側がリクエストした時のみ、サーバ側がレスポンスをする仕組みである。
これは単方向通信(One-Way Communication)と呼ばれている。
また、サーバ側の応答後は、接続がすぐに終了する。
HTTP通信.png

ソケット通信に規則を与えて、Web上で取り扱いやすくしたものが、HTTP通信です。
なので、HTTP通信もソケット通信を行っています。

まとめると、
・ソケット通信(TCP通信)は、「通信デバイス間での通信内容を確実に送受信するためのルール」を定めているプロトコル
・HTTPは、「TCP通信にルールを追加して、送受信されるデータの形式や送受信タイミングをWebサイト閲覧に最適化する形に定められたルール」

WebSocket

WebSocketと呼ばれるものが存在します。
これは、Web上で、双方向通信を行うために開発されたもので、
厳密にはHTTP/HTTPSとプロトコルが異なります(HTTPをUpgradeしたものになる)
WebSocketの位置づけ.png

まとめ

簡潔にまとめると、
TCP/IPは通信の標準規格であり、様々なプロトコルが存在する。
ソケット通信とはTCP/IP全般を指す言葉であり、HTTP通信もソケット通信を行っている。
WebSocketと呼ばれるものはHTTPをアップグレードしたもので、Web上でリアルタイムにやり取りに適している。

DjangoでのWebSockt実装についての記事も投稿予定。

参考文献

マスタリング TCP/IP 入門編 第2版

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?