Recvfrom 함수 관련 질문

안녕하세요.

recvfrom() 함수 내에 wiz_recv_data(sn, head, 8); <— 이 부분 관련해서 질문드립니다.

W5500 해당 소켓의 Rx Buf 내 데이터를 가져 오는데… 어떻게 IP addr, Port addr, length 정보를 얻을 수 있죠?
UDP protocol 포맷 내의 Data 부분만 Rx Buf 에 저장되는 것 아니였나요?
TCP 같은 경우는 TCP protocol 포맷 내의 Data 부분만 저장되는 것 같은데…
제가 뭔가 잘못 이해하고 있는것인지… 여쭤봅니다.

아… 조금전에
ioLibrary 100% 활용하기 (4) 글을 읽어보니 이런 글이 적혀있네요

UDP와 같은 Connection-less Datagram 통신은 1:N 통신이 가능하여 WIZnet chip들은 Data Packet외에 IP, Port number와 같은 추가 정보를 Data packet 앞에 추가합니다.

하드웨어(칩)를 원래 이렇게 만들어 놓으신 것 같은데…
데이터쉬트에는 그런 설명이 잘 안보여서 그런데
혹시 데이터쉬트에도 그런 내용이 있나요?

안녕하세요.

질문하신 부분은 UDP Packet Header 정보를 먼저 아시면 이해가 되실겁니다.

아래 URI를 참고하시면 UDP Packet에 대한 정보가 기재되어 있는데요. 확인 부탁드립니다.

netmanias.com/ko/post/blog/5 … -ip-tcp-ip

위 내용을 확인하신다면, 결국 이런 Protocol을 그대로 코딩한 것으로 아시면 될 것 같습니다.

감사합니다.

안녕하세요.

추가 답변드립니다.

일반적인 UDP의 정보라면, 제가 앞서 말씀드린 Packet에 대한 정보가 맞습니다.

하지만 저희 W5500칩의 역할은 위 글에서 설명한 Header 및 기타 정보가 있는 전체 Packet을 칩 내부에서 Packet을 분리하여 Header 정보를 처리해주고,

실제 Data는 Buffer(Rx_buf)에 저장이 됩니다.

그러면 실제 사용자는 따로 header를 처리해주지 않으셔도 저희 칩만 사용하면 Data를 처리할 수 있습니다.

그렇다면, header정보 중 중요한 IP addr, Port addr, length 정보는 칩 내부 Register에 담깁니다.

그래서 UDP로 Data가 온다면 칩 내부에서 header를 처리하여 정보를 내부 Register에 담아놓고, App Data를 버퍼에 저장하게 됩니다.

그리고 사용자는 Recvform함수를 사용하여 칩 내부에 저장된 IP addr, Port addr, length 데이터를 가져오게 됩니다.

그래서 Recvform 함수는 Register값을 읽기 위해 &를 표시하여 사용합니다.

length의 경우 Sn_RX_RSR 함수를 사용하여 확인할 수 있습니다.

감사합니다.