• 締切済み

ネットワークの瞬断について

TCP/IPのネットワークにおいて、メンテナンスなどの際によく「瞬断が発生する」と言いますが、瞬断とはどの程度のことを言うのか気になっており、考え方など教えていただきたいです。試しに聞いてみた人は、感覚的に ・1秒程度の断は通信にほとんど影響がない。通信にほとんど影響のない断を瞬断という。 ・分単位だと通信に影響があり、通信がエラーで終了することもあり、瞬断といわない。 というようなイメージをもっているようですが、もう少し具体的にイメージしたいです。 【質問(1)】 今のところは、TCPの再送タイムアウト(RTO)を超えないような程度の通信断のことを瞬断というのかと考えているのですが、正しいでしょうか?また、RTOはOSにより計算方法が異なったり、カスタムできるようなので、一般にはどの程度なのかも教えていただきたいです。 ※UDPはロストするが、TCPならデータロストの起こらないような通信断のことを瞬断というのかと考えています。 【質問(2)】 通信断の時間がRTOを超えた場合、応答のないパケットは再送されなくなるかと思いますが、その時点でそのTCPコネクションは終了するのでしょうか? あるいは、次のパケットから転送が続くのでしょうか(最終的に転送完了したデータは抜けのあるデータになるのでしょうか)? 【質問(3)】 瞬断程度でエラーが起こらないようにアプリ側でコントロールすべき、という話も聞くのですが、アプリ側でコントロールとは具体的にどのようにするのでしょうか?

みんなの回答

回答No.2

> 【質問(1)】 > 今のところは、TCPの再送タイムアウト(RTO)を超えないような程度の通信断のことを瞬断というのかと考えているのです> が、正しいでしょうか?また、RTOはOSにより計算方法が異なったり、カスタムできるようなので、一般にはどの程度なのかも教えていただきたいです。 > ※UDPはロストするが、TCPならデータロストの起こらないような通信断のことを瞬断というのかと考えています。 「瞬断」とは、通信障害が発生しても少し待てば自動的に復旧するレベルの障害のことを言います。 それがどれくらいの時間かは、その言葉を使う人の立場によっていろいろだと思います。 例えば、一般ユーザーがプロバイダから「メンテナンスのため1:00~2:00の間に数回瞬断します」と言われたら、Webページの読み込みが失敗しても、少し待って再読み込みすれば正常に受信できるというレベルだと思います。 アプリ開発者が「瞬断」を考えるなら、受信待ち中のデータが来ない(つまりデータロストした)場合に、どうやってそれを検出してどうやって以降の処理を継続するか考える話だと思います。 通信スタック開発者が「瞬断」を考えるなら、パケットロストが発生した時にパケット再送制御をどうするか考える話だと思います。 > 【質問(2)】 > 通信断の時間がRTOを超えた場合、応答のないパケットは再送されなくなるかと思いますが、その時点でそのTCPコネクションは終了するのでしょうか? > あるいは、次のパケットから転送が続くのでしょうか(最終的に転送完了したデータは抜けのあるデータになるのでしょうか)? TCPのRTO(Retransmission Time Out)は、パケットロストを検出して再送制御を開始するまでの待ち時間です。つまりRTOを超えたら応答のないパケットは再送制御を実施してパケットを再送します。あなたが言っているのはその再送を何度繰り返しても応答がなくて再送をあきらめるケースを言っているのだと思いますが、それはTCPのキープアライブ機能でタイムアウトを検出するか、アプリ側の応答待ち制御でタイムアウトを検出して、以降の動作をどうするか(再度送信するか、一旦切断して再接続するか、ユーザーに通信障害を伝えるか)考える話です。 TCPは応答のないパケットをあきらめて、途中が抜けているデータをアプリに通知することはありません。 なお、送信側でsendが成功していても、その送信データが最後まで全て相手のアプリに届く保証はありません。 (その保証をしたければ、アプリレベルでデータ送達確認をする必要が有ります) > 【質問(3)】 > 瞬断程度でエラーが起こらないようにアプリ側でコントロールすべき、という話も聞くのですが、アプリ側でコントロールとは具体的にどのようにするのでしょうか? ここで言っている「瞬断」は、前述の通りTCPのキープアライブ機能でタイムアウトを検出するか、アプリ側の応答待ち制御でタイムアウトを検出して、以降の動作をどうするか(再度送信するか、一旦切断して再接続するか、ユーザーに通信障害を伝えるか)考える話だと思います。

  • t_ohta
  • ベストアンサー率38% (5292/13826)
回答No.1

(1)厳密な定義はないでしょうが、サービス側でメンテをする立場から言うと、LANケーブルを引っこ抜いて挿し直す程度は瞬断って考えますし、冗長構成のサーバやネットワーク機器なら待機系に切り替わるまでの時間は瞬断と判断するので、5秒くらいまでの接続断なら瞬断って言うでしょうね。 (2)アプリケーションの作り次第じゃないでしょうか。 昔、テレビ電話のソフトを使って実験した事がありますが、通信中のLANケーブルを抜いて1分くらい経ってから挿し直したら、何事も無かったかのように通信を再開し通話が出来ていました。 特に相手との通信が切断されたと表示される訳でもなく、ケーブルを挿し直した後に再接続の操作をした訳ではありません。 (3)一番はタイムアウトが発生した時にソケットをどう扱うかと言ったところでしょう。 IPのセッションはあくまでもアプリケーション側が破棄するかどうかを判断するので、通信経路の途中で一時的な障害が発生していても、アプリケーション側は知る由もありません。 あくまでも相手からのパケットが届かないと言うだけで、届かなかったらどう処理するかをアプリケーション側で作りこむだけです。 届くまでボーっと待つだけのアプリケーションならいつまでもセッションは切れずに待ってます。その上で、足りないデータがあれば繰り返し相手に再送要求をアプリケーション層から送り続ければ通信は成り立ちます。

関連するQ&A