特定のサイトからページを取得する際の大きな遅延


11

次の問題があります:Hackageからページを取得すると、大きな遅延(約30秒)が発生します。それ以降のリクエストは高速ですが、数分間接続しないと、問題が再発します。

この問題の興味深い点は次のとおりです。

  • それはこの特定のサイトに固有のものです(ハック)—他のサイトでも同様の問題は発生しません(そして、私はかなりの数を訪れます)。
  • 私のISPに固有のようです。他の場所から接続する場合、そのような問題はありません。
  • DNSや接続の問題とは関係ありません。実際、TCP接続はすぐに確立されます。次のサンプルパケットキャプチャからわかるように、時間がかかりすぎるのはHTTP応答です。

      1 0.000000000 192.168.1.101 -> 66.193.37.204 TCP 66 41518 > http [SYN] Seq=0 Win=13600 Len=0 MSS=1360 SACK_PERM=1 WS=16
      2 0.205708000 66.193.37.204 -> 192.168.1.101 TCP 66 http > 41518 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1440 SACK_PERM=1 WS=128
      3 0.205759000 192.168.1.101 -> 66.193.37.204 TCP 54 41518 > http [ACK] Seq=1 Ack=1 Win=13600 Len=0
      4 0.205846000 192.168.1.101 -> 66.193.37.204 HTTP 158 GET /packages/hackage.html HTTP/1.1 
      5 0.406461000 66.193.37.204 -> 192.168.1.101 TCP 54 http > 41518 [ACK] Seq=1 Ack=105 Win=5888 Len=0
      6 28.433860000 66.193.37.204 -> 192.168.1.101 TCP 1494 [TCP segment of a reassembled PDU]
      7 28.433904000 192.168.1.101 -> 66.193.37.204 TCP 54 41518 > http [ACK] Seq=105 Ack=1441 Win=16480 Len=0
      8 28.434211000 66.193.37.204 -> 192.168.1.101 HTTP 1404 HTTP/1.1 200 OK  (text/html)
      9 28.434228000 192.168.1.101 -> 66.193.37.204 TCP 54 41518 > http [ACK] Seq=105 Ack=2791 Win=19360 Len=0
     10 28.434437000 192.168.1.101 -> 66.193.37.204 TCP 54 41518 > http [FIN, ACK] Seq=105 Ack=2791 Win=19360 Len=0
     11 28.635146000 66.193.37.204 -> 192.168.1.101 TCP 54 http > 41518 [FIN, ACK] Seq=2791 Ack=106 Win=5888 Len=0
     12 28.635191000 192.168.1.101 -> 66.193.37.204 TCP 54 41518 > http [ACK] Seq=106 Ack=2792 Win=19360 Len=0
    

    pcap-ng形式のパケットキャプチャ)。このキャプチャは、単純なの間に何が起こるかを示していcurl http://hackage.haskell.org/packages/hackage.htmlます。

また、ルーターの背後にいることも関係ありません。直接接続する場合も同じです。接続タイプはPPPoEです。

LinuxとWindowsを実行する3台のコンピューターで問題を再現しました。

このような問題を診断する方法は?


こんにちは、IPレベルのダイアログではなくHTTPレベルのダイアログを表示するには、開発者ツールを有効にしたブラウザーを使用する必要があると思います。遅延の原因を確認する必要があります。これを行うには、ページのHTTPインタラクションの合計セットを確認する必要があります。代わりに、GMetrixを使用できます。
ジュリアンナイト

サイトでGMetrixを実行すると、適切な方向を示す重要な期待がいくつかあり、かなり良い結果が得られました。
ジュリアンナイト

@JulianKnight:問題の完全なキャプチャファイルへのリンクがあります。すべての情報があります
ローマンチェプリカ

あなたのリンクはPCAPです、私ははるかに高いレベルで何かに言及しています。ブラウザベースの開発者分析またはGMetrix、あるいはその両方を使用して報告してください。
ジュリアンナイト

1
@JulianKnight:繰り返しますが、CSSはここでは無関係であり、1つのHTTPリクエストに対して30秒の遅延が発生しています。
ローマンチェプリカ

回答:


5

「30秒」と「2分後」は、私にとってDNSの問題の死んだ呼び出し音です。

接続先のページが接続IPでDNSクエリのようなものを実行し、そのクエリが何らかの理由で失敗すると仮定すると、次のように表示されます。

  • サーバーがDNSチェックを行っていないため TCP接続はほぼ瞬時に行われます
  • スクリプトはDNSクエリを実行し、スタックします。
  • 30秒後にデフォルトのタイムアウトが期限切れになり、スクリプトが実行されます(「不明」になりました)
  • 後続のクエリでは、負のDNSヒットはまだキャッシュされ、ステージ1がすぐに渡されます
  • 負のタイムアウトが切れると(RFC 2308)、2分から5分の間で、次の接続で新しいクエリが発行され、ストーリーが繰り返されます。

...これらはまさにあなたが説明している症状です。

ISP1から取得したIPで、別のISP(ISP2など)からDNSクエリを実行してみてください。100%の証拠ではありませんが、クエリが完了するまでに30秒かかる可能性が高いと予想しています。それはISP1 DNSサーバーが外部から質問に答える問題を抱えていることを意味するでしょう。

別の考えられる原因としては、ISP1のDNSが何らかの理由で(おそらく誤解されている)ハッカーによってファイアウォールで保護されている可能性があります(私の服装では、理由は「トリガーハッピーネット管理者」で、名前を付けることができます)。その場合、ISP2を介したテストは異常な結果を返さないため、診断がはるかに困難になります。これをHackageにエスカレートする必要があります。


これは非常にもっともらしいですね!確認させてください。
ローマンチェプリャカ

最初の原因については、匿名プロキシを使用してhaskellを実行しようとしましたが、高速でした。2番目の方法では、ISPからhaskellにアクセスするときに同じ一時停止が予想されるため、これもありそうにありません。DNSが依然として原因である可能性がありますが、説明するのはより複雑かもしれません。
harrymc

@harrymc:実際には非常に簡単です。リバースDNSを担当しているISPのDNSサーバーがダウンしています。そのため、タイムアウトを逆に解決しようとします。これを試してくださいdig +trace -x 80.90.233.38。これが原因であることは95%確信しています。ハッカーが実際に逆DNSルックアップを実行することの確認を待っているだけです。
ローマンチェプリカ

0

問題は「MTU」の問題のように聞こえます。「windows setting mtu」をグーグルで検索する場合、この理論をテストする方法を示す多くの応答を考え出し、必要に応じてMTUを下げる必要があります。(Linuxルーターを使用している場合、IPTablesコマンドを作成してこれを動的に行うことができますが、Windowsを「実行」しません。)


Wiresharkガイドによると、「再構成されたPDUのTCPセグメント」は実際にはIPフラグメンテーションに対応せず、Webページから期待されるように、応答に複数のパケットが有効に含まれていることを示しています。
ジュリアンナイト

MTUではないようです。イーサネット経由で直接接続し、mtuを1000に設定して、これをテストしました。問題は解決しませんでした。
ローマンチェプリアカ

0

私はあなたのパケットキャプチャを繰り返しました。

画像をキャプチャする

事実上、パケットが再構築されている間、わずかな検出不可能な一時停止がありますが、あなたのものほど長くはありません。また、すべてのIPアドレスとHTMLを検証しましたが、すべてが正しく、非常にシンプルで無害に見えます。

要するに、インターネットに関する限り、この遅延の理由はありません。結論は、ISPに問題があるということです。

可能性を絞り込むためにできることは:

  1. 別のhaskell.orgパッケージに接続して、同様の遅延があるかどうかを確認してください
  2. 異なるネットワークアダプターを使用する複数のコンピューターで、別のルーターを使用してみてください
  3. 同じ ISP を使用している地域の誰かに接続を繰り返してもらう
  4. 別の ISP を使用している地域の誰かに接続を繰り返してもらう
  5. この情報を使用しても、この遅延の説明がまだない場合は、ISPのサポートに連絡して、何が起こっているのかを尋ねてください。

[編集]

haskell.orgがETagを送信することに気づいたので、最初のアクセスは遅いが、次のアクセスは速い理由を説明します。ETag が有効である限り、ページは実際にはブラウザーのキャッシュから取得されるためです。

ここで奇妙なのは、ISPがETagリクエストを送信するときに遅くない理由です。説明は、haskell.orgに行くのではなく、限られた時間内に自分のキャッシュからの要求を満たすというものかもしれません。


1.これは、すべてのハッキングページで同じです。2.私が言ったように、私はこれをいくつかのコンピューターで、いくつかのルーターを使って(そして一つも使わずに)試しました。4.私の地域で別のISPを使用している場合、問題は存在しません。
ローマンチェプリカ

さて、ISPの問題は確かに唯一の妥当な解決策のように見えますが、どのような問題になり得ますか?彼らはおそらくハッキングの存在について疑いさえしないので、それは意図的なものではありえません。「ねえ、この1つのサイトは私には役に立たないが(他のサイトはすべて役に立たない)」と言うと、彼らは耳を傾けません。
ローマンチェプリアカ

上記の説明に、最初のアクセスのみが遅い理由を追加しました。ポイント3は、ISPと話をする前に回答が必要です。それらの問題は、何らかの理由でhaskell.orgの有効性をチェックするのが非常に遅いため、使用するセキュリティソフトウェアに関連している可能性があります。
harrymc

私はテストにcurlを使用しているため、Etagは無関係です。とにかく、リバースDNSに関する答えはおそらく正しいものです。
ローマンチェプリカ

-2

サーバーの問題のようです。速くロードされました。サーバーがあなたを嫌うかどうかをテストするには、TORやHideMyAss.comなどのプロキシからアクセスしてみてください。速い場合は、haskell.orgとあなたの家の間に問題があります。

実行できるもう1つのテストは、HTMLファイル、CSSファイル、XMLファイルなど、そのサイト上のリソースを見つけ、そのリンクをHTMLバリデーターなどに渡すことです。サードパーティのサービスが取得に時間がかかる場合は、サーバーに問題があります。

別のテスト:DNSキャッシュをクリアします。haskell.orgのIPアドレスの検索には長い時間がかかる可能性があります。ipconfig /flushdns。またping hackage.haskell.org、コマンドラインからIPアドレスの検索にかかる時間を確認してください。

別のテスト:Cookieの送信を回避するために、Chrome(およびその他)でプライベートブラウジングセッションを開きます。

別のテスト:ChromeまたはOperaでF12を開き、[ネットワーク]タブに移動してから、サイトに移動して各リソースの時間を確認します。


プロキシを使用すると、問題はなくなります。他の提案については、質問自体で既に説明しています。
ローマンチェプリカ

サーバーはあなたを好きではありません。何らかの理由でIPが抑制されています。できることは何もありません。
クロエ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.