ネットワークって。。。#25(TCPとUDP)

今回は、UDPヘッダとTCPヘッダについて。。。

 

f:id:thmat:20200812114939j:plain

 

ヘッダ。。。

  1. 文書においてページ上部にある、本文とは別の領域
  2. コンピュータにおいて、データの先頭に置かれる補足データ
  3. ガス用ヘッダー ガスを複数地点に分岐して供給するための装置
  4. 鉄道車両における、窓の上部にある金属製の補強板

ウィキペディアによれば、上記のような解説がありますが、ここでいうヘッダは、2.の意味です。

 

つまりは、通信を行う上で、実際に送受信するデータとは別に、送受信に必要な補足情報がデータの先頭に置かれるものです。 

f:id:thmat:20200812142409p:plain

 

まあ、食料品とかに貼られているラベルみたいなもんです。

商品名が何で、賞味期限とか原材料とか、あと原産地とか。。。

 

IPヘッダ

IPヘッダは、レイヤ3(ネットワーク層)の話なので、ここでは、詳しくは説明しませんが(ちなみに今はレイヤ4(トランスポート層)の話です。知ってました?笑)、通信ヘッダとして、今回説明するUDPヘッダやTCPヘッダの前にIPヘッダっていうのが、くっついています。

f:id:thmat:20200812150242p:plain

 

IPヘッダには、送信元のIPアドレスや、宛先のIPアドレスプロトコル番号(TCPなら6番、UDPなら17番とか)などの、ネットワーク層で制御する情報が格納されています。

 

UDPヘッダのフォーマット

UDPヘッダは、送信元ポート番号、宛先ポート番号、パケット長、チェックサムから構成されます。

あっ、ポート番号って何?っていう人は、ネットワークって。。。#20を見返して下さいね。

 

送信元ポート番号(16ビット)

送信元のポート番号を示します。

ビット?っていう人がいたら、ネットワークって。。。#3を見て下さい笑

 

宛先ポート番号(16ビット)

宛先のポート番号を示します。

 

パケット長(16ビット)

UDPヘッダの長さと実際のデータの長さの和、つまりは全体の長さが格納されます。

 

チェックサム(16ビット)

チェックサムは、UDPのヘッダとデータの信頼性を提供するためのものです。

を付加したUDP擬似ヘッダっていうのを使って、16ビット単位で1の補数の和を求めて、更にその1の補数を格納します。

で、受信側は、逆計算し、16ビット全てが1となれば通信OKとなります。

 

???笑

 

まあ、 相手から送られてきたデータが間違いない事を、受信側で確認できる仕組みがある。。。くらいに覚えておけばいいでしょう。

私もそうします笑

 

 

TCPヘッダのフォーマット

UDPヘッダが4つのフィールドから構成されているのに対し、TCPヘッダは12のフィールドから構成されます。 (最後の1フィールド(8ビット)は16ビットで割り切れるように長さ調整の為、パディングで0を詰めているだけなので、実際は11のフィールドで構成されます。)

 

では、順番に解説していきます。

 

送信元ポート番号(16ビット)

送信元のポート番号を示します。

 

宛先ポート番号(16ビット)

宛先のポート番号を示します。

 

シーケンス番号(32ビット)

シーケンス番号を示します。

シーケンス番号については、ネットワークって。。。#22で述べたとおり、送信したデータの位置を表します。

 

確認応答番号(32ビット)

次に受信すべきデータのシーケンス番号を表します。

これは、確認応答番号から1を引いたシーケンス番号のデータまでを受信した事になります。

逆に送信側は、返された確認応答番号の前のデータまでは、正常に通信が行われていると判断する事ができます。

 

データオフセット(4ビット)

TCPヘッダの長さを表します。

長さの単位は、4オクテット(32ビット)で、後述のオプションフィールドを含まない場合、TCPヘッダの長さは、20オクテット(160ビット)となり、5が格納されます。

 

予約(Rserved)(4ビット)

将来の拡張のために用意されたフィールドです。

こういうのって、将来になっても使われた試しないんですけどね。。。笑

 

コントロールフラグ(8ビット)

1ビットずつ、それぞれ、1がセットされた時、下記の8つの意味を持ちます。

  1. CWR:輻輳(ふくそう)によりウィンドウサイズを小さくした(ECEフラグとセット)
  2. ECE:ネットワークが輻輳している
  3. URG:緊急に処理すべきデータが含まれている
  4. ACK:確認応答番号フィールドが有効である(コネクション確立時以外は常に1である必要有)
  5. PSH:受信したデータを、すぐに上位のアプリケーションに渡す必要がある
  6. RST:何らかの異常を検出し、コネクションを強制的に切断
  7. SYN:コネクションの確立時に使用
  8. FIN:今後送信するデータがなく、コネクション切断を要求

 

ウィンドウサイズ(16ビット)

受信側が、送信側に通知するもので、同じTCPヘッダに含まれる前述の確認応答番号の位置から、受信可能なサイズ(オクテット数)を通知します。

 

チェックサム(16ビット)

TCPチェックサムも、UDPとほぼ同じです。

を付加したTCP擬似ヘッダっていうのを使って、16ビット単位で1の補数の和を求めて、更にその1の補数を格納します。

で、受信側は、逆計算し、16ビット全てが1となれば通信OKとなります。

 

やっぱり、???

ですね笑

いいです。いいです。笑

 

緊急ポインタ(16ビット)

前述のコントロールフラグの3ビット目、URGが1の場合に有効となります。

緊急を要するデータの格納場所(データの先頭からの長さ(オクテット数))を示します。

一般的には、Webブラウザの中止ボタンを押した場合など、通信を途中で中断したりする時に使われます。

 

オプション(最大320ビットまで)

TCPによる通信性能を向上される為に利用されます。

代表的なオプションは下記のとおりです。(数字はオプション番号)

 0:End of Option List オプションの最後

 1:No Operation オプション間の区切り

 2:Maximum Segment Size 受信できるセグメントサイズを通知

 3:Window Scale ウィドウサイズフィールドを拡張

 4:SACK (Selective ACK) Permitted SACK利用可を通知

 5:SACK 欠けているデータの再送要求

 8:Time Stamp RTT(Round Trip Time)計算に血用

 

UDPに比べて、データ通信をより保証する必要がある為、色々な制御が必要になり、フィールド数も多く、かつ複雑になるんですね。。。

 

ただ、皆さんの身近なところで話をすると、、、

例えば、下図のスマホの設定。。。

f:id:thmat:20200813135802p:plain

これって、11個どころか無数の設定があり、かなり複雑ですよね。

これに比べれば、TCPヘッダの設定って、たったの11個です。。。

少しは、気が楽になりましたか?笑

 

 

まとめ

  1. データ通信では、データの前にヘッダと呼ばれる通信に必要な情報が付加されて通信が行われる。
  2. UDPヘッダは4個のフィールドから構成される。
  3. TCPヘッダは11個のフィールドから構成される。

 

 

今回は、以上になります。 

今回で、TCPUDPの話は終わりです。次回からはルーティングプロトコルについて書いていきます。

 

最後まで読んで頂き、ありがとうございました。

 

 

【参考書籍】

 

 

 

     

 

 

すまっとネット - にほんブログ村

にほんブログ村 教育ブログ プログラミング教育へ にほんブログ村 IT技術ブログ IT技術メモへ
PVアクセスランキング にほんブログ村
にほんブログ村

 
人気ブログランキングへ