关于我的设置

关于我的设置

有时,我的客户端无法访问我的服务器。发生这种情况时,我可以在我的服务器上手动访问ping客户端,现在客户端就可以看到服务器了。

我的问题:如果不使用它,怎样才能修复它ping

我真的希望你能帮助解决这个偶尔出现的问题。在糟糕的日子里,这种情况最多会发生 5 次。在好日子里,也许只有 1 次。在真正好的日子里,不会出现任何问题,但这种情况很少见。

我正在开发一个业余项目,这是一个带有 C++ 服务器的 iOS 应用程序。该项目将在某个时候开源。


关于我的设置

服务器和客户端都在同一个wifi上。

两种设备都可以www.google.com在浏览器中打开,因此可以访问互联网。

服务器

macOS version 10.11.6 - El Capitan
NGINX version 1.10.0
IP address: 192.168.0.13 (proxy disabled)
The server is not connected to the router via cable.
The NGINX server is running on port 12345 and controls a FastCGI script.

链接到我的NGINX 配置主机名,ifconfig,resolv

客户

iPad Pro (I'm also experiencing the same problem with my iPhone)
iOS 9.3.5 (13G36)
IP address: 192.168.0.18 (proxy disabled)
The client is not connected to the server via cable.

路由器

Netgear CG3000, hardware version 1.04, software version 3.9.21.13.mp3.V1.32.02
I'm experiencing the same problem with other routers, can't remember which ones.

路由器事件日志中未写入任何内容。


重现步骤

我遵循以下步骤。

步骤 1:客户端无法访问服务器

在客户端上:

在浏览器中输入服务器 IP 和端口:http://192.168.0.13:12345/status 但什么也没发生。客户端无法访问服务器。

客户端可以正常访问互联网。

步骤 2:服务器 ping 客户端 - 使一切正常

在服务器上:

ping通过 IP 地址来获取客户端,就像这样

PROMPT> ping 192.168.0.18
PING 192.168.0.18 (192.168.0.18): 56 data bytes
64 bytes from 192.168.0.18: icmp_seq=0 ttl=64 time=102.210 ms
64 bytes from 192.168.0.18: icmp_seq=1 ttl=64 time=102.966 ms
64 bytes from 192.168.0.18: icmp_seq=2 ttl=64 time=21.176 ms
^C
--- 192.168.0.18 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 21.176/75.451/102.966/38.379 ms
PROMPT>

ping命令使客户端能够访问服务器。为什么要这样做ping

步骤 3:客户端现在可以访问服务器

在客户端上:

在浏览器中,我输入服务器 IP 和端口:http://192.168.0.13:12345/status 现在我收到了服务器的响应。成功了。

如果我启动代理并拦截流量,那么请求/响应如下所示:

要求

GET /status HTTP/1.1
Host: 192.168.0.13:12345
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1
Accept-Language: da-dk
Cache-Control: max-age=0
Connection: keep-alive

回复

HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sun, 04 Sep 2016 16:11:39 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive

{
    "request_index": 1047,
    "time": "1473005499"
}

答案1

ping 会发出 ARP 请求,这会突然修复您的路由。它会使用服务器或客户端的 MAC 地址和 IP 更新您的 ARP 表。

听起来您的网络可能存在 IP 冲突。

修复方法:

  • 问题发生时,发出一个命令arp -a打印 ARP 表。然后保存该列表的副本。

  • 通过发出以下命令删除服务器(或客户端)的 IP 条目:arp -d ipaddress-of-server-or-client

  • ping 服务器(或客户端)

  • 再次发出arp -a命令并检查该 IP 现在显示的 MAC 地址是什么。

  • 如果不同,则说明某处存在 IP 冲突。

以下是对 ARP 的复习:https://www.tummy.com/articles/networking-basics-how-arp-works/

相关内容