• 締切済み

TCPのタイムアウトについて

ホストAとホストBの間でパケットを送信しラウンドトリップ時間を測定します。 1回目 データ送信     確認応答 2回目 データ送信     確認応答 3回目 データ送信     確認応答喪失 3回目のタイムアウト時間は1回目と2回目の計測(ラウンドトリップ時間と揺らぎ)を元に求めてるのでしょうか?

みんなの回答

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

再送タイムアウトでしたら,「TCPの実装によって異なる」が答えでしょうね. ・元祖TCP(4.2BSD) ・VJ-TCP ・TCP-vegas などなど,いろいろな実装があり,それぞれに再送タイミングの算出手段を工夫しています.

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

TCPの何のタイムアウトですか? 再送のタイムアウト? セッション切断のタイムアウト? それを明確にしないと答えは得られないと思いますよ.

hirohiro8888
質問者

補足

すいませんでした 再送のタイムアウトことです。

関連するQ&A

  • pingで社内LANの速度の計測

    pingで社内LANの速度を計測したいです pingコマンドで計測できるような事を書いています。 社内LANの速度=帯域 パケットの大きさ÷応答時間 pingコマンドによる計測は 指定したパケットサイズ×2÷応答時間(Mbytes/s) これを素人にもわかるように教えて下さい。 いくつかpingしてみました。 ping元はWindows11proです。 ==================== Windows11Proへ ==================== PS C:\Users\user1> ping 192.168.1.12 192.168.1.12 に ping を送信しています 32 バイトのデータ: 192.168.1.12 からの応答: バイト数 =32 時間 <1ms TTL=128 192.168.1.12 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.12 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.12 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.12 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 1ms、平均 = 0ms ==================== Windows server2019へ ==================== PS C:\Users\user1> ping 192.168.1.201 192.168.1.201 に ping を送信しています 32 バイトのデータ: 192.168.1.201 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.201 からの応答: バイト数 =32 時間 =2ms TTL=128 192.168.1.201 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.201 からの応答: バイト数 =32 時間 =1ms TTL=128 192.168.1.201 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 2ms、平均 = 1ms ==================== CentOS 8 Streamへ ==================== PS C:\Users\user1> ping 192.168.1.19 192.168.1.19 に ping を送信しています 32 バイトのデータ: 192.168.1.19 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.19 からの応答: バイト数 =32 時間 =1ms TTL=64 192.168.1.19 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.19 からの応答: バイト数 =32 時間 =1ms TTL=64 192.168.1.19 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 1ms、平均 = 0ms ==================== Ubunto 20.04LTSへ ==================== PS C:\Users\user1> ping 192.168.1.244 192.168.1.244 に ping を送信しています 32 バイトのデータ: 192.168.1.244 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.244 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.244 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.244 からの応答: バイト数 =32 時間 <1ms TTL=64 192.168.1.244 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 0ms、平均 = 0ms ==================== 他拠点のWindows11Proへ ==================== PS C:\Users\user1> ping 192.168.3.77 192.168.3.77 に ping を送信しています 32 バイトのデータ: 192.168.3.77 からの応答: バイト数 =32 時間 =4ms TTL=126 192.168.3.77 からの応答: バイト数 =32 時間 =3ms TTL=126 192.168.3.77 からの応答: バイト数 =32 時間 =3ms TTL=126 192.168.3.77 からの応答: バイト数 =32 時間 =3ms TTL=126 192.168.3.77 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 3ms、最大 = 4ms、平均 = 3ms 違う拠点にpingしても変わるけどLinuxにpingしても違う数値になります。 これらそれぞれの速さを教えてください。

  • TCP通信のプログラム(java)

    javaを使ってTCP通信のプログラムを作りました。 そのプログラムは次のような動作をさせたいですが、途中までしか動作確認がとれません。 1. 送信側で指定したバイト数のデータを送信する。それにかかった時間を計測する。 2. 送信されたバイトデータを受信する。届いたバイト数の確認をするとともに、受信にかかった時間を計測する。 3. 受信側は1.で行った処理と同じようにして、届いたバイト数分のデータを返信する。 4. 3.で送信側に送信されたデータを受信して、受信時間を計測する。届いたバイト数を確認する。 2.までは、正常に動作します。正常な動作とは、 送信側は、指定した数のバイトデータを送信して、それにかかった時間を計る。 受信側は、送信されたデータを受信して、それにかかった時間を計り、届いたバイト数を確認する。ちなみにこの2つの時間はほぼ同じになります。 ここまではできています。 ですが、送信側が受信側で届いたバイト数分のデータを送信し、送信側でそのデータを受信してその時間を測るというコード(//*受信処理*//という行から下)を追加するとうまくいきません。 受信側では、//*受信処理*//という行から下を追加すると、うまくいきません。 送信と受信処理のコードを載せます。 送信側(送信バイト数は入力させます) Socket sock = new Socket(host, port); BufferedOutputStream out = new BufferedOutputStream(sock.getOutputStream()); BufferedInputStream in = new BufferedInputStream(sock.getInputStream()); //*送信処理*// // 送信データを送信する。 int count = 0; // write()の回数 System.out.println("<データ送信処理>"); start = System.nanoTime(); // 計測開始時間 for (int i = 0; i < Data; i++) {   try {     out.write(i);     out.flush();     count++;   } catch (IOException e) {     System.err.println((count + 1) + "つ目のバイト:書き込みエラー");   } } stop = System.nanoTime(); // 計測終了時間 System.out.println("送信完了"); System.out.println("送信されたバイト数:" + count); // 送信スループットを計算する。 // 結果を表示する。 //*受信処理*// // 変数を定義する。 long startNs = 0; // 受信前の時間のナノ秒を返す。 long stopNs = 0; byte[] buf = new byte[1000000]; int total = 0, part; // ストリームの終わりに達し,-1が返されるまで受信する。 System.out.println("<データ受信処理>"); startNs = System.nanoTime(); while ((part = in.read(buf, 0, buf.length)) != -1) {   total += part;   System.out.println(part); } stopNs = System.nanoTime(); System.out.println("受信完了"); System.out.println("受信されたバイト数:" + total); // 受信スループットを計算する。 // 結果を表示する。 // 出力ストリーム・ソケットをクローズする。 out.close(); sock.close(); 受信側のコードは補足欄に載せます。このコードだと、 送信側の計測結果は表示されますが、受信側で受信時間や受信速度などが表示されません。 送信側で通信を強制終了すると、その後に受信側は、結果を表示します。 データを片道ではなく往復させて、それらの処理時間を計測したいのです。うまくいかないのでアドバイスを頂きたいです。 このコードのおかしい部分が分かる方はアドバイスをお願いします。 コードが見にくくて意味がわからないかもしれませんが、そうならば、データを往復させてその時間を測るためのアドバイスをお願いします。

    • ベストアンサー
    • Java
  • 「宛先ホストに到達できません」とは

    下記サイトのみ「宛先ホストに到達できません」となります。 その他のサイト(goo等)は接続できます。(ping応答あり) 「宛先ホストに到達できません」とはどういう時に出るのでしょうか? 自宅にある他PCも同現象です。 <ネット接続構成> インターネット-無線LAN(WZR-G144N)-PC <ping結果> Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\xxxxx>ping sfp.kyoraku.jp sfp.kyoraku.jp [1.1.81.114]に ping を送信しています 32 バイトのデータ: 192.168.11.1 からの応答: 宛先ホストに到達できません。 192.168.11.1 からの応答: 宛先ホストに到達できません。 192.168.11.1 からの応答: 宛先ホストに到達できません。 192.168.11.1 からの応答: 宛先ホストに到達できません。 1.1.81.114 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 C:\Users\xxxxx>ping www.goo.ne.jp www.goo.ne.jp [218.213.142.230]に ping を送信しています 32 バイトのデータ: 218.213.142.230 からの応答: バイト数 =32 時間 =67ms TTL=242 218.213.142.230 からの応答: バイト数 =32 時間 =66ms TTL=242 218.213.142.230 からの応答: バイト数 =32 時間 =66ms TTL=242 218.213.142.230 からの応答: バイト数 =32 時間 =56ms TTL=242 218.213.142.230 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 56ms、最大 = 67ms、平均 = 63ms C:\Users\xxxxx>

  • IPアドレスからコンピュータ名の逆引き

    IPアドレスからコンピュータ名の逆引き pingでコンピュータ名やドメイン名を打つとIPアドレスが分かりますが、pingでIPアドレスを打ってもコンピュータ名はわかりません。 >ping yahoo.co.jp yahoo.co.jp [183.79.135.206]に ping を送信しています 32 バイトのデータ: 183.79.135.206 からの応答: バイト数 =32 時間 =27ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =46ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =41ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =33ms TTL=51 183.79.135.206 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 27ms、最大 = 46ms、平均 = 36ms >ping 183.79.135.206 183.79.135.206 に ping を送信しています 32 バイトのデータ: 183.79.135.206 からの応答: バイト数 =32 時間 =14ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =16ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =37ms TTL=51 183.79.135.206 からの応答: バイト数 =32 時間 =17ms TTL=51 183.79.135.206 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 14ms、最大 = 37ms、平均 = 21ms IPアドレスから、コンピュータ名やドメイン名を出す方法はありますか? 使いたい場面としては、 ローカルネットワーク上で、192.168.12.10が使いたいのに、誰かに踏まれていて使えない。 192.168.12.10にpingしてみたら、応答があるので、確かに誰かが使っている。 192.168.12.10は誰が使っているの? という場面です。

  • IPヘッダの識別番号とTCPヘッダのシーケンス番号の違いってなんですか

    ネットワークの勉強を始めたばかりのものです。質問文に不可解な文章があるかもしれませんが、ご了承ください。 私の読んでいる参考書で、識別番号は「MTUによってデータを分割配送する際に使用する」と書いてあり、シーケンス番号は「ある程度データサイズが大きい場合、MMSによってデータを固定長に分割し、分割の組み立てに使用する」とありました。 つまり、送信側がMMSによってデータをA・B・Cの3つに分解し、Aを送信したところ、MTUがAのデータ量以下だったので、Aをパケットで分割して送信し、受信側で組み立てる・・・という見解で合っていますか? もし合っていた場合、「パケット1つが届いたよー」という確認応答は送信側に送られるのでしょうか?それとも確認応答はパケットの組み立てが終ってから送られるのでしょうか?

  • TCPでのACK確認応答のメカニズム

    TCPでの通信では、3ウェイハンドシェイク後、データ送信とACK確認応答の返答をしあい信頼性のある通信を行うと思うのですが、あるテキストによるとネットワークの関係上、順番どおりにTCPセグメントが届かない場合があるとの事でした。 データ受信ホストが発するACK確認応答の中に次の送信のシーケンス番号が指定されているともありましたので、TCPセグメントが順番どおりに来ないと通信が上手くいかないと思うのですが、思い違いでしょうか? このあたりのやり取りについて、教えて頂けないでしょうか?是非お願いします。

  • ping の結果を解説願います

    192.168.101.101 に ping を送信しています 32 バイトのデータ: 192.168.101.4 からの応答: 宛先ホストに到達できません。 192.168.101.4 からの応答: 宛先ホストに到達できません。 192.168.101.4 からの応答: 宛先ホストに到達できません。 192.168.101.4 からの応答: 宛先ホストに到達できません。 192.168.101.101 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 損失0%ってところも受信4ってところも意味が分かりません。宛先ホストに到達できないのなら損失100%でないですか? 解説お願いします。

  • WINSOCKでTCPのステータスを調べたい

    通信異常が発生するのでwiresharkでパケットモニタするとRetransmissionが発生していました。 そのデータには肯定応答コマンドとモニタコマンドが重複して送信されていました。単純に考えるとRetransmissionのパケットデータはそのままKEEPされてモニタコマンドのパケットとは区別されるような気がするんですが・・・。 そこでTCPが再送状態にあるならば上位からは新たなコマンドを出さないように修正したいと考えていますがいろいろ調べてもステータス取得出来るような物が見つかりません。 ご教授願います。

  • TCP/IPで同じパケットが2つ送信される。なぜ?

    Windows8 PC上のブラウザから、LAN上の機器(HTTPサーバ)にアクセスしようとしています。 Wiresharkでそのときの通信を覗いてみると、PCから送信されるパケットはなぜか2回同じものが短時間の間に連続して送信されているようです。その理由に心当たりがある方がいらっしゃいましたら、教えて下さいませんか? また、設定で回避できるのであれば、その設定項目などもわかるとありがたいです。 詳しい状況です。Wiresharkのキャプチャ画像と合わせて見て下さい。 *PC側IPは192.168.0.12、HTTPサーバは192.168.0.18です。 *Wiresharkでは、パケット6と7、9と11、10と12、14と15は内容的に同じパケットのようです(seqとackが同じ) *同じパケットのうち、前の方のパケットではIPパケットのチェックサムが0000hとなっているようです(チェックサムオフロード?)。後の方のパケットには、具体的なチェックサムの値が入っています。 *前のパケットが短い場合(54バイトとか)、後のパケットにはパディングとして00hが追加されて、60バイト長となるようです。それ以上の長さのパケットは、前述のチェックサム以外には違いは見られません。 *同じ2つのパケットは、極短い期間で連続して送信されているので、HTTPサーバからの応答タイムアウトで再送しているという風には思えないです。 *PC側のブラウザは、ChromeでもIEでも同じように2つの同じパケットが送信されていました。しかし、LANの外(ルーター外のインターネット)に接続するときは、このように2つの同じパケットはWiresharkで見ると出ていないようです。 *ちなみに、PC側のLANはRealtekのGigabit Ether(有線)です。 よろしくお願いいたします。

  • 回線速度とTCPスループットについて

    質問を読んでいただきありがとうございます。 インターネット回線の速度について質問です。 TCPでは送信ホストは相手から通知されたウインドウを超える量のデータを送信することはできないためウインドウサイズとRTT(ラウンドトリップタイム)が決まれば最大のスループットが決まると言われてます。 ウインドウズサイズ x 8/ RTT時間(秒) = 最大スループット 一般的に考えてウインドウサイズを64Kbytesとした場合、100mbpsを出すにはRTT5m秒以内でなければならない計算になります。 64Kbytes x 8 / 0.005 = 102,400,000mbps (RTTが5m秒の場合) 64Kbytes x 8 / 0.006 = 85,333,333mbps (RTTが6m秒の場合) ということはRTTが5m秒以内のホストと通信をしない場合は100mbpsの回線でも1Gbpsの回線でも理論上はTCPの限界速度は同じということでしょうか?それともRTT5m秒以上でも1Gbpsのほうがスピードが出る要因がありますでしょうか? 長々とすいませんが、よろしくお願いします。