
Às vezes, meu cliente não consegue acessar meu servidor. Quando isso acontece, no meu servidor posso manualmente ping
o cliente e agora o cliente pode ver o servidor.
Minha pergunta:O que pode ser feito para consertar isso, sem usar ping
?
Eu realmente espero que você possa ajudar a esclarecer esse problema esporádico. Em um dia ruim isso acontece até 5 vezes. Em um dia bom, talvez 1 vez. Num dia realmente bom não há problemas, mas é raro.
Estou desenvolvendo no meu projeto de tempo livre que é um aplicativo iOS com um servidor c++. Isso será tornado de código aberto em algum momento.
Sobre minha configuração
Tanto o servidor quanto o cliente estão no mesmo wifi.
Ambos os dispositivos podem abrir www.google.com
em um navegador, para que tenham acesso à Internet.
Servidor
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.
Link para o meuConfiguração NGINXenome do host, ifconfig, resolver.
Cliente
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.
Roteador
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.
Nada gravado no log de eventos do roteador.
Passos para reproduzir
Eu passo por essas etapas.
Etapa 1: o cliente não consegue acessar o servidor
No cliente:
Em um navegador digito o IP e a porta do servidor: http://192.168.0.13:12345/status
Mas nada acontece. O cliente não pode acessar o servidor.
O cliente pode acessar a internet perfeitamente.
Etapa 2: cliente de ping do servidor - faz com que as coisas funcionem
No servidor:
Eu ping
o cliente pelo seu endereço IP, assim
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>
Este ping
comando faz com que o cliente consiga acessar o servidor. Por que ping
faz funcionar?
Etapa 3: o cliente agora pode acessar o servidor
No cliente:
Em um navegador digito o IP e a porta do servidor: http://192.168.0.13:12345/status
Agora recebo uma resposta do servidor. Funciona.
Se eu iniciar um proxy e interceptar o tráfego, a solicitação/resposta será semelhante a esta:
solicitar
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
resposta
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"
}
Responder1
ping faz uma solicitação ARP, que de repente corrige seu roteamento. Ele atualizará sua tabela ARP com o endereço MAC e IP do servidor ou cliente.
Parece que você pode ter um conflito de IP na sua rede.
Uma maneira de consertar:
quando o problema ocorrer, emita um
arp -a
para imprimir a tabela ARP. Em seguida, salve uma cópia dessa listagem.exclua a entrada do IP do servidor (ou cliente) emitindo:
arp -d ipaddress-of-server-or-client
executar ping no servidor (ou cliente)
emita um
arp -a
comando novamente e verifique qual endereço MAC está sendo exibido para esse IP.se for diferente, você tem um conflito de IP em algum lugar.
Aqui está uma atualização sobre ARP:https://www.tummy.com/articles/networking-basics-how-arp-works/