WIZnet Developer Forum

W5300 udp 모드 전송 시 arp 처리 관련 질의

안녕하세요, 담당자님:

현재 W5300을 UDP 모드로 운용하는 FPGA 기반 드라이버를 설계하고 있습니다.
MAC 주소를 얻는 ARP 세션에서 문제가 생기는지 UDP 전송이 되질 않습니다. 그래서
MAC을 미리 알려주고 SEND 대신 SEND_MAC으로 설정 후 전송하면 아무 문제 없어
당장은 이렇게 운용하고 있습니다.

머지 않은 시기에 이문제가 해결되어 ARP를 통해 MAC을 구한 후 SEND 명령에 의해
패킷을 전송토록 해야 하기 때문에 지금 여러가지 시험을 하고 있는 중입니다. 현상과
질문은 아래와 같습니다.

  • 아래 -
  1. 현상
  • SEND는 전송실패, SEND_MAC은 전송성공(ARP 문제로 보임)
  • ARP Timeout 발생 안함 (루틴에서는 SENDOK 발생 시 다음으로 진행 ARP Timeout이
    발생 시 재전송하도록 구현)
  1. 질문
  • UPD 모드에서 ARP과정에 대한 처리를 어떻게 해야 하나요? (메뉴얼을 읽어 봐도 정확히
    모르겠음)
  • ARP에 의해 MAC 주소가 구해졌는지 어떻게 알 수 있나요?
  • SEND 명령에 대해 APRto로 인해 실패했을 경우 이미 쓴 송신버퍼를 어떻게 처리해야
    하나요?

일단 이상이 질문입니다. 감사합니다.

안녕하세요, 담당자님:

저희가 지금 추가적인 시험을 하고 있는 중인데 현상에 대한 추가적인 질의사항이
있어서 적습니다.

Destination IP 주소는 정상적으로 설정하고 Destination의 MAC 주소(Sn_DHAR)만
실제와 다르게 설정하여 SEND_MAC으로 UDP 전송하였는데 송수신이 안되지 않을까
하는 예상과 달리 Destination 쪽에서 정상적으로 수신이 되네요. 그렇다면

  1. ARP가 사전에 정상동작하여 Destination MAC 주소를 취득했기 때문인가요?
  2. 데이터시트를 보면 SEND_MAC으로 전송하면 ARP 없이 애초에 Sn_DHAR 레지스터에
    설정한 MAC 주소로 UDP 패킷을 전송한다고 되어 있는데, 제가 상대 Node의 MAC 주소와
    다른 존재하지 않는 MAC 주소를 할당했는데도 불구하고 Destination에서 패킷을
    정상수신하네요. 어떻게 이해해야 할까요?

도움 감사 드립니다.

안녕하세요, 담당자님:

저희가 WireShark로 시험한 결과 아래와 같은 현상이 있었고 해결 되었습니다. 제가 Gateway 설정을
잘못해줬네요. Gateway 주소를 Destination IP와 동일하게 하니 패킷이 전송되네요. 그런데요 이렇게
하는 것이 맞는 건가요? Errata의 경우와는 좀 다른 것 같은데… Errata는 Destination IP가 0.0.0.0일 때
아니었나요? 현 상황은 Destination IP가 192.168.0.20인데…

  • 현상 -
  1. SEND_MAC으로 전송 시
    -. ARP 발생안함
    -. 패킷이 WireShark에 캡쳐됨
    -. Destination MAC 주소는 Header 관찰 결과 실제 Network 카드와 달리 설정하더라도 설정한 값이 그대로 전달
  2. SEND로 전송 시
    -. ARP 발생
    : 실제 W5300 IP는 192.168.1.86, Destination IP는 192.168.0.20로 데이터를 SEND하고자 했는데 ARP는
    192.168.1.1로 발생 (Who has 192.168.1.1? Tell 192.168.1.86)
    -. 패킷이 WireShark에 의해 캠쳐되지 않음
    -. 패킷이 캡쳐되지 않았기에 패킷 내용물 확인 안됨

일단 주의사항이나 의견이 있으시면 주시면 감사하겠습니다.

안녕하세요
우선답변 늦어 죄송합니다.

몇가지 오해하시는 부분이 있어 알려드립니다.

  1. Destination 관련 register(Sn_DIPR, Sn_DHAR…)같은경우에는 해당 register에 값을 쓴다고 하더라도 쓰여지지않습니다.
    ARP이후에 해당 register에 저장되게 됩니다.
  2. 일반적인 send를 자동으로 ARP를 통해 MAC을 얻은후 데이터를 전송하지만,Send_MAC은 경우 MAC을 이미알고있어 UDP/IPRAW를 통해 data를 전송할때 ARP동작을 없앤것입니다.
    그러니, Send_MAC일경우는 ARP timeout이 발생하지 않습니다.
  3. Sendok interrupt가 뜨지 않으면, 송신버퍼의 포인터는 증가하지 않습니다.

4.Destination IP : 192.168.0.20/ Source IP(W5300): 192.168.1.86 이라면,
Source Gateway : 192.168.1.xxx로 유지하셔야하고.
Source Subnet Mask : 255.255.0.0으로 변경하셔야합니다.

도움되셨으면 합니다…

감사합니다.

EK:)

안녕하세요, 담당자님:

답변 감사 드립니다.

Sn_DIPR이 ARP 이후 레지스터에 저장된다는 것은 잘 이해 가지 않네요. 실제 시험을 해봐도
해당 레지스터를 쓰지 않는 이상 ARP가 해당 Destination으로 저절로 발생하지는 않았습니다.
그 외에는 잘 이해했고 몇 가지 더 시험을 해보도록 하겠습니다. 감사합니다.

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