冬期講習 2026-2027、募集中。総復習は売りません。90分×完全1対1で、穴だけを塞ぎます 詳しく →
電話 0422-27-7828チャットで質問無料相談を予約

武蔵野個別指導塾の特徴

高校情報I TCPとUDP—信頼性を支える働きと用途の条件を対応させる|武蔵野個別指導塾

学習のイメージ写真 武蔵野個別指導塾
X LINE Facebook

音声連絡と記録転送の要求を比べ、再送を待つ理由とUDPを使うアプリの工夫を整理します。

よくあるのは、高校生が再送のない方式ではアプリも工夫できないと考える場面です。通信方式が受け持つ働きと、アプリケーションが追加できる働きは分けて考えます。TCPは確認応答や再送、順序制御によって順序の整ったデータの流れを届けようとします。UDPはそれらを自動では行わず、アプリ側で必要な対策を選べます。出方には、通信記録から欠落と再送を追う型、用途の要求から方式を選ぶ型、誤った説明を条件付きで直す型があります。

届け方の役割を分ける

通信では、送信側が渡したデータがいつもそのまま受信側へ届くとは限りません。途中で失われたり、異なる順序で到着したりすることがあります。受信側で使う順序が重要なら、到着順にそのまま渡すだけでは困ります。また、送信側は自分が送ったという事実だけでは、相手が受け取ったかどうかを判断できません。

TCPは、接続を確立してから、アプリに順序の整ったバイトの流れを提供する方式です。確認応答は受信状況を送信側に知らせ、送信側は必要に応じて再送します。順序制御により、先に届いた後続部分を待機させ、欠けた部分を補ってから順序を整えます。確認応答が失われる場合もあるため、単に「応答がないから元のデータは届いていない」とは決められません。再送された同じデータを重ねてアプリに渡さない仕組みも必要です。

UDPは、アプリが渡したデータをデータグラムというまとまりで送る方式です。UDP自体は到着の確認、欠落分の再送、順序の調整を行いません。そのため、受信側には欠落や順序の逆転が起こり得ます。ただし、UDPを使うアプリが番号や応答を独自に付け、必要なデータを再び求める設計は可能です。UDPが対策を禁じているわけではありません。

図1のように、方式が提供する機能と、その上でアプリが判断する処理を別の段に置くと整理できます。例えばアプリ側で「期限を過ぎた音声は再生しない」と決めることも、「欠けた記録をもう一度要求する」と決めることもできます。必要な機能をどちらが担うかは、設計の条件として明示します。

図1 TCPとUDPの働きとアプリ側の工夫

図1のTCP側には確認応答、再送、順序制御をまとめました。UDP側の空欄は工夫が不可能という意味ではなく、アプリ側で目的に合わせて決める余地を表します。音声なら欠落した部分を待たずに先へ進める場合がありますが、その結果は元の音声と完全に同じとは限りません。

TCPを選んでも、通信が永久に成功する保証はありません。回線の断絶や相手の停止が続けば、アプリは失敗を受け取り、再試行や中止を判断する必要があります。またTCPが届けたことと、相手のアプリが内容を正しく保存したことは別です。保存完了が必要なら、その結果をアプリ間で確認します。

UDPは確認や再送を標準の働きとして待たないため、待ち方を設計しやすい場合があります。しかし、UDPなら常にTCPより速いとは言えません。ネットワークの混雑、アプリ独自の確認や再送、受信側の処理などによって結果は変わります。方式名だけから実際の到着時間を決めず、求める品質と条件を先に置きます。

基本例題:記録の欠けた部分を追う

展示の記録を順に送る学習用の場面です。記録は先頭からA、B、Cの3部分に分けられています。TCPを使い、最初の送信でAとCは受信側に到着し、Bは途中で失われたとします。Aの確認応答は送信側に届き、Bは再送で到着します。ほかの障害はないものとします。受信側のアプリへ渡す順序と、Bを補う働きを答えてください。A、B、Cは説明のための部分であり、TCPがアプリの書き込み単位をそのまま保存するという意味ではありません。

図2のように、まずAが到着します。次にBは失われ、CはBより先に到着します。受信側はCを先にアプリへ渡さず、順序を整えるために保持します。

図2 欠けたBの再送と記録を渡す順序

1行ずつ追います。

  1. Aが到着し、先頭から連続する部分としてアプリに渡せます。
  2. Bが到着していないので、Cが届いていてもその前に欠けがあります。
  3. 受信状況を示す確認応答などを手掛かりに、送信側は必要なBを再送します。
  4. 再送されたBが到着すると、Bに続いて保持していたCを順に渡せます。
  5. アプリが受け取る順序はA、B、Cです。欠けを補う働きは再送、順に渡す働きは順序制御です。

答えを元の条件に戻すと、最初に失われたBは再送で補われ、先に着いたCもBの後に入ります。順序が正しくなることと、到着までの待ち時間が短いことは別です。この例ではCが先に届いても、Bを待つ時間が生じます。実際の確認応答は受信状況を表すもので、この図の矢印の数が実際の応答数を決めるものではありません。

もし再送されたBも届かなければ、この条件のようには完了しません。さらに再送を試みる場合がありますが、通信が続けられなければ失敗として扱います。したがって「TCPならどんな障害でも必ず記録が保存される」という結論には進めません。受信側のアプリが保存したかを知るには、別途、保存結果を返す必要があります。

標準例題:音声連絡と記録転送を選ぶ

文化展示の連絡係が、会場の状況を音声で知らせます。古い音声を後から聞くより、多少の欠けがあっても現在の状況を早く聞くことを優先します。一方、展示後の集計記録は、多少待っても内容を欠かさず順に受け取りたいとします。両方とも通信が失敗する場合は利用者に知らせるものとします。音声と記録のそれぞれについて候補を1つ選び、理由と残る課題を答えてください。

まず音声の要求を取り出します。古い部分を待つ利益が小さく、到着期限を過ぎた音声を捨てる判断ができます。この条件ではUDPを候補にし、アプリ側で届いた音声の順序や期限を見て再生する設計が考えられます。欠落による聞き取りにくさは残るため、重要な指示が伝わったかは別の確認方法が必要です。

次に記録の要求を取り出します。部分の欠落や順序の乱れを補い、順序の整った流れを渡すTCPが候補です。再送を待つために時間が延びることがあります。さらに保存先の容量不足などでアプリの保存が失敗する可能性があるため、保存完了の応答まで確かめる設計にします。

条件を元に戻して点検すると、音声は古い部分を待たない選択と合い、記録は欠けを補って順に渡す選択と合います。ただし、これは提示された優先条件に基づく候補です。音声でも内容を正確に残す必要が強ければ別の設計を考えます。記録もUDP上に確認と再送を組み込めますが、その処理をアプリ側で設計する必要があります。

発展例題:UDPの上に確認を設計する

小さな掲示の更新をUDPで送ります。学習用の条件として、更新には番号1、2、3を順に付け、受信側は受け取った番号を返信します。送信側は各番号の返信を一定時間待ち、届かなければ同じ番号を再送します。受信側は同じ番号を再び受け取っても更新を二重に適用せず、返信はもう一度送るものとします。最初の送信では1、2、3が届きますが、2の返信だけが失われます。次に送られる番号と、最終的な更新の適用回数を番号順に答えてください。再送とその返信は届くものとします。

  1. 受信側は1、2、3をそれぞれ受け取り、各更新を1回適用します。
  2. 送信側に届く返信は1と3です。2の返信は失われます。
  3. 送信側は2について期限まで返信を得られないので、2を再送します。
  4. 受信側は2が既に適用済みと判断し、更新を重ねずに返信を再び送ります。
  5. 最終的な適用回数は番号1、2、3の順に1回、1回、1回です。

返信がないことは、元の更新が届かなかった証拠にはなりません。この例では更新2は届き、返信だけが失われました。答えを元の記録に戻すと、2は2回受信されても適用は1回です。番号を見ずに再送分を処理すれば、同じ更新を重複して適用するおそれがあります。

この設計はUDP自体をTCPに変えるものではありません。確認、期限、重複の扱いをアプリが追加したものです。また、指定した条件以外の障害では完了を保証できません。何度試しても返信が来ないときに無限に待つのではなく、試行を打ち切って未確認と表示するなどの失敗時の扱いも必要です。番号3が2より先に到着する条件なら、順序が必要な用途では保留する規則も別に要ります。

誤答を直す:応答なしの意味

ある人が発展例題の更新2について「返信がないので2は届いていない。再送分を必ず新しい更新として適用する」と答えました。この説明は、データが届かない場合と返信が失われる場合を区別していません。送信側から見える事実は、期限まで返信が届かなかったことです。それだけでは受信側の適用状況を確定できません。

図3のように、実際には更新が届いた後の返信が失われる経路があります。送信側は再送してよいものの、受信側が同じ番号を新しい更新と扱えば二重適用になります。番号を照合し、適用済みなら再適用せず返信するという規則に直します。

図3 応答の欠落と重複適用を防ぐ判断

図3では、返信の欠落と更新の欠落を混同しないことが修正の出発点です。番号が同じでも別の更新として扱う設計なら、この修正は使えません。その場合は更新を識別できる情報を別に設ける必要があります。逆に、再送が禁止されるという結論も誤りです。何を再送し、受信側が重複をどう処理するかまで書いて初めて、失敗時の動きを検討できます。

練習問題

以下はそれぞれ独立した学習用の条件です。指定の形で答えてから解答を確認してください。

  1. TCPで資料の先頭からD、E、Fを送ります。DとFが先に到着し、Eは失われ、再送で到着しました。他の障害はありません。アプリへ渡す順序と、Fが先に渡されない理由を答えてください。
  2. 遠隔操作画面に現在位置を繰り返し送ります。古い位置を遅れて表示するより、新しい位置を優先し、多少の欠落を許します。候補となる方式を1つと、アプリ側で古い情報を扱う方法を1つ答えてください。
  3. UDPで番号7の通知を送り、受信側は適用後に返信します。通知は届きましたが返信が失われ、送信側は同じ番号を再送します。受信側は番号を記録し、重複を適用しない条件です。通知の受信回数と適用回数をそれぞれ答えてください。再送は届きます。
  4. 記録をTCPで送り、受信側には順序どおり届きました。しかし保存先への書き込みが失敗しました。送信側が保存成功と判断してよいか、必要な確認とともに答えてください。
  5. ある通信でUDPを使ったところ、アプリ独自の確認と再送が多数発生しました。「UDPは常にTCPより速い」という主張を、速度に関わる条件を1つ挙げて修正してください。

練習問題の答えと解き方

  1. 順序はD、E、Fです。Dの後にEが欠けている間は、先着したFを順序どおりに渡せないため待ちます。再送されたEが到着すれば、Eの後にFを渡せます。元の条件に戻すと、失われたEは補われ、FはEの後に置かれています。TCPの流れを説明するための区分であり、実際のアプリへの渡され方の区切りを指定するものではありません。

  2. UDPが候補です。アプリで各位置情報の新旧を見分け、古いものが遅れて届いたら表示せずに捨てる方法があります。これなら過去の位置を待ち続けることを避けられます。ただし新旧を判断する情報が必要です。欠落した間の位置は不明であり、必ず最新の位置が届く保証もありません。重要な操作の完了確認は、位置表示とは別に設計します。

  3. 受信は2回、適用は1回です。最初の通知を受けた時に1回適用し、返信が失われたため同じ番号が再送されます。受信側は2回目を重複と判定して適用しません。送信側が確認できるよう、重複の場合にも返信する規則を加えられます。受信記録に戻すと番号7は2回現れますが、適用の記録には1回だけ現れます。

  4. 保存成功とは判断できません。TCPで順序どおり届いた事実は、アプリの保存処理の成功を意味しないからです。受信側が書き込み結果を確認し、成功または失敗をアプリ間の応答として返す必要があります。応答が届かない場合も成功と断定せず、未確認として扱います。失敗後の再試行では、既に保存された内容を重ねて登録しない扱いも考えます。

  5. UDPを使っても常にTCPより速いとは限りません。例えば独自の確認と再送で待ち時間が増えることがあります。混雑や相手側の処理も到着時間に関わります。元の条件では多数の確認と再送が起きているため、方式の名前だけから速度の大小は決められません。比較するには、用途と通信条件をそろえて結果を確かめます。

覚えておくこと

TCPは確認応答、再送、順序制御で順序の整った流れを支えます。
UDP自体は到着確認や再送を行わず、アプリで対策を追加できます。
応答がないとき、元のデータと応答のどちらが失われたかは直ちに決まりません。
方式は欠落への許容、待ち時間、失敗時の扱いから選びます。
通信の到着とアプリの保存完了は別に確認します。

「UDPでは再送できない」と答えたら、方式自身の機能とアプリが追加する処理を別々に説明できるか確かめます。「TCPなら必ず保存できる」と答えたら、通信の完了後に保存が失敗する場面を追います。個別指導では、送信、到着、応答、適用を紙に並べ、どの事実を送信側が知っているかを一つずつ確認します。用途の要求から待つ範囲を決めると、TCPとUDPの選択理由が具体的になります。

読んで終わりにするか、ここから変えるか。

武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。

まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。

本気になった日が、入塾の日。

お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。

電話は年中無休。365日、24時間、お電話可能。

チャットで質問チャット
無料相談を予約する 電話 0422-27-7828電話 LINE チャット
で質問