
때때로 내 클라이언트가 내 서버에 연결할 수 없습니다. 그런 일이 발생하면 내 서버에서 수동으로 ping
클라이언트를 볼 수 있고 이제 클라이언트가 서버를 볼 수 있습니다.
내 질문:를 사용하지 않고 문제를 해결하려면 어떻게 해야 합니까 ping
?
이 산발적인 문제를 밝히는 데 도움이 되기를 진심으로 바랍니다. 나쁜 날에는 최대 5번까지 발생합니다. 날씨가 좋은 날에는 1번 정도. 날씨가 정말 좋은 날에는 문제가 없지만 그런 경우는 드뭅니다.
저는 C++ 서버가 있는 iOS 앱인 여가 시간 프로젝트를 개발 중입니다. 이는 언젠가 오픈 소스로 만들어질 예정입니다.
내 설정 정보
서버와 클라이언트 모두 동일한 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,해결.
고객
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
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 충돌이 있는 것 같습니다.
문제를 해결하는 방법:
문제가 발생하면 a를 실행하여
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/