w5500 data(payload) length

안녕하세요
w5500 사용중인데 한번에 송신/수신 가능한 udp/tcp payload size 문의드립니다.

  1. payload size는 소켓에 할당된 메모리 용량만큼 사용가능한지요
  2. payload가 mtu 보다 큰 경우 w5500이 자동으로 나누어 보내는지 궁금합니다

감사합니다

  1. 맞습니다. 다만 UDP RECV의 경우 패킷당 8byte의 packet info 데이터를 제외하셔야 됩니다.
  2. 송신의 경우 w5500이 자동으로 나누어 보내며, 수신의 경우 mtu보다 큰 패킷은 수신하지 못합니다.

MTU 보다 큰 패킷을 수신하지 못한다면
만일 W5500 하나가 MTU 단위로 자동으로 나누어 송신하고 다른 W5500이 수신하는 경우

  1. 수신측에서 받는것은 문제가 없는지요
  2. 문제가 없다면 수신측에서 여러 파트인지 한 패킷인지 구분하는 기준은 무엇인지요
    질문을 바꾸면 나누어진 패킷을 수신하는 방법에 대한 예제나 샘플이 있는지요
  3. 송신부가 W5500이 아닌 같은 MTU를 사용하는 PC나 다른 HOST인 경우에도 2)에서 사용한 방법을
    공통적으로 사용할 수 있는지요

프로젝트 진행에 매우 중요한 문제로 실질적인 솔루션을 주시면 감사하겠습니다

  1. W5500끼리 통신한다면 W5500은 MTU보다 큰 패킷을 전송하지 않기때문에 수신에 문제가 되진 않습니다.

TCP의경우 구분하지않으며,
image
UDP의 경우 데이터 수신시 패킷앞에 packet-info가 붙습니다. 이를통해 구분합니다.
ioLibrary의 Driver code에서 recvfrom 함수를 참고하시길 바랍니다.

3 가능합니다.

헤더의 DATA SIZE 2바이트는 함께온 데이터 길이라는것은 이해하고 있습니다.
조금 혼선이 생기는 부분은

  1. 현재 패킷이 큰 패킷의 잘려진 일부이므로 합쳐서 사용해야하는지
  2. 아니면 독립적으로 전송된 패킷인지를 어떻게 판단할 수 있는지 입니다.

친절하고 빠른 답변에 감사드립니다.

안녕하세요.

WIZnet chip은 Fragmented Packet과 Jumbo packet을 지원하지 않습니다. (Hardware logic으로 구현되어 있어 메모리가 충분하지 않기 때문에).

TCP든 UDP든 Packet이 Fragment되지 않는다면 MTU에 상관없이 수신이 가능합니다.
MTU는 송신에 관여하는 것으로 전송시 mtu 단위로 나누어 보냅니다.

tcp 수신은 수신 버퍼에 저장된 것을 한번에 읽어들일 수 있습니다. (패킷 구분이 필요하다면, 패킷 내에 사용자가 구분할 수 있는 정보를 삽입하셔야 합니다. 일종의 Header가 있어야 합니다. 사용자 application에 따라 달라집니다.)

udp 수신은 기본적으로 사용자가 전송하는 단위 즉 Packet 단위로 수신되어야 하며, 이를 위해 수신된 모든 패킷은 udp header를 포함합니다. tcp의 예와 마찬가지로 udp header가 처리된 데이타 내에 사용자가 삽입한 data 정보를 이용하여 전체 data를 처리할 수 있습니다.

어떤 응용을 개발하는지 모르겠지만, 일반적으로 fragmented packet으로 송수신하지 않습니다.
예로 이미지를 하나의 data로 보내려면 Fragment가 발생합니다. 대부분은 fragment packet을 전송하지 않고 MTU 단위로 나누어 전송합니다.
각 패킷을 이미지 헤더 정보를 이용하여 하나로 묶어 이미지로 처리하는 것은 사용자의 몫입니다.

감사합니다.