こんにちは!kossyです!
今回は、TCP/IP通信について記述します。
そもそもTCP/IPって?
TCP/IPとは、TCP「Transmission Control Protocol」とIP「Internet Protocol」の英語の頭文字を取って組み合わせた用語です。
ここでProtocolという言葉が出てきました。
プロトコルについて調べてみました。
プロトコルとは、手順、手続き、外交儀礼、議定書、協定などの意味を持つ英単語。通信におけるプロトコルとは、複数の主体が滞りなく信号やデータ、情報を相互に伝送できるよう、あらかじめ決められた約束事や手順の集合のこと。コンピュータ内部で回路や装置の間で信号を送受信する際や、通信回線やネットワークを介してコンピュータや通信機器がデータを送受信する際に、それぞれの分野で定められたプロトコルを用いて通信を行う。英語しか使えない人と日本語しか使えない人では会話ができないように、対応しているプロトコルが異なると通信することができない。
人間同士が意思疎通を行う場合に、どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、というように2つの階層に分けて考えることができるが、コンピュータ通信においても、プロトコルの役割を複数の階層に分けて考える。階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下のプロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを気にせずに通信を行うことができる。電話機の操作法さえ知っていれば、地中の通信ケーブルや通信会社の施設で何が起きているか知らなくても通話できるのと同じである。
出典:
http://e-words.jp/w/%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB.html
いろいろと小難しいことが書いてありましたが、インターネットにおける通信規約という認識で大丈夫そうです。
TCP/IPのそれぞれの特徴って?
次にTCP/IP通信の違いについてです。
TCP通信は接続相手を確認してから送受信をする点がIP通信とは異なります。
このため、IP通信と比べ、信頼性は高いが送受信のスピードが劣ります。
TCP/IPの階層モデル
TCP/IP通信には階層モデルなるものがあるようで、この論点は避けては通れなさそうなのでまとめてみます。
TCP/IPには4つの階層があり、
・アプリケーション層(アプリケーションで使う通信の動きを決める層。 HTTP, FTP, DNS等)
・トランスポート層(ポートを元に宛先のアプリケーション層にデータを渡す層。 TCPがここに該当)
・ネットワーク層(IPアドレスを元にデータを宛先まで伝達する層。 IPがここに該当)
・ネットワークインターフェース層(ネットワークに接続するハードを決める層。)
に分かれています。
この4つの層に分けることで、仮に仕様変更があった場合に、変更が必要な層のみ変更するに留めることが出来ます。
仮に1つのプロトコルで構成されていると、仕様変更のたびに、全体を入れ替える必要性が出てきます。
通信時の流れ
簡単に書くとこの順になります。
アプリケーション層
↓
トランスポート層
↓
ネットワーク層
↓
ネットワークインターフェース層
わかりやすい解説をされている記事を見つけたため、引用させていただきました。
以下、引用です。
⑴送信時は上から下の層にデータが流れて、送信データには各層のヘッダが付加される
送信時、アプリケーション層で作成したデータは、トランスポート層に渡され、
その後、トランスポート層からはインターネット層に渡され、
さらに、インターネット層からはネットワークインターフェース層にデータが渡されます。
ここで重要なのが、各層を通過する時には通過層のデータを、
送信データにヘッダという形で付加するということです。
受信時はこの逆にデータが流れていきます。⑵各層は役割分担されていて、それぞれ明確な使命をもっている
例えば、トランスポート層はTCPやUDPと言ったプロトコルを持っていますが、この層の使命は「アプリケーション層からもらったデータを宛先のアプリケーション層に渡す事」であり、TCPやUDPというのは、「使命を果たす手段」になります。
各層には複数のプロトコルが存在し、それらのプロトコルを全くの別物としてとらえてしまい、TCP/IP全体像の理解をし辛くしているように思います。TCPもUDPも宛先のアプリケーション層にデータを渡すという使命は同じです。手段(プロトコル)は違えど使命は同じと思えば、なんとなく理解できそうな気がしますね。⑶送信先の各層は、送信元の自分と同じ層が送った情報を元に使命を全うする
例えば、インターネット層の使命は「IPアドレスを元に、データを宛先のコンピュータまで届ける事」です、送信元のインターネット層では自分と宛先のIPアドレスの情報を送り、送信先では自分のIPアドレス宛かをチェックし、自分宛でない場合は宛先のIPアドレスを元にデータを転送し、自分宛の場合はデータを受け取ります。⑷通信時は各層のプロトコルを組み合わせて行う
よくある例として、webページを表示する場合は
アプリケーション層のプロトコルはHTTPで、トランスポート層はTCP、インターネット層はIP、ネットワークインターフェース層はEthernet。というように、各層で複数のプロトコルから適切なものを選んで通信を行います。また、TCP/IPという言葉は、TCPプロトコルとIPプロトコルをあわせて通信する事を指すだけでなく、アプリケーション層からネットワークインターフェース層までのプロトコルすべてを指してTCP/IPとも呼びます。
参考にしたサイト:
https://qiita.com/genreh/items/05186691fbf8c10a4a48
ここまで抑えればある程度通信周りの知識はつきそうです。