WIZnet Developer Forum

[W5300] SOCK_UDP모드에서 IP충돌 시 ARP갱신 문제

W5300을 SOCK_UDP모드로 사용하여 장치를 만들고 있습니다.

현장에 설치된 장치들에 문제들이 발생하는 경우가 있는데, 다음과 같습니다.

##1 연결상태 : w5300은 MAC_A의 정보를 갖고 있음.
PC_A(192.168.1.50, MAC_A) <--------> 장치(w5300, SOCK_UDP, server_ip_192.168.1.100)

##2 PC_A의 연결을 분리하고, PC_B를 동일한 IP로 연결
PC_A(192.168.1.50, MAC_A) 장치(w5300, SOCK_UDP, server_ip_192.168.1.100)
PC_B(192.168.1.50, MAC_B) <------------^

이 상황이 문제가 발생하는 상황입니다.
w5300은 접속해 오는 PC클라이언트의 IP가 동일하기 때문에,
w5300이 응답할때 사용하는 mac주소는 이전에 send했던, PC_A의 MAC_A를 dst로 사용하여
응답을 합니다.
: W5300_DS_V132K.pdf 의 80page 0x01 SOCK_ARP 부분을 보면
==> SOCK_UDP나 SOCK_UPRAW에서, 이전 SEND command에 대한 Sn_DIPR와
현재 SEND commnad의 Sn_DIPR이 다를 경우에만 ARP-process가 동작한다.
Sn_DIPR이 같을 경우 ARP-process없이
이전에 획득한 Destination hardware address를 그대로 사용한다.

즉, PC_B의 요청에 대한 장치의 응답패킷의 dst mac주소가 자신의 mac인 MAC_B가 아닌
MAC_A로 들어오기 때문에, NIC단에서 이 패킷을 버려 버립니다. ==> 어플리케이션 통신X

물론, NIC를 Promiscuous모드로 설정해 놓는 다면야, mac이 다르더라도 수신 하겠지만,
이런 상황은 일반적인 상황은 아닙니다.

ARP관리가 이전 ip와 mac을 동시에 비교해야 해서 ARP-process를 비교해야 할것 같은데,
ip만 비교해서 처리한다는게 문제를 야기하는 것 같습니다.

이런 상황에 대한 처리방법이 있나요? 혹시 제가 잘못 알고 있는 부분이 있는지요?
현장에서 너무 많이 문제들이 발생해서 긴급한 상황입니다.


안녕하세요

이해하신대로 W5300에서는 ARP를 전송한 이후 Sn_DIPR이 변경되지 않는 이상 ARP를 전송하지 않기때문에 해당 IP를 사용하는 장치가 변경되었다 하더라도 이를 알지 못합니다.

따라서 ARP를 강제로 전송해야하는 상황같습니다.
다른 칩의 경우 Force ARP라는 기능으로 ARP가 항상 전송되도록 설정할 수 있는 기능이 있지만, W5300에는 적용되지 않았습니다.

대체 방안으로 Sn_DIPR를 변경하여 다른 IP로 데이터를 전송하였다가 다시 본래 IP로 변경하면 될 것 같습니다.
다른 IP로 변경되었다가 다시 설정되면 ARP가 전송됩니다.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.