Велика затримка під час отримання сторінки з певного сайту


11

У мене є така проблема: коли я завантажую сторінку з Hackage , я отримую велику затримку (приблизно 30 секунд). Подальші запити швидкі, але якщо я не підключусь до неї протягом декількох хвилин, проблема повертається.

Що цікавого в цій проблемі:

  • це специфічно для цього конкретного сайту (Hackage) - у мене немає подібної проблеми з будь-яким іншим сайтом (і я відвідую досить багато);
  • це здається специфічним для мого провайдера - коли я підключаюся з інших місць, такої проблеми немає;
  • це не пов'язано з проблемами 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.

Я відтворив проблему на 3 комп’ютерах, на яких працює Linux та Windows.

Як діагностувати таку проблему?


Привіт, я думаю, що вам потрібно використовувати браузер із увімкненими інструментами для розробників, щоб побачити діалог рівня HTTP, а не діалог рівня IP. Нам потрібно подивитися, що викликає затримку, і ви можете це зробити, лише переглянувши загальний набір HTTP-взаємодій для сторінки. Натомість ви можете використовувати GMetrix .
Джуліан Найт

Запуск GMetrix на сайті дав мені досить хороші результати з парою вагомих очікувань, які можуть направити вас у правильному напрямку.
Джуліан Найт

@JulianKnight: у питанні є посилання на файл повного захоплення - у ньому є вся інформація
Роман Чепляка,

Ваше посилання - це PCAP, я маю на увазі щось на набагато вищому рівні. Повідомте про це, використовуючи аналіз розробника на основі браузера або GMetrix або те і інше.
Джуліан Найт,

1
@JulianKnight: дозвольте повторити - CSS тут не має значення, і ми говоримо про затримку на 30 секунд для одного запиту HTTP.
Роман Чепляка

Відповіді:


5

"30 секунд" і "через дві хвилини" - це мертвий дзвінок для проблеми DNS для мене.

Якщо ми припускаємо, що сторінка, до якої ви підключаєтесь, виконує щось на зразок запиту DNS на підключувальній IP-адресі, і цей запит чомусь не вдається, ви побачите:

  • TCP-з'єднання майже миттєве, оскільки сервер не робить перевірки DNS
  • сценарій виконує запит DNS і застрягає .
  • через 30 секунд закінчується час очікування за замовчуванням, і сценарій продовжується (ви зараз "Невідомо")
  • при наступних запитах негативне звернення DNS все ще зберігається в кеші, і етап 1 передається поруч із часом
  • після закінчення негативного тайм-ауту (RFC 2308), і це означає щось від 2 до 5 хвилин, при наступному підключенні видається новий запит, і історія повторюється.

... і саме такі симптоми ви описуєте.

Ви можете спробувати запустити запит DNS від іншого провайдера (скажімо, ISP2) на IP, який ви отримуєте від ISP1. Це не 100% доказ, але я очікую велику ймовірність того, що на запит знадобиться 30 секунд. Це означає, що сервер DNS ISP1 має проблеми з відповіддю на запити ззовні .

Ще однією можливою причиною може бути DNS ISP1, який Hackage усунув з певної (ймовірно, помилкової) причини (в моєму вбранні причиною буде "щасливий нетадмін", і я можу назвати імена). У такому випадку у вас буде набагато складніше діагностувати, оскільки будь-які тести через ISP2 не повернуть нічого незвичайного; вам доведеться ескалювати це до Hackage.


Це виглядає дуже правдоподібно! Дозвольте мені це перевірити.
Роман Чепляка

З першої причини я спробував перейти на haskell за допомогою анонімного проксі, і це було швидко, що, можливо, вказує на те, що ця причина малоймовірна. Для другого таку ж паузу слід очікувати при доступі до haskell від будь-якого провайдера, тому це також малоймовірно. DNS може все ще бути причиною, але пояснити це може бути складніше.
harrymc

@harrymc: насправді це дуже просто. DNS-сервери мого провайдера, які відповідають за зворотний DNS, не працюють. Отже, спроби зробити зворотний розв'язувальний тайм-аут. Спробуйте це: dig +trace -x 80.90.233.38. Я на 95% впевнений, що це є причиною, просто чекаю підтвердження того, що злом дійсно виконує зворотний пошук DNS.
Роман Чепляка

0

Проблема звучить як проблема з "MTU". Якщо ви google "windows setup mtu", вам слід придумати ряд відповідей, які покажуть вам, як перевірити цю теорію, і знизить MTU, як це доречно. (Якщо ви використовували маршрутизатор Linux, я міг би створити команду IPTables, щоб зробити це динамічно для вас, але я не "роблю" Windows.)


Згідно з посібником Wireshark, "сегмент TCP повторно зібраного PDU" насправді не відповідає фрагментації IP, а лише вказує на те, що відповідь дійсно містить кілька пакетів, як можна було б очікувати від веб-сторінки.
Джуліан Найт,

Це не здається MTU. Я перевірив це, підключившись безпосередньо через ethernet і встановивши mtu на 1000. Проблема не зникала.
Роман Чепляка

0

Я повторив ваше захоплення пакетів, які виглядають так на моєму кінці:

захоплення зображення

Насправді є незначна невизначена пауза, коли пакет збирається повторно, але ніде, поки ваш. Я також перевірив усі IP-адреси та HTML, і все правильно і виглядає надзвичайно просто та нешкідливо.

Коротше кажучи, немає жодної причини для цієї затримки, що стосується Інтернету. Висновок полягає в тому, що з вашим провайдером є проблеми.

Що ви можете зробити, щоб звузити можливості:

  1. Спробуйте підключитися до іншого пакету haskell.org і побачити, чи є подібна затримка
  2. Спробуйте використати інший маршрутизатор зі свого місця з кількома комп’ютерами, використовуючи різні мережеві адаптери
  3. Постарайтеся, щоб хтось у вашій місцевості, який використовує той самий провайдер, повторив з'єднання
  4. Постарайтеся, щоб хтось у вашій місцевості використовував інший провайдер, щоб повторити з'єднання
  5. З цією інформацією, якщо ви все ще не маєте пояснень щодо цієї затримки, зверніться до служби підтримки свого провайдера, щоб запитати, що відбувається.

[EDIT]

Я помітив, що haskell.org надсилає ETag , так що пояснює, чому перший доступ повільний, а наступний - швидкий: Тому що, поки ETag дійсний, сторінка фактично надходить із кешу браузера.

Дивна частина тут полягає в тому, що ISP не повільний при передачі запиту ETag. Поясненням може бути те, що вони протягом обмеженого часу задовольняють запит із власного кешу, а не переходять на haskell.org.


1. Це однаково для всіх сторінок злому. 2. Як я вже говорив, я спробував це на декількох комп'ютерах і з декількома маршрутизаторами (і без одного). 4. Проблема не існує, якщо я використовую інший провайдер у своєму регіоні.
Роман Чепляка

Тепер проблема провайдера справді виглядає як єдине правдоподібне рішення, але яка це може бути проблема? Вони, ймовірно, навіть не підозрюють про існування злому, тому це не може бути навмисним. Якщо я скажу їм: "Ей, цей один сайт не працює для мене (але всі інші)", вони не слухатимуть.
Роман Чепляка

Я додав вище пояснення, чому лише перший доступ повільний. Точка 3 все ще потребує відповіді перед тим, як поговорити з провайдером. Їх проблема може бути пов’язана із захисним програмним забезпеченням, яке вони використовують, чомусь дуже повільно перевіряє чинність сайту haskell.org.
harrymc

Етаг не має значення, оскільки я використовую curl для тестування. У будь-якому випадку, відповідь про зворотний dns, швидше за все, правильна.
Роман Чепляка

-2

Це звучить як проблема із сервером. Це швидко завантажувалося для мене. Щоб перевірити, чи не подобається вам сервер, спробуйте отримати доступ до нього через проксі-сервер, наприклад TOR або HideMyAss.com. Якщо це швидко, то між haskell.org та вашим домом є проблема.

Ще один тест, який ви можете запустити, - це знайти такий ресурс, як HTML-файл, CSS-файл або XML-файл, і передати це посилання на валідатор HTML тощо. Якщо стороннім службам потрібно тривати час, то це проблема з сервером.

Ще один тест: очистіть кеш DNS. Це може шукати IP-адресу haskell.org займає багато часу. ipconfig /flushdns. Також спробуйте ping hackage.haskell.orgз командного рядка, щоб побачити, скільки часу потрібно шукати IP-адресу.

Ще один тест: відкрийте сеанс приватного перегляду за допомогою Chrome (та інших), щоб уникнути надсилання файлів cookie.

Ще один тест: відкрийте F12 в Chrome або Opera, перейдіть на вкладку Мережа та перейдіть на сайт, щоб побачити час для кожного ресурсу.


При використанні проксі проблема усувається. Ваші інші пропозиції вже розглянуті в самому запитанні.
Роман Чепляка

Сервер вам не подобається. Це пригнічує ваш IP з будь-якої причини. Ви нічого не можете зробити.
Хлоя
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.