Ip raw 모드로 핑 구현 질문

4개의 소켓중 하나를 ip raw 모드로 ping 기능을 구현해 상대 장치의 네트웍 상태를 10초 간격으로 체크합니다.

문제는 상대장치가 ping에 응답을 하면 문제 없는데 상대 장치가 전원이 꺼졌거나 해서 응답하지 않을 시 w5100 자체 핑도 안도ㅐ는게 문제입니다.

그래서 와이어샤크로 캡쳐해 봤는데 상대장치가 응답을 안하면 w5100에서 ARP 패킷을 상대 장치에 보내는군요.
상대장치가 ARP 응답을 안하면서 문제가 발생하는것 같습니다.

이걸 어떻게 처리해야 할까요?

안녕하세요.

우선 W5100은 칩 내부적으로 ARP를 동작하게 구성되어 있습니다.
그리고 Ping의 경우 W5100내부에 있는 PHY를 통해서 하드웨어적으로 연결되어 동작하게 됩니다.

위 경우를 본다면, 구성하신 ping 기능을 네트웍 상태를 10초 간격으로 체크하시는데, 여기에 따로 예외 처리를(time out) 추가하시는 것을 추천드립니다.
아무래도 강제적으로 ARP를 끊을 수는 없기 때문에, 네트웍 상태를 10초 간격으로 2~3번 이상 체크한 후에도 응답이 오지 않으면, 자체적으로 통신 Socket을 Close하는 형태로 구성하시면 될 것 같습니다.

그런데, 만약 위 상태가 되서 Socket Close가 된다면, 이 후 다시 상대 장치의 전원이 들어올 경우, 사용자가 임의적으로 다시 구동을 해주어야 할텐데, 이 경우에도 만약 socket close가 되면 이 후 몇 십분 간격으로 한 두번씩 ping 보내게 구성하셔서 동작되게 하시거나, 아니면 방금 말씀드린대로 사용자가 다시 구동하는 방법으로 사용하시면 될 것 같습니다.

감사합니다.

안녕하세요 :slight_smile:

잘 이해가 안되어 질문 드립니다.

ARP응답이 없을 경우(상대방 장치가 존재하지 않을 경우) 당연히 PING도 안됩니다.

어떤 처리를 하려는 것인지 어떤 것을 구현하려고 그러시는지 궁금하네용.