ネットワークって。。。#25(TCPとUDP)
ヘッダ。。。
- 文書においてページ上部にある、本文とは別の領域
- コンピュータにおいて、データの先頭に置かれる補足データ
- ガス用ヘッダー ガスを複数地点に分岐して供給するための装置
- 鉄道車両における、窓の上部にある金属製の補強板
ウィキペディアによれば、上記のような解説がありますが、ここでいうヘッダは、2.の意味です。
つまりは、通信を行う上で、実際に送受信するデータとは別に、送受信に必要な補足情報がデータの先頭に置かれるものです。
まあ、食料品とかに貼られているラベルみたいなもんです。
商品名が何で、賞味期限とか原材料とか、あと原産地とか。。。
IPヘッダ
IPヘッダは、レイヤ3(ネットワーク層)の話なので、ここでは、詳しくは説明しませんが(ちなみに今はレイヤ4(トランスポート層)の話です。知ってました?笑)、通信ヘッダとして、今回説明するUDPヘッダやTCPヘッダの前にIPヘッダっていうのが、くっついています。
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つの意味を持ちます。
- CWR:輻輳(ふくそう)によりウィンドウサイズを小さくした(ECEフラグとセット)
- ECE:ネットワークが輻輳している
- URG:緊急に処理すべきデータが含まれている
- ACK:確認応答番号フィールドが有効である(コネクション確立時以外は常に1である必要有)
- PSH:受信したデータを、すぐに上位のアプリケーションに渡す必要がある
- RST:何らかの異常を検出し、コネクションを強制的に切断
- SYN:コネクションの確立時に使用
- FIN:今後送信するデータがなく、コネクション切断を要求
ウィンドウサイズ(16ビット)
受信側が、送信側に通知するもので、同じTCPヘッダに含まれる前述の確認応答番号の位置から、受信可能なサイズ(オクテット数)を通知します。
チェックサム(16ビット)
を付加した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に比べて、データ通信をより保証する必要がある為、色々な制御が必要になり、フィールド数も多く、かつ複雑になるんですね。。。
ただ、皆さんの身近なところで話をすると、、、
例えば、下図のスマホの設定。。。
これって、11個どころか無数の設定があり、かなり複雑ですよね。
これに比べれば、TCPヘッダの設定って、たったの11個です。。。
少しは、気が楽になりましたか?笑
まとめ
今回は、以上になります。
今回で、TCPとUDPの話は終わりです。次回からはルーティングプロトコルについて書いていきます。
最後まで読んで頂き、ありがとうございました。
【参考書籍】