Độ trễ lớn khi tìm nạp một trang từ một trang web cụ thể


11

Tôi gặp vấn đề sau: khi tôi truy xuất một trang từ Hackage , tôi gặp một độ trễ lớn (khoảng 30 giây). Yêu cầu thêm rất nhanh, nhưng nếu tôi không kết nối với nó trong vài phút, vấn đề sẽ quay trở lại.

Điều thú vị về vấn đề này là:

  • nó dành riêng cho trang web cụ thể này (Hackage) - Tôi không gặp vấn đề tương tự với bất kỳ trang web nào khác (và tôi truy cập khá nhiều);
  • nó dường như là đặc trưng cho ISP của tôi - khi tôi kết nối từ những nơi khác, không có vấn đề nào như vậy;
  • nó không liên quan đến DNS hoặc các vấn đề kết nối - trên thực tế, kết nối TCP được thiết lập nhanh chóng; đó là phản hồi HTTP mất quá nhiều thời gian, như có thể thấy từ việc chụp gói mẫu sau:

      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
    

    ( chụp gói ở định dạng pcap-ng ). Chụp này cho thấy những gì xảy ra trong một đơn giản curl http://hackage.haskell.org/packages/hackage.html.

Việc tôi đứng sau một bộ định tuyến cũng không thành vấn đề - cũng giống như vậy khi tôi kết nối trực tiếp. Kiểu kết nối là PPPoE.

Tôi đã tái tạo vấn đề trên 3 máy tính chạy Linux và Windows.

Làm thế nào để chẩn đoán một vấn đề như vậy?


Xin chào, tôi nghĩ rằng bạn cần sử dụng trình duyệt với các công cụ dành cho nhà phát triển được bật để xem hộp thoại cấp HTTP thay vì hộp thoại cấp IP. Chúng tôi cần xem điều gì gây ra sự chậm trễ và bạn chỉ có thể thực hiện việc này bằng cách xem tổng số các tương tác HTTP cho trang. Thay vào đó, bạn có thể sử dụng GMetrix .
Julian Knight

Chạy GMetrix trên trang web đã cho tôi kết quả khá tốt với một vài kết quả quan trọng có thể giúp bạn đi đúng hướng.
Julian Knight

@JulianKnight: có một liên kết đến tập tin chụp đầy đủ trong câu hỏi - nó có tất cả thông tin
Roman Cheplyaka

Liên kết của bạn là PCAP, tôi đang đề cập đến một cái gì đó ở cấp độ cao hơn nhiều. Vui lòng báo cáo lại bằng cách sử dụng phân tích nhà phát triển dựa trên trình duyệt hoặc GMetrix hoặc cả hai.
Julian Knight

1
@JulianKnight: hãy để tôi nhắc lại - CSS không liên quan ở đây và chúng tôi đang nói về độ trễ 30 giây cho một yêu cầu HTTP.
Roman Cheplyaka

Câu trả lời:


5

"30 giây" và "sau hai phút" là một tiếng chuông báo động cho vấn đề DNS đối với tôi.

Nếu chúng tôi cho rằng trang bạn đang kết nối thực hiện một cái gì đó giống như truy vấn DNS trên IP kết nối và vì lý do nào đó không thành công, bạn sẽ thấy:

  • Kết nối TCP gần như tức thời do máy chủ không thực hiện kiểm tra DNS
  • đoạn script chạy một truy vấn DNS và bị kẹt .
  • sau 30 giây, thời gian chờ mặc định hết hạn và tập lệnh sẽ tiếp tục (bạn hiện là "Không xác định")
  • trong các truy vấn tiếp theo, lần truy cập DNS âm vẫn được lưu trong bộ nhớ cache và giai đoạn 1 được truyền vào bên cạnh không có thời gian
  • sau khi hết thời gian âm (RFC 2308) và đó là bất cứ điều gì trong khoảng từ 2 đến 5 phút, một truy vấn mới được đưa ra trong kết nối tiếp theo và câu chuyện lặp lại.

... Và đây chính xác là những triệu chứng bạn đang mô tả.

Bạn có thể thử chạy truy vấn DNS từ một ISP khác (giả sử, ISP2) trên IP bạn nhận được từ ISP1. Nó không phải là bằng chứng 100%, nhưng tôi hy vọng khả năng cao là truy vấn sẽ mất 30 giây để hoàn thành. Điều đó có nghĩa là máy chủ DNS ISP1 đang gặp vấn đề khi trả lời các truy vấn từ bên ngoài .

Một nguyên nhân có thể khác có thể là DNS của ISP1 bị tường lửa bởi Hackage vì một số lý do (có thể bị nhầm lẫn) (trong trang phục của tôi , lý do sẽ là "một netadmin hạnh phúc kích hoạt" và tôi có thể đặt tên cho tên). Trong trường hợp đó, bạn sẽ khó chẩn đoán hơn nhiều, đối với mọi xét nghiệm thông qua ISP2 sẽ không có gì bất thường; bạn sẽ phải leo thang này để Hackage.


Điều này có vẻ rất hợp lý! Hãy để tôi xác minh nó.
Roman Cheplyaka

Đối với nguyên nhân đầu tiên, tôi đã cố gắng sử dụng proxy ẩn danh và nó rất nhanh, điều này có thể chỉ ra rằng nguyên nhân này là không thể. Đối với cái thứ hai, việc tạm dừng tương tự sẽ được dự kiến ​​khi truy cập haskell từ bất kỳ ISP nào, do đó cũng không thể xảy ra. DNS có thể vẫn là nguyên nhân, nhưng có thể phức tạp hơn để giải thích.
harrymc

@harrymc: thật ra nó rất đơn giản. Các máy chủ DNS của ISP của tôi chịu trách nhiệm cho DNS ngược bị hỏng. Vì vậy, cố gắng để làm ngược lại giải quyết thời gian ra. Hãy thử điều này : dig +trace -x 80.90.233.38. Tôi chắc chắn 95% rằng đây là nguyên nhân, chỉ chờ xác nhận rằng hack thực sự thực hiện tra cứu DNS ngược.
Roman Cheplyaka

0

Vấn đề có vẻ như là một vấn đề với "MTU". Nếu bạn google "windows settings mtu", bạn sẽ đưa ra một số câu trả lời sẽ chỉ cho bạn cách kiểm tra lý thuyết này và hạ MTU của bạn cho phù hợp. (Nếu bạn đang sử dụng bộ định tuyến Linux, tôi có thể tạo lệnh IPTables để thực hiện việc này một cách linh hoạt cho bạn, nhưng tôi không "làm" Windows.)


Theo hướng dẫn của Wireshark, "phân đoạn TCP của PDU được ghép lại" trên thực tế không tương ứng với phân mảnh IP mà chỉ cho biết rằng phản hồi có chứa nhiều gói như bạn mong đợi từ một trang web.
Julian Knight

Nó dường như không phải là MTU. Tôi đã kiểm tra điều này bằng cách kết nối trực tiếp qua ethernet và đặt mtu thành 1000. Vấn đề vẫn tồn tại.
Roman Cheplyaka

0

Tôi đã lặp đi lặp lại các gói tin của bạn, trông giống như vậy ở phía cuối của tôi:

Chụp ảnh

Thực tế, có một sự tạm dừng nhỏ không thể phát hiện được trong khi gói được lắp lại, nhưng không ở đâu miễn là của bạn. Tôi cũng đã xác minh tất cả các địa chỉ IP và HTML, và mọi thứ đều chính xác và trông cực kỳ đơn giản và vô hại.

Nói tóm lại, không có lý do cho sự chậm trễ này, khi có liên quan đến Internet. Kết luận là có vấn đề với ISP của bạn.

Những gì bạn có thể làm để thu hẹp các khả năng là:

  1. Hãy thử kết nối với gói haskell.org khác và xem có độ trễ tương tự không
  2. Hãy thử sử dụng bộ định tuyến khác từ vị trí của bạn với một số máy tính sử dụng các bộ điều hợp mạng khác nhau
  3. Cố gắng có ai đó trong khu vực của bạn sử dụng cùng một ISP lặp lại kết nối
  4. Cố gắng có ai đó trong khu vực của bạn sử dụng ISP khác lặp lại kết nối
  5. Với thông tin này, nếu bạn vẫn không có lời giải thích nào cho sự chậm trễ này, hãy liên hệ với bộ phận Hỗ trợ của ISP để hỏi chuyện gì đang xảy ra.

[BIÊN TẬP]

Tôi nhận thấy rằng haskell.org gửi một ETag , vì vậy điều đó giải thích tại sao truy cập đầu tiên chậm nhưng các truy cập tiếp theo lại nhanh: Bởi vì miễn là ETag hợp lệ, trang thực sự xuất phát từ bộ đệm của trình duyệt của bạn.

Phần kỳ lạ ở đây là lý do tại sao ISP không chậm khi truyền yêu cầu ETag. Một lời giải thích có thể là trong một thời gian giới hạn, họ đáp ứng yêu cầu từ bộ đệm của chính họ, thay vì truy cập haskell.org.


1. Điều này giống nhau cho tất cả các trang hackage. 2. Như tôi đã nói, tôi đã thử điều này trên một số máy tính và với một số bộ định tuyến (và không có bộ định tuyến). 4. Vấn đề không tồn tại nếu tôi sử dụng một ISP khác trong khu vực của mình.
Roman Cheplyaka

Bây giờ, vấn đề ISP thực sự trông giống như giải pháp hợp lý duy nhất, nhưng nó có thể là vấn đề gì? Họ có thể thậm chí không nghi ngờ về sự tồn tại của tin tặc, vì vậy nó không thể có chủ ý. Nếu tôi nói với họ, "này, trang này không hoạt động với tôi (nhưng tất cả những trang khác làm)", họ sẽ không lắng nghe.
Roman Cheplyaka

Tôi đã thêm vào một lời giải thích tại sao chỉ có truy cập đầu tiên là chậm. Điểm 3 vẫn cần câu trả lời trước khi nói chuyện với ISP. Vấn đề của họ có thể liên quan đến phần mềm bảo mật mà họ sử dụng, vì một số lý do rất chậm để kiểm tra tính hợp lệ của haskell.org.
harrymc

Etag không liên quan, vì tôi sử dụng curl để thử nghiệm. Dù sao, câu trả lời về dns ngược có lẽ là câu trả lời đúng.
Roman Cheplyaka

-2

Nghe có vẻ như một vấn đề máy chủ. Nó tải nhanh cho tôi. Để kiểm tra xem máy chủ có không thích bạn hay không, hãy thử truy cập nó từ proxy, chẳng hạn như TOR hoặc HideMyAss.com. Nếu nó nhanh, thì có vấn đề giữa haskell.org và nhà của bạn.

Một thử nghiệm khác mà bạn có thể chạy là tìm một tài nguyên trong tầm nhìn đó, chẳng hạn như tệp HTML, tệp CSS hoặc tệp XML và chuyển liên kết đó đến trình xác thực HTML, v.v. Nếu dịch vụ của bên thứ 3 mất nhiều thời gian để tìm nạp, thì nó là một vấn đề với máy chủ.

Một thử nghiệm khác: xóa bộ đệm DNS của bạn. Có thể tìm kiếm địa chỉ IP của haskell.org mất nhiều thời gian. ipconfig /flushdns. Cũng thử ping hackage.haskell.orgtừ dòng lệnh để xem mất bao lâu để tra cứu địa chỉ IP.

Một thử nghiệm khác: mở phiên duyệt web riêng tư với Chrome (và các phiên khác) để tránh gửi cookie.

Một thử nghiệm khác: Mở F12 trong Chrome hoặc Opera, chuyển đến tab Mạng và sau đó truy cập trang web để xem thời gian cho từng tài nguyên.


Khi sử dụng proxy, vấn đề sẽ biến mất. Đề xuất khác của bạn đã được giải quyết trong chính câu hỏi.
Roman Cheplyaka

Máy chủ không thích bạn. Nó đang điều chỉnh IP của bạn vì bất kỳ lý do gì. Không có gì bạn có thể làm được.
Chloe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.