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만 비교해서 처리한다는게 문제를 야기하는 것 같습니다.
이런 상황에 대한 처리방법이 있나요? 혹시 제가 잘못 알고 있는 부분이 있는지요?
현장에서 너무 많이 문제들이 발생해서 긴급한 상황입니다.