0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TCPって実際なにしてんの?(1.ヘッダ編)

Last updated at Posted at 2024-04-27

これはなに

TCPの勉強をしたので忘れないようにまとめる。
主にヘッダ、コネクション管理、順序制御、再送制御、輻輳制御について書く。
OSI参照モデルの話はみんな書いているので書かない。

今回はヘッダ編。

参考文献:WEB+DB PRESS plusシリーズ TCP技術入門
https://gihyo.jp/book/2019/978-4-297-10623-2

目次

1.概要
2.ヘッダ
3.コントロールフラグ
4.おわりに
5.参考文献

1.概要

TCPはOSI参照モデルの第四層であるトランスポート層で動作するプロトコル。
特徴として高信頼性が挙げられる。
しかし信頼性が高いと言っても「 じゃあ実際なにをしてるの?どんな機能があるから信頼性が高いの? 」という疑問が芽生える。
そこを本記事では書く。
TCPに実装されている主な機能はコネクション管理、順序制御、再送制御、輻輳制御である。

2.ヘッダ

TCPでは通信をするとき、送りたい情報にヘッダと呼ばれるメタデータを付加して送信する。
メタデータとは情報に対する情報のことで、例を出すと宛先や送信元、情報本体の長さなどの情報が含まれる。
ここにいろいろなお役立ち情報を書くことでTCPは高信頼性を実現している。
なのでここに何が書いてあるかを知らないと、TCPが何をしているのかを知ることはできない。

ヘッダの構成

TCPヘッダは以下の構成になっている。

  • 送信元ポート番号
  • 宛先ポート番号
  • シーケンス番号
  • 確認応答番号
  • データオフセット
  • 予約領域
  • コントロールフラグ
  • ウィンドウサイズ
  • チェックサム
  • 緊急ポインタ
  • オプション
  • パディング

大事な物だけ解説する。

送信元ポート番号

読んで字の如く、通信で使う送信元のコンピュータのポート番号が書かれている。
全長16ビット。

宛先ポート番号

宛先のコンピュータのポート番号が書かれている。
全長16ビット。

シーケンス番号

送信する情報の順番を表す番号が書かれている。
TCPでは送りたい情報が長すぎる場合、セグメントと呼ばれる単位に分割して送信する。
分割したはいいが順番がごっちゃになると困るのでシーケンス番号が割り振られる。
全長32ビット。

確認応答番号

次に受け取るべきセグメントのシーケンス番号を受信側が書く領域。
シーケンス番号0のセグメントを受信側が受け取ったらここに1と書いて返事をするイメージ。
イメージ的にはそうだが実際はシーケンス番号+受信したデータサイズを返す。
全長32ビット。

データオフセット

TCPヘッダの長さが書かれている。
後述のオプション領域が可変長なのでこれが必要となる。
これがないと受信側はどこまでがヘッダで、どこからが本体なのかがわからないので困る。
全長4ビット。

予約領域

将来的に使うかもしれないから空けてある領域。
0で埋める。
全長3ビット。

コントロールフラグ

いろいろなフラグが詰め込まれている領域。
全長9ビットで9分割されている。
イメージとしては9個のON/OFFスイッチが詰め込まれている感じ。

ウィンドウサイズ

受信側が一度に受信できるデータ量を送信側に通知するための領域。
受信側にはバッファがあり、ある程度はデータを蓄積できるが限度があるため、それを伝える。
送信側はそれを超えるデータ量を送信できない。
全長16ビット。

オプション

最大セグメント長や選択制ACKの有無を決めるのに使う領域。
最初の1バイトにオプションの種類を記述し、次の1バイトにオプション領域のサイズを書き、最後に内容を書く。
全長は後述のパディングと合わせて0~320ビットの可変長。

パディング

オプション領域長が32ビットの倍数でない場合、ここを0で埋めてキリを良くするための領域。
全長は0~32ビットの可変長。

3.コントロールフラグ

ヘッダの中でコントロールフラグという領域が出てきた。
この中に9個のフラグが入っている。
大事なものをいくつか解説する。

ACK

確認応答番号領域が有効であることを表す。
TCPにおける通信は基本的に何かに対する応答であるので、通信の初め以外は常に1になっている。

RST

強制的に通信路を切断するときに1を格納する。
HTTPの持続的接続している際に、終了時間が来たときなんかに有効化される。
何らかの異常があった時も有効化される。

SYN

通信の初めだけ有効化する。
これが有効化されていると受信側はコネクションの確立のための応答を返す。

FIN

通信の終わりを示す。
これを有効化したセグメントを送出した側はその後、これに対する応答があったら送信路を切断する。

4.おわりに

次回はコネクション管理について書く。
次回:コネクション管理編

5.参考文献

WEB+DB PRESS plusシリーズ TCP技術入門
https://gihyo.jp/book/2019/978-4-297-10623-2

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?