← 学習ガイド一覧STUDY GUIDE / 10

ネットワーク 通信成功と業務成功を分ける

プロトコルの役割、HTTPの安全性と冪等性、再送による重複処理を理解する。

独自解説・独自図解

学習目標

通信の各層がどこまで保証するかを説明できるようにする。パケットが届いたこと、暗号化されたこと、注文が1回だけ確定したことは別の問題である。

役割の比較

技術主な役割それだけでは保証しないもの
DNS名前に対応する情報を解決通信内容の暗号化、業務処理の成功
IPネットワークをまたぐパケット配送到着、順序、再送
TCP順序のある信頼できるバイトストリームメッセージ境界、業務の1回だけの実行
TLS通信の機密性・完全性と相手認証の基盤アプリ内の権限制御、入力値の安全性
HTTP資源に対する要求・応答の意味タイムアウト時に処理が未実行であること

TCPの再送や順序制御はアプリの取引単位とは違う。TLSで守られた通信でも、利用者の権限チェックがなければ他人のデータを参照できてしまう。TCP RFC 9293、TLS 1.3 RFC 8446

HTTPメソッドの性質

メソッド安全なメソッドか冪等か代表的な意味
GETはいはい表現の取得
HEADはいはいGET相当のヘッダを取得、本文なし
PUTいいえはい対象資源の状態を指定した内容にする
DELETEいいえはい対象資源との対応を除去
POSTいいえ一般には保証しない資源固有の処理を依頼

ここで「安全」は暗号的安全性ではなく、利用者が状態変更を要求しないというHTTPの意味論。「冪等」は同一要求を複数回行ったときの意図した効果が1回と同じことで、毎回の応答コードまで同一である必要はない。GETに業務上の削除操作を割り当てるのは意味論に反する。RFC 9110 第9章

応答がないとき何が分かるか

注文確定後の応答消失と要求IDによる重複抑止
注文確定後の応答消失と要求IDによる重複抑止(独自作成図)

判断例

注文POSTの後にタイムアウトした。未処理だと決めつけて新規注文を送り直すと二重登録になる可能性がある。独自の要求IDを付け、サーバがIDの初回受付と結果を管理する設計なら、同一IDの再試行を同じ処理として扱える。IDの範囲、保存期間、同一IDで異なる本文を送った場合、並行到着時の一意性も定める。これはPOST全体に標準で備わる性質ではなく、アプリの契約として実装する補強策である。

転送時間の計算例

100MBを100Mbit/sで送る。ここではMを10の6乗、1Byte=8bit、ヘッダや再送を無視すると、100×8/100=8秒。実効速度が帯域の80%なら10秒。往復遅延、接続確立、サーバ処理は別途加わる。MBとMiB、Mbit/sを混同しない。

間違えやすい点

  • TCPが信頼性を持つからといって、切断後に相手アプリがどこまで処理したかは分からない。
  • HTTPSだから安全な入力とは限らない。SQLインジェクションなどは別の対策が必要。
  • HTTPがステートレスでも、アプリはCookie等を用いてセッションを管理できる。
  • 全てのHTTPがTCP上とは限らない。HTTP/3はQUICを使うため、接続図では前提のバージョンを明記する。

確認問題

  1. DELETEを2回実行して2回目が404でも、ただちに冪等性違反か? → いいえ。意図した削除効果で判断する。
  2. タイムアウトは注文が失敗した証拠か? → いいえ。結果照会や重複を防ぐ再試行設計が必要。

出典と適用上の注意

図は独自の業務シーケンス。HTTP/3の経路は公式RFC 9114参照。TLSの古い版やSSLを前提にした過去問は、当時の条件と現在の設計を区別する。