O cliente não pode ver o servidor, apesar de estar no mesmo wifi. O que o ping faz?

2

Às vezes, meu cliente não pode 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 corrigi-lo, sem usar ping ?

Eu realmente espero que você possa ajudar a esclarecer este problema esporádico. Em um dia ruim acontece até 5 vezes. Em um bom dia, talvez 1 hora. Em um dia realmente bom, não há problemas, mas é raro.

Estou desenvolvendo meu projeto de tempo livre que é um aplicativo iOS com um servidor c ++. Isso deve ser feito em código aberto em algum momento.

Sobre minha configuração

O servidor e o cliente estão no mesmo wifi.

Ambos os dispositivos podem abrir www.google.com em um navegador para que eles 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 minha configuração do NGINX e hostname, ifconfig, resolv .

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 escrito no log de eventos do roteador.

Etapas 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 muito bem.

Etapa 2: cliente de ping do servidor - faz com que as coisas funcionem

No servidor:

Eu ping o cliente pelo seu endereço IP, como este

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>

Esse comando ping faz com que o cliente consiga acessar o servidor. Por que ping faz isso 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á assim:

pedido

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"
}
    
por neoneye 04.09.2016 / 20:11

1 resposta

1

ping faz um pedido ARP, que repentinamente corrige seu roteamento. Ele atualizará sua tabela ARP com o endereço MAC e o IP do servidor ou cliente.

Parece que você pode ter um conflito de IP na sua rede.

Uma maneira de corrigir isso:

  • quando o problema ocorrer, emita um arp -a para imprimir a tabela ARP. Em seguida, salve uma cópia dessa listagem.

  • exclua a entrada para o IP do servidor (ou cliente) emitindo: arp -d ipaddress-of-server-or-client

  • ping no servidor (ou cliente)

  • emita um comando arp -a 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.

Veja uma atualização sobre o ARP: link

    
por 05.09.2016 / 07:46