1

I have a Linode server that won't return random GET requests to my usual ISP (but never gets stuck with the same one each time). If I switch ISP or use Opera VPN, all works well.

Linode says all looks ok to them. The server's resources are fine (it's a development server that's only being used for testing at the moment, so very light traffic and overhead). They say to check with my ISP. My ISP says all looks good to them but they'll have engineers look at it.

As I'm expecting a 'we found nothing' response from the ISP, I'm trying to find objective evidence of what's happening through my very limited knowledge of diagnosing this. I've dusted off Wireshark and begun diagnosis.

If I use the problem ISP, from the browser's point of view it's a bit haphazard. Sometimes a page loads fine, sometimes it loads fine but other assets won't load (css,js,jpeg etc.). Sometimes the page itself won't load and it remains 'loading' indefinitely, without a server response.

Diagnosis:

http.time > 1 in Wireshark confirmed the problem's not so much timeouts or long loading times, more so that a request either loads or doesn't.

My headers don't show anything unusual, e.g:

GET /theme/css/style.css HTTP/1.1
Host:site.com
Accept:text/css,*/*;q=0.1
Accept-Language:en-ie
Accept-Encoding:gzip, deflate
Connection:keep-alive
Pragma:no-cache
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Referer:http%3a//site.com/section/
DNT:1
Cache-Control:no-cache

When I capture with Wireshark, I'm not seeing much feedback when a request stalls in the browser. However, last time I attempted it I did get a reoccuring request of:

localhost   server  TCP 66  [TCP Retransmission] 61162 → 80 [FIN, ACK]

broadcast every minute, until it ended with [RST, ACK] at the end, though the browser still showed the page stuck on loading.

Further Info:

  • I've cache disabled throughout all tests, but cache has been emptied too as well as flushing dns.
  • That's likely irrelevant as this result is happening on every device and browser on the network using the standard ISP connection.
  • Any other ISP or VPN I've been able to test with loads all requests fine from the server using the same devices and browsers.
  • I've reset the modem and router firmware, per the standard diagnosis procedure of my ISP
  • I've tried switching DNS to Google's.
  • I've updated all packages on the server (which is Ubuntu running Apache)
  • Beyond these updates being performed after this problem started, I haven't changed any configs or updates on the server. It's been running for about two months now and this started happening about two days ago.
  • Diagnosing is being done on regular http
  • I make lots of requests to the server for development purposes and, enquiring to my ISP whether this could have triggered some activity flag - they assured me there's nothing like that in effect.
  • I can't list the server here unfortunately.
  • I've no issues with other sites.
  • ISP speed and latency's not an issue.
  • All three virtualhosts running on the server are affected though they just exist to redirect subdomains or http to https requests as the same domain is used throughout.

Update

Diagnosis:

I've tried running verbose curl requests to individual assets on the server (a jpeg in this case). My request to download the jpeg ran ok the first three times, the only anomaly (unless it's expected?) is that the amount of bytes being downloaded for the same file would change on some requests. For example:

curl request 1:

< Content-Type: image/jpeg
< 
{ [2642 bytes data]
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0   994k      0 --:--:-- --:--:-- --:--:--  995k

curl request 2:

< Content-Type: image/jpeg
< 
{ [1194 bytes data]
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0   852k      0 --:--:-- --:--:-- --:--:--  853k

curl request 3:

< Content-Type: image/jpeg
< 
{ [2642 bytes data]
 26  384k   26  101k    0     0   493k      0 --:--:-- --:--:-- --:--:--  493k
* Curl_http_done: called premature == 0
100  384k  100  384k    0     0  1000k      0 --:--:-- --:--:-- --:--:-- 1000k

And then the fourth request wouldn't download the file, report an error, or close the connection. Same behaviour I see in the browser. The bytes of data is stuck at a running timer, approaching 2 minutes now:

 Content-Type: image/jpeg
< 
{ [1194 bytes data]
  5  384k    5 22914    0     0     66      0  1:39:18  0:05:43  1:33:35     0

It feels like the request is reaching the server then later communications back don't reach me. Here's that last request in full (30 seconds later):

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying (IP ADDRESS)...
* TCP_NODELAY set
  0     0    0     0    0     0      0      0 --:--:--  0:00:05 --:--:--     0* Connected to serverdomain.com (IP ADDRESS) port 80 (#0)
  0     0    0     0    0     0      0      0 --:--:--  0:00:06 --:--:--     0> GET /images/user/176131.jpg HTTP/1.1
> Host: serverdomain.com
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 18 Aug 2017 14:04:20 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Last-Modified: Thu, 17 Aug 2017 09:04:47 GMT
< ETag: "60048-556ef4de2cad8"
< Accept-Ranges: bytes
< Content-Length: 393288
< Connection: close
< Content-Type: image/jpeg
< 
{ [1194 bytes data]
  5  384k    5 22914    0     0     50      0  2:11:05  0:07:36  2:03:29     0
biscuitstack
  • 153
  • 1
  • 7

0 Answers0