入社前勉強⑤-1 TCP、UDP/トランスポート層 ポート番号、データ構造、TCPコネクション確立~終了まで

こんばんわ!SEINANです。もう、入社しちゃったのですが、入社する前にこれだけはやっておこう!というTCPIPについて途中になってしまっていたので、続けたいと思います。ジャンルを分けるために入社前としています。今回も難しかったですが、まとめていきたいと思います。2回にわけます!!

前回までは、TCP/IPの4階層のうち最下層のネットワークインターフェース層とインターネット層、そしてその2階層を連携するARPを勉強しました。今回は、その上の階層のトランスポートです。

トランスポート層について

この階層は、IPでパケットを分割して送信するのでそのデータ順序を管理したり、アプリケーションを適切に管理するといった働きがあります。そして、この階層で主に広く使われているプロトコルはTCPUDPです。
TCPは正確ですが遅いコネクション型の通信です。ファイル転送などに使われます。データの呼び名はセグメントといいます。
UDPは正確ではないが速いコネクションレス型の通信です。リモート会議などのリアルタイムな通信に使われます。データの呼名はデータグラムです。

※コネクション、コネクションレスはだいぶ前の記事でも書きましたが復習もかねて・・・
コネクション型はデータの送信側と受信側で相互に確認しながら行う方法です。 送信しますが準備いい?はい、OKです!じゃ送ります!といったような感じです。コネクションレス型は反対に受信側で準備ができているか関係なくガンガン送信してしまう方法です。相手の確認を待たないので早い通信ができます。

ポート番号

TCP、UDPにはポート番号という番号があります。これは複数のアプリケーションから1つを特定するものです。上位のアプリケーションを認識します。仮にPCがメールとWEBのアプリを使い、メールサーバーとWEBサーバーがあるとします。PC側の要求によってサーバーは返答しますが、この時メールかWEBかどちらに返したらいいかわかりません。この識別をするのがポート番号になります。このポート番号は0~65535の数字で、PC側(クライアント側)は1024~65535の番号、サーバー側は0~1023が使われ、サーバー側のポート番号を、ウェルノウンポートと呼ばれIANAという組織で管理されています。

ポート例

UDPデータグラムの構造

UDPデータグラム

TCPセグメントの構造

TCPセグメント

画像4

※2 MSSとは?
MSSとは、Ethernetヘッダ、IPヘッダ、TCPヘッダを取り除いたデータサイズです。TCP通信機器同士取り扱えるデータサイズを確認して少ない方でやりとりするようです。

コネクションの確立、終了について

TCP通信にてホスト同士でやりとりしてから通信が始まります。通信する前のお互いの意思確認的な感じですね!上図のTCPセグメントのControlBitsの、SYN、ACK、FIN のフラグを1にして確認を行います。このコネクション確立時にオプションでTCPセグメントのWindowのサイズの相互確認も行います。

コネクションの確立

コネクション確立

3回のやり取りで意思確認をすることを3wayHandShake(3ウェイハンドシェイク)といいます。この時点ではTCPヘッダ内でのやりとりなのでデータ(ペイロード)の中身はやりとりしません。データはないですが、データサイズを1として送信しています。

コネクションの終了

コネクション終了

確立とは違い終了するときは相手が受信が終わっていない可能性があるので、送信終了=コネクション終了ではありません!!

まとめ

トランスポート層ではTCP、UDPのプロトコルが多くつかわれています。UDPはデータ名称をデータグラム、TCPではセグメントと呼びます。TCPはコネクション型通信でホスト同士細かくやり取りしながら行います。セグメントにシーケンスNoとアックNoがあり、初回はランダムで決まります。送信するときにシーケンスNoを使い、それに応じるときはシーケンスNo+データサイズとなり、これがアックNoとなります。UDPはコネクションレスで受信側の状況関係なく送信する事で速さを求めることができます。通信時メールやWEBなどアプリケーションが複数ある場合は、その中から該当するものを1つ特定しないとうまくいかないので、それを識別するためにポート番号が存在します(メールならメール、WEBならWEB同士になるように)。TCPは3wayhandshakeという方法でコネクションを確立します。この時TCPヘッダのControlBitsのSYN、ACKのフラグが関係します。コネクションを終了するときはControlBitsのFINとACKのフラグが関係しますが、送信終了したからと言ってコネクションが終了するわけではありません。受信側が受信終了したらコネクション終了となります。

感想

今回はここまでにします。ここからは、図がないとわかりずらいので時間かかりそうなので2回目とします。あと眠いです(笑)
何か間違っていたりしたらご指摘ください。お疲れさまでした。


この記事が気に入ったらサポートをしてみませんか?