TCPとUDPを並べて比べる
| 観点 | TCP | UDP |
|---|---|---|
| データの扱い | 順序のあるバイト列 | 独立したデータグラム |
| 接続の確立 | 接続状態を管理する | UDP自体に接続確立手順はない |
| 再送・順序制御 | 備える | UDP自体は備えない |
| フロー・輻輳制御 | 備える | 必要に応じて上位の仕組みで対応 |
| ヘッダー長 | 通常20バイト以上 | 8バイト |
| 共通する情報 | 送信元・宛先ポート番号、チェックサム | |
TCPではアプリケーションが1回で送った単位と、相手が1回で読み取る単位は一致するとは限りません。UDPはデータグラム単位を保ちますが、到達や順序は保証しません。
シーケンス番号は「バイト数」で進む
TCPのシーケンス番号はパケットの個数ではなく、データの位置を示します。ACKの確認応答番号は、通常、相手が次に受信したい位置です。
シーケンス番号1,000から500バイトを送り、相手がそこまで連続して受信できた場合:
次に送るデータの先頭も1,500です。SYNとFINはそれぞれシーケンス空間を1つ消費するので、接続開始・終了を含む設問では別に数えます。
MTUからデータ長を求める
MTUが1,500バイト、IPv4ヘッダーが20バイト、TCPヘッダーが20バイトと指定されている場合、1つのIPパケットに入るTCPデータは次の長さです。
1,500 − 20 − 20 = 1,460バイト
この計算では、MTUに含まれるIPヘッダーとTCPヘッダーを差し引きます。ヘッダーのオプションやIPv6など、条件が変わる場合は問題文の値を使います。「いつでも1,460」と暗記しないことが大切です。
「何を守る制御か」で区別する
フロー制御は受信側が処理できる量を考慮し、輻輳制御はネットワークの混雑を考慮して送信を調整します。受信側に余裕があっても、途中の経路が混雑していれば送信量の調整が必要です。
TCPの接続開始はSYN → SYN+ACK → ACKの流れです。接続要求を待つサーバーの状態はLISTEN。過去問では、番号の計算・状態遷移・制御の目的を別々に整理すると読みやすくなります。
実際の性能は通信条件と上位の処理にも依存します。またDNSはUDPだけでなくTCPも使います。「このアプリケーションは常にこの方式」と決めつけず、設問の条件を確認しましょう。
学んだ内容を、問題で使ってみる。
午前Ⅱの関連過去問を6問出題します。順番はランダムです。
関連する過去問 6問へ →対象の過去問を見る(6件)
- TCPの輻輳制御BBR(2023春 問4)
- TCPデータの最大長(2023春 問5)
- TCPのシーケンス番号(2024春 問9)
- TCPとUDPの共通フィールド(2024春 問10)
- UDPを使うRIP(2025春 問10)
- TCPサーバーの待受状態(2025春 問11)
参考資料
仕組みの確認に用いた技術仕様です。本文の計算例・図解は当サイトによる説明で、IPAの公式解説ではありません。
誤記に気づいた場合は、記事名と該当箇所をお問い合わせフォームからお知らせください。