Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【NW】TCP/IPに置ける通信処理 

以前の記事で、TCP/IPプロトコル・スイートについて紹介を行いました。

rennnosukesann.hatenablog.com

今回は、TCPIPのプロトコルに則ってやり取りされるデータがどのようなものなのか、どのように処理されていくのかを追ってみます。

TCP/IPプロトコルによって扱われるデータ

わたしたちが遠くにすむ友人にものを送るとき、どうすればよいでしょうか。手紙を送るのであれば、手紙を封筒にいれ、切手を貼り、住所をしるし、郵便ポストにおくるのが良いでしょう。少し大きめの荷物を運ぶとするならば、配送物をダンボールで梱包し、宛先住所を貼って郵便局に送ってもらうのが良いかもしれません。このように、現実の世界では遠くの相手に物を送る場合は、送るものを保護する梱包や宛先情報などを送りたいものに付加する必要があります。

f:id:rennnosukesann:20180717205647p:plain

コンピュータ・ネットワークの世界も同様で、ホスト(コンピュータなどのネットワーク上の末端通信機器)間でメールやファイルなどの情報(コンテンツデータ)をやり取りするときには、通信を行うために必要な情報を付加する必要があります。ここで言う必要な情報とは、データのあて先アドレスや、データの送り主のアドレス等、プロトコルに則ってデータを送受信する上で必要な情報を指します。

ところで、TCP/IPでは通信に必要なプロトコルを階層構造でモデル化していました。上位のプロトコルは下位のプロトコルに支えられる形で存在します。最上位のプロトコル層であるアプリケーション層ではメールやファイルと言ったコンテンツデータが作成されます。このコンテンツデータが相手側ホストに送信されるとき、上位プロトコルから下位プロトコルへとデータが渡されてゆき、最終的に電気や光などの物理的な媒体を介して相手ホストに送信されます。

rennnosukesann.hatenablog.com

rennnosukesann.hatenablog.com

この上位から下位へとデータが渡される際に、各プロトコルで必要な情報を付加しています。この「必要な情報」は上位プロトコルのデータの先頭に付加されるため「ヘッダ」と呼ばれます。あたかも配送物を梱包材で包み、ダンボールに入れ、宛先住所を貼って郵便局に送るように、コンテンツデータも必要な情報を取り入れながら送信されていきます。

f:id:rennnosukesann:20180717205831p:plain

アプリケーション層ヘッダ

プロトコルが担うアプリケーションで必要となる情報をヘッダに含めます。
例えばメール転送を行うプロトコルであるSMTPであれば、送信元・あて先メールアドレスなどが含まれます。

トランスポート層ヘッダ

トランスポート層のヘッダには、主に接続するアプリケーションを識別するための送信元・あて先ポート番号を含んでいます。 例えば、代表的なトランスポート層プロトコルであるTCP/UDPはいずれもポート番号をヘッダに含んでいます。 またTCPの場合は再送制御を行うために通信コネクションを確立する必要があるのですが、コネクションの状態を確認するためのフラグ用ビット領域がヘッダに含まれています。

トランスポート層ヘッダのついたデータはセグメントと呼ばれます。

インターネット層ヘッダ

プロトコルがIPの場合、送信経路を決定するために必要な送信元・あて先IPアドレスを含みます。
その他、パケットがループしてしまったり、送信先ホストが見つからなかった場合に使用するパケット生存時間などの情報を含みます。

インターネット層ヘッダのついたセグメントはパケットと呼ばれます。

リンク層ヘッダ

通信する両ホストを一意に識別するため、送信元・あて先MACアドレスを含みます。 ちなみに、イーサネットを使用する場合フレームの整合性チェックのためのFCS(Frame Check Sequence)がパケットの付加されます。

リンク層ヘッダのついたパケットはフレームと呼ばれます。

参考

マスタリングTCP/IP