トランスポート層のプロトコル

このページでは、TCPの3ウェイハンドシェイク・シーケンス番号・ウィンドウ制御と、UDPの特徴、ポート番号によるアプリケーションへの振り分けがわかります。

  • 一言で言うと:
    • 「届けるだけ」のIPを補って、確実に届ける(TCP)か、速さを優先する(UDP)かを選ぶ層の話
    • もう1つの役割は、ポート番号で、ノードの中のどのアプリケーションに渡すかを決めること

確実に届ける(TCP・TCPヘッダ・3ウェイハンドシェイク)→ 速く届ける(UDP)→ アプリに渡す(ポート番号によるアプリケーション間の通信)

覚え方の軸

  • TCPとUDPは「書留郵便か、普通郵便か」
    • TCPは、コネクション型。届いたか確認し(ACK)、順番をそろえ(シーケンス番号)、落ちたら再送する。確実だが遅め
    • UDPは、コネクションレス型。確認も再送もしない。速いが、信頼性は低い
  • TCPは「始めに3回あいさつ」
    • SYN → SYN+ACK → ACK の3ウェイハンドシェイクでコネクションを作る
  • TCPヘッダの3つの番号は「何番目か・次は何番か・いくつまとめて送れるか」
    • シーケンス番号(何番目のデータか)、ACK番号(次に受け取るべき番号)、ウィンドウサイズ(ACKなしで続けて送れる量)
  • 使い分けは「全部確実に届く必要があるか」
    • TCPは、HTTP、FTPなど(1文字でも欠けたら困る)
    • UDPは、DHCP、NTP、SNMPなど(短いやりとり、多少落ちても困らない、速さ優先)

TCPとUDP:確実に届けるか、速く届けるか(★)

  • トランスポート層:
    • IPを補い、データ送信の品質や信頼性を上げるための層
    • プロトコルには、TCPとUDPがある

① TCP

  • TCP:
    • 下位層のIPは、データ通信の安全性を保証しないコネクションレス型通信
    • その補完のために、送達管理、伝送管理の機能を持ったコネクション型プロトコル
  • TCPを使うプロトコル:
    • HTTP、FTPなど、データがすべて確実に伝わることが求められるプロトコル
  • TCPヘッダの項目:
    • 送信元ポート番号、宛先ポート番号、シーケンス番号、ACK番号、データオフセット、予約、コードビット、ウィンドウサイズ、チェックサム、緊急ポインタ、オプション(可変長)、パディング

TCPヘッダの主な項目(★)

項目 中身
シーケンス番号 TCPスタックが上位層から受け取ったデータが、MSS(受信可能な最大セグメントサイズ)より大きい場合は、TCPセグメントの最大長に収まるように分割する。シーケンス番号は、分割前のどの部分だったかを表す数値
ACK番号 ACK応答のときに使う、次に受信すべきシーケンス番号
ウィンドウサイズ 受信ノードからの確認応答(ACK)なしで、連続して送れるデータ量。大きくすると伝送効率が上がるが、受信ノードの能力によってはオーバフローなどの弊害も出る
  • シーケンス番号の例え:
    • 長い手紙を何枚かに分けて送るときの「ページ番号」。順番がばらばらに届いても、並べ直せる
  • ACK番号の例え:
    • 「3ページまで受け取ったよ。次は4ページをちょうだい」の「4」
  • ウィンドウサイズの例え:
    • 「返事を待たずに、まとめて何ページまで送ってよいか」。多いほど速いが、受け手の机(バッファ)からあふれると困る
  • チェックサムの対象:
    • IPヘッダのチェックサム(ヘッダチェックサム)の対象は、ヘッダ部分だけ
    • TCPヘッダとUDPヘッダのチェックサムの対象は、データ部分も含む

例題(ウィンドウサイズと速度)

  • 問題:
    • ウィンドウサイズが64,000バイト、往復の時間(送ってからACKが返るまで)が20ミリ秒のとき、最大でどれだけの速度で送れるか
  • 考え方:
    • ACKを待たずに送れるのは、往復1回あたり64,000バイトまで
    • 速度 = ウィンドウサイズ ÷ 往復時間
  • 答え:
    • 64,000バイト × 8 = 512,000ビット
    • 512,000ビット ÷ 0.02秒 = 25,600,000ビット/秒 = 25.6Mbps
  • 検算:
    • 25.6Mbps × 0.02秒 = 512,000ビット = 64,000バイトで、元に戻る
  • わかること:
    • 回線がどれだけ速くても、ウィンドウサイズが小さいと、遠い相手(往復時間が長い)とは速く通信できない

② TCPでのコネクション確立(3ウェイハンドシェイク)

  • 3ウェイハンドシェイク:
    • TCPでコネクションを確立するために、コネクションの確立要求パケット(SYN)と確認応答パケット(ACK)をやりとりすること

3ウェイハンドシェイクの流れ(★)

  1. SYN:
    • クライアントからサーバへ、SYN(つないでいいですか)を送る
  2. SYN+ACK:
    • サーバからクライアントへ、①に対するACKと、サーバからのSYNを送る(いいですよ、こちらからもつないでいいですか)
  3. ACK:
    • クライアントからサーバへ、②に対するACKを送る(いいですよ)
  • 3ウェイハンドシェイクの例え:
    • 電話で「もしもし、聞こえますか」→「はい、聞こえます。そちらも聞こえますか」→「はい、聞こえます」。お互いに確かめてから本題に入る
  • TCPコネクションの識別:
    • 宛先IPアドレス、宛先TCPポート番号、送信元IPアドレス、送信元TCPポート番号の4つで識別する
  • セキュリティとのつながり:
    • 3ウェイハンドシェイクを悪用するのが、SYN Flood攻撃(SYNだけ大量に送り、ACKを返さない)やSYNスキャン

③ UDP

  • UDP:
    • 送達管理をしない、コネクションレス型通信
    • だから、TCPでやりとりしていたシーケンス番号やACK番号などは扱わない
    • データ落ちが起きても再送しないので、高速な分、信頼性は低い
  • UDPヘッダの項目:
    • 送信元ポート番号、宛先ポート番号、セグメント長、チェックサムの4つだけ(TCPよりずっとシンプル)
  • UDPを使うプロトコル:
    • DHCP、NTP、SNMPなど
  • UDPの例え:
    • 普通郵便やチラシのポスティング。届いたかは確かめないが、手軽で速い。動画のライブ配信のように、1コマ落ちても再送より先に進むほうがよい通信にも向いている
  • 注意(新しい情報):
    • DNSは、ふつうの問合せはUDP 53番だが、応答が大きいときやゾーン転送ではTCP 53番も使う
    • 最新のHTTP/3は、TCPではなく、UDPの上で動くQUICというプロトコルを使う(UDPで速さを出し、確実に届ける仕組みはQUICが持つ)
    • 試験では、上の分類(TCPはHTTP・FTP、UDPはDHCP・NTP・SNMP)で覚えておけばよい

④ アプリケーション間の通信

  • トランスポート層のもう1つの役割:
    • アプリケーション間の通信を実現すること
    • 各アプリケーションは、トランスポート層のヘッダ(TCPヘッダ、UDPヘッダ)にある「宛先ポート番号」を見て、自分宛てのデータかどうかを判断する

アプリケーション間の通信の流れ

  • 送信側:
    • トランスポート層のTCPで、パケットに、宛先のポート番号を指定したTCPヘッダを付ける
    • ネットワーク層に渡されたパケットには、宛先のIPアドレスを指定したIPヘッダが付く
  • 受信側:
    • IPヘッダのIPアドレスで、受信側のノードにパケットが届く
    • TCPヘッダの宛先ポート番号で、そのパケットを使うアプリケーションに届く
  • 例え:
    • IPアドレスで「マンション」に届き、ポート番号で「何号室(どのアプリ)」かが決まる

混同しやすいペア

  • TCP / UDP
    • TCPは、コネクション型。送達管理・伝送管理をする。確実だが遅め(HTTP、FTP)
    • UDPは、コネクションレス型。再送しない。速いが信頼性は低い(DHCP、NTP、SNMP)
  • シーケンス番号 / ACK番号
    • シーケンス番号は、分割したデータが分割前のどの部分かを示す
    • ACK番号は、次に受信すべきシーケンス番号
  • ウィンドウサイズ / MSS
    • ウィンドウサイズは、ACKなしで連続して送れるデータ量
    • MSSは、受信できる最大のセグメントの大きさ(これより大きいデータは分割する)
  • SYN / ACK
    • SYNは、コネクションの確立要求
    • ACKは、確認応答
  • 3ウェイハンドシェイク(TCP) / ハンドシェイク(TLS)
    • TCPの3ウェイハンドシェイクは、SYN・SYN+ACK・ACKでコネクションを作る
    • TLSのハンドシェイクは、サーバ認証、暗号方式の決定、鍵の共有をする
  • IPのチェックサム / TCP・UDPのチェックサム
    • IPのヘッダチェックサムは、ヘッダ部分だけが対象
    • TCP・UDPのチェックサムは、データ部分も対象
  • IPアドレス / ポート番号(アプリケーション間の通信)
    • IPアドレスは、どのノードに届けるかを決める
    • ポート番号は、ノードの中のどのアプリケーションに届けるかを決める
  • TCPヘッダ / UDPヘッダ
    • TCPヘッダは、シーケンス番号、ACK番号、ウィンドウサイズなど項目が多い
    • UDPヘッダは、送信元・宛先ポート番号、セグメント長、チェックサムの4つだけ

← 07 ネットワークの目次に戻る

タイトルとURLをコピーしました