僕たちがなんとなくで使っているインターネット。

でもエンジニアとしてはなんとなくで使っていては仕事にならない。
エンジニア1年目の新米エンジニアがWEBの基礎であるTCP/IPについてまとめてみました!

TCP/IPとは?

HTTPはTCP/IPをベースにして設計されています。
以下が正式名称です。

  • TCP→Transmission Control Protrocol
  • IP→Internet Protocol

階層型プロトコル

TCP/IPは**階層型プロトコル(規約/手続き/取り決め)**としてモデル化されています。

階層化することによって、下位層の具体的な内容を知らなくても、
担当する階層に特化した機能を開発すれば良くなるという利点があります。

この利点により、アプリケーション層の実装をする人は、トランスポート層のことを知らなくても、
アプリケーションを実装できるようになります。

また、「プロトコル」とは取り決めのことであり、
異なるベンダー製品間の通信を実現するために、通信プロトコルは不可欠なものです。

プロトコルがあることによって、スマートフォンやゲーム機、センサー、そして自動車と、異なる企業、
デバイス間での通信が可能になります。

階層化によって、開発者は自身の担当する階層の開発に集中でき、
同一のプロトコルという、取り決めを使用することによって、
私達、消費者は異なる企業の製品間でも通信できるようになるというわけです。

ありがたいですね!!

続いて、TCP/IPの階層モデルで各階層ごとの特徴を見ていきましょう!

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

一番下の階層に当たります。

ネットワークインターフェイス層は、物理的な部分に相当し、
ケーブルやネットワークアダプタがこの部分に当たります。

インターネット層

ネットワークインターフェイス層の上にある階層です。

インターネット層はネットワークでデータをやり取りする部分を担当しています。
TCP/IPでは**IP(Intenet Protocol)**が担当です。

IPは「パケット」という通信単位を使用し、データの通信を行います。
指定したIPアドレス宛にパケットを送り、通信します。

IPはデータを送り出すことのみを保証しており、データが最終地点まで送り出されるかどうかは、
次の層のトランスポート層を担当するTCP(Transmission Control Protrocol)が保証しています。

トランスポート層

インターネット層のIPが保証しなかった、データの転送を保証します。
すなわち、TCPは通信の信頼性を確保する役割を持ちます。

TCPは接続先に対してコネクションを張り、
コネクションを利用してデータの抜け漏れをチェックします。
(TCPは「コネクション型」と分類される)

コネクションには「確立」と「開放」という状態があり、
コネクションが確立されるときも、開放されるときも、
接続先・接続元の合意に基づいて行われます。

そして、データを転送する際には、
送信側はデータを送信し、受信側は確認応答を返すことによって、
送信側と受信側がデータが正しく届いたかを確認しあってデータ転送を行います。

このコネクションによって、データ転送の高い信頼性は確保されています。

アプリケーション層

トランスポート層の上にはアプリケーション層が存在します。

この層では、具体的なアプリケーションやメール、HTTPなどを実現します。
個々のプログラム間でのデータの形式などを取り決めています。

まとめ

ざっくりと書いてしまいましたが、
間違いや訂正箇所がある場合は以下のTwitterまでお知らせいただければと思います!

» 会社員Rintaro@Space (@Space____Tech) | Twitter

参考文献

Webを支える技術 HTTP,URI,HTML,そしてREST

https://employment.en-japan.com/engineerhub/entry/2020/02/13/103000

https://ascii.jp/elem/000/000/438/438944/#:~:text=TCPの高い信頼性,のシーケンスを説明する。