最初に
TCP, UDPについてヘッダーについてたまにいろいろ調べることがあるのでこの際にメモ書きでまとめておきます。
ググッた範囲で自分の理解で書いているので、間違っている部分は適宜修正していきます。
専攻は土木工学なので専門外のため、違っていたらご指摘くださると嬉しいです。
まずは、概要について、詳しくはググればいいので、ここでは簡単に。
ネットワークのプロトコル階層を見ると必ずでてくるOSI参照モデル。
ISO策定ではあるけど、でも実際にはRFCによるTCP/IPが利用されている。
よくOSI参照モデルとTCP/IPの関連について書いてあることもあるけど、実際にはお互いに意識しているわけではないので、TCP/IPでの○○はOSI参照モデルでは○○に相当とかって考える必要はありません。ここでは普通にTCP/IPについて記載します。
TCP/IPの5層モデル
第4層 アプリケーション
第3層 トランスポート
第2層 インターネット
第1層 ネットワークインタフェース
第0層 ハードウェア
第3層トランスポート層より下層ヘッダー構成
まずは、ざっくり図解。
以下、メモ書き。個人的に思い出すとき用なので、詳細はググってください。
-
第0層 ハードウェア(物理ヘッダ)
- プリアンブル
- イーサネット通信で送受信の同期を取り、フレームの始まりを合図するために用いる特別なビット列。NICが付与
- プリアンブル
-
第1層 ネットワークインタフェース(Ethernetヘッダ)
- タイプ
- Ehternetヘッダーのデータ部分のタイプが記載される。IPV4なら0x0800、IPV6なら0x86ddという16進数表記なので2Byte。
- データ部分は最低46Byte。足りない部分は0でPaddingされる。
- タイプ
-
第2層 インターネット(今回はIPV4ヘッダー)
- バージョン、4だから0100
- ヘッダー長 そのまま
- パケット長 そのまま
- プロトコル IPパケットのデータ部分のプロトコル。いろいろあるけどTCPなら6, UDPなら17が振られる
# 第3層 トランスポート層(TCP, UDP)のヘッダー構成
まずは、ざっくり図解
で、見た目の違いを箇条書きで
- 当たり前といえば当たり前だが両方とも送信元ポート、宛先ポートはある。
- チェックサムも両方ある。
- TCPにはコネクション確立のための3wayハンドシェイク(SYC, ACK, FIN etc)のコントロールフラグがある
- TCPにはデータの確実性保持のための仕組みがある。(シーケンス番号、応答確認番号 etc)
- UDPにはハンドシェイク等のコネクション確立がないので、データサイズを示すセグメント長がある。
- TCPはハンドシェイク後の通信でシーケンス番号と応答確認番号があるので、それでデータサイズが分かる。
- シーケンス番号 -> 相手から受信した確認応答番号
- 応答確認番号 -> 相手から受信したシーケンス番号+データサイズ
ここからは完全な個人的自己解釈
※ココから名自己解釈なので違っている場合があります。その場合はご指摘ください。
-
ヘッダーサイズ
- TCP 8 + 14 + 20 + 20 + 4 = 64Byte + アプリケーションデータ
- UDP 8 + 14 + 20 + 8 + 4 = 52Byte + アプリケーションデータ
-
TCPにおけるオーバーヘッドとは?
- 上のヘッダーサイズを見る限りはパケットのサイズ的なものではない。
- TCP特有のコネクション確立(ハンドシェイク)とその通信(再送機能等)によってそれらを含めたあらゆる物がオーバーヘッドとなりうる。ただ単に送りっぱな、UDPとの違いはそこにあると思われ。