TCP UDP
トランスポート層にはTCPとUDPというものがありこれによってアプリケーションに直接通信サービスを提供します
TCP UCPの用途
TCPとは
TCPは、Iインターネットにおいて標準的に利用されているプロトコルとなる。TCPは、IPの上位プロトコルでトランスポート層で動作するプロトコル。ネットワーク層のIPとセッション層以上のプロトコル(例:HTTP、FTP、Telnet) の橋渡しをする役目を持っている。
UDP
UDPは信頼性が高くはないが、高速性やリアルタイム性を求める通信に使用されるプロトコルとなります。
TCPヘッダ
オフセット | オクテット | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
オクテット | ビット | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | 送信元ポート | 送信先ポート | ||||||||||||||||||||||||||||||
4 | 32 | シーケンス番号 | |||||||||||||||||||||||||||||||
8 | 64 | 確認応答番号(ACK がセットされている場合) | |||||||||||||||||||||||||||||||
12 | 96 | ヘッダ長 | 予約 0 0 0 |
N S |
C W R |
E C E |
U R G |
A C K |
P S H |
R S T |
S Y N |
F I N |
ウィンドウサイズ | ||||||||||||||||||||
16 | 128 | チェックサム | 緊急ポインタ(URGがセットされている場合) | ||||||||||||||||||||||||||||||
20 … |
160 ... |
オプション(ヘッダ長が5より大きければ、必要に応じて最後まで0でパディングする) … |
-
送信元ポート(16ビット) – 送信側のポート番号
-
送信先ポート(16ビット) – 受信側のポート番号
-
シーケンス番号(32ビット) – 2つの役割がある。
- SYNフラグがセットされている場合 (1)、初期シーケンス番号である。実際の先頭データバイトのシーケンス番号と対応する確認応答の確認応答番号は、このシーケンス番号に1を加えた値になる。
- SYNフラグがセットされていない場合 (0)、このセッションにおけるこのパケットの先頭データバイトの累積シーケンス番号である。
-
確認応答番号(32ビット) – ACKフラグがセットされている場合、受信側が期待する次のシーケンス番号を格納している。(もしあれば)それまでの全バイト列の受信を確認済みであることを示す。最初に互いにACKを送る際は、相手側の初期シーケンス番号を確認するだけで、データは含めない。
-
ヘッダ長(4ビット) – TCPヘッダのサイズを32ビットワード単位で表す。ヘッダの最小サイズは5ワードで、最大サイズは15ワードである。すなわち、ヘッダ部は20バイトから60バイトまでの大きさであり、21バイトめからの40バイトはオプションとなる。TCPセグメント内の実際にデータが始まる位置を示すことにもなるため、データオフセットとも呼ぶ。
-
予約(3ビット) – 将来の利用のために予約されたビット列であり、常に 0 をセットする。
-
フラグあるいは制御ビット列(9ビット) – 9個の1ビットのフラグがある。
- NS(1ビット) – ECN-nonce 輻輳保護(RFC 3540 でヘッダに追加)
- CWR(1ビット) – 輻輳制御ウィンドウ縮小 (Congestion Window Reduced)。ECEフラグがセットされたTCPセグメントを受信した際、輻輳制御機構で応答するときにセットする。(RFC 3168 でヘッダに追加)
- ECE(1ビット) – ECN-Echo を示す。
- SYNフラグがセットされている場合 (1)、ECNを利用可能であることを示す。
- SYNフラグがセットされていない場合 (0)、通常送受信時にIPヘッダに Congestion Experienced フラグがセットされたパケットを受信したことを示す。(RFC 3168でヘッダに追加)
- URG(1ビット) – 緊急ポインタ・フィールドが有効であることを示す。
- ACK(1ビット) – 確認応答番号フィールドが有効であることを示す。最初のSYNパケットを除く以降の全パケットでこのフラグをセットする。
- PSH(1ビット) – プッシュ機能。バッファに蓄えたデータをアプリケーションにプッシュする(押しやる)ことを依頼する。
- RST(1ビット) – コネクションをリセットする。
- SYN(1ビット) – シーケンス番号の同期。通信する両方で最初のパケットだけ、このフラグをセットする。他のフラグはこのフラグの値によって意味が変化したり、このフラグの値によって有効/無効が決まる。
- FIN(1ビット) – 送信終了を示す。
- ウィンドウサイズ(16ビット) – 受信ウィンドウの大きさ。このセグメントの送信側がその時点(確認応答番号フィールドにあるシーケンス番号以降)で受信可能なバイト数を指定する。詳しくはフロー制御の節とウィンドウスケーリングの節を参照。
- チェックサム(16ビット) – ヘッダおよびデータの誤り検出用の16ビットチェックサム。後述の#誤り検出と#チェックサムの計算も参照。
- 緊急ポインタ(16ビット) – URGフラグがセットされている場合、最新の緊急データバイトのシーケンス番号からのオフセットを示す。
-
オプション(0から320ビットまで可変で、32ビット単位で変化する) – ヘッダ長フィールドによって、このフィールドの長さが決まる。個々のオプションは、オプション種別(1バイト)、オプション長(1バイト)、オプションデータ(可変)から成る。オプション種別フィールドはオプションの種類を示し、オプションとしては必ず存在するフィールドである。オプションの種類によって扱い方が違い、後続の2つのフィールドの有無も異なる。存在する場合、オプション長フィールドはそのオプションの全長が格納されており、オプションデータ・フィールドにはオプションに関わる値が格納されている。例えば、オプション種別が 0x01 の場合、No-Op オプションであることを意味し、オプション長やオプションデータは存在しない。オプション種別が0の場合、End Of Options オプションであることを意味し、この場合も1バイトだけである。オプション種別が 0x02 の場合、最大セグメントサイズ (MSS) オプションであることを意味し、その後ろに1バイトのMSSフィールド長を指定するフィールドがある(値は 0x04)。この長さはオプションの全長であるため、オプション種別フィールドとオプション長フィールドのぶんも含んでいる。従って、MSS値は通常2バイトで表され、オプション長は4(バイト)となる。例えば、MSS値が 0x05B4 なら、MSSオプション全体の値は (0x02 0x04 0x05B4) となる。
- パディング – TCPヘッダが32ビット境界で終わるようにするために使われる。パディングは常に0である[6]。
一部のオプションはSYNがセットされているときだけ送信される。それらは以下で [SYN] で示している。各行の先頭は「オプション種別[, オプション長, オプション値](全ビット数)」の形式で示す。0(8ビット) – オプションリストの終了
-
- 1(8ビット) – 何もしない(NOP、パディング)。オプション・フィールドを32ビット境界に揃えるのに使う。
- 2,4,SS(32ビット) – 最大セグメント長(最大セグメントサイズ を参照) [SYN]
- 3,3,S(24ビット) – ウィンドウスケール(詳しくはウィンドウスケーリング参照)[SYN][7]
- 4,2(16ビット) – 選択確認応答が可能。[SYN] (選択確認応答を参照)[8]
- 5,N,BBBB,EEEE,…(可変長、N は 10, 18, 26, 34 のいずれか) – 選択確認応答 (SACK)[9]。最初の2バイトの後に選択確認応答される1から4ブロックのリストを32ビットの開始/終了ポインタで示す。
- 8,10,TTTT,EEEE(80ビット) – タイムスタンプと前のタイムスタンプのエコーを要求する
- 14,3,S(24ビット) – チェックサム方式変更要求。
- 15,N,…(可変長) – チェックサム方式が変更されて、そのチェックサムが16ビットより長い場合にこれでチェックサム値を示します
他のオプションは既に使われていないもの、実験的なもの、標準になっていないものなどである
3ウェイハンドシェイク
3ウェイ・ハンドシェイク (スリーウェイハンドシェイク, three-way handshaking) とは、TCP などにおいて使用されている、接続(コネクション)を確立するための手順。
以下3ウェイハンドシェイクのコネクション順番
①ホストAからBに対してコネクションを要求
制御ビット(SYN1 ACK0)
初期シーケンス番号:ランダムな値
(ここでは100)
確認応答番号:0
②ホストBはAからのコネクション確率の要求に応えると同時に、ホストBからもAに対してもコネクションの確率要求をする
制御ビット(SYN1 ACK1)
初期シーケンス番号:ランダムな値
(ここでは300)
確認応答番号:受信したシーケンス番号+1
③ホストAはBのコネクション確率に応える
制御ビット(SYN0 ACK1)
シーケンス番号:初期シーケンス番号+1
確認応答番号:受信したシーケンス番号+1
UDP
UDPは信頼性が高くはないが、高速性やリアルタイム性を求める通信に使用されるプロトコルとなります。
先ほどのTCPのようにチェックする項目が少ないため
データグラムも非常にシンプルになっている。
オフセット(ビット) | 0 – 15 | 16 – 31 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 送信元ポート番号 | 宛先ポート番号 | ||||||||||||||||||||||||||||||
32 | データ長 | チェックサム | ||||||||||||||||||||||||||||||
64+ | データ |
最後にTCPとUDPのまとめになります。