2

Иногда мой клиент не может связаться с моим сервером. Когда это происходит, то на моем сервере я могу вручную ping клиента, и теперь клиент может видеть сервер.

Мой вопрос: что можно сделать, чтобы это исправить, не используя ping?

Я действительно надеюсь, что вы можете помочь пролить свет на эту спорадическую проблему. В плохой день это случается до 5 раз. В хороший день может быть 1 раз. В действительно хороший день проблем нет, но это редко.

Я занимаюсь разработкой своего проекта для свободного времени, который представляет собой приложение для iOS с сервером C ++. Это должно быть сделано с открытым исходным кодом в какой-то момент.


О моей настройке

И сервер, и клиент находятся на одном и том же Wi-Fi.

Оба устройства могут открывать 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: Клиент pinging сервера - заставляет вещи работать

На сервере:

Я 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 ответ1

1

ping выполняет ARP-запрос, который внезапно исправляет вашу маршрутизацию. Он обновит вашу таблицу ARP с помощью MAC-адреса и IP-адреса сервера или клиента.

Похоже, у вас может быть конфликт IP в вашей сети.

Способ исправить это:

  • когда возникает проблема, arp -a для печати таблицы ARP. Затем сохраните копию этого списка.

  • удалите запись для IP-адреса сервера (или клиента), введя: arp -d ipaddress-of-server-or-client

  • пинговать сервер (или клиент)

  • снова введите команду arp -a и проверьте, какой MAC-адрес теперь отображается для этого IP-адреса.

  • если он другой, у вас где-то конфликт IP.

Вот переподготовка по ARP: https://www.tummy.com/articles/networking-basics-how-arp-works/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .