[W5500] TCP 전송 및 수신 문의

안녕하세요

TCP/IP 전송에 대한 개념이 많이 부족하여 관련된 사항에 대해 문의 드립니다.

WIZ550io 제품을 이용하여 TCP로 DATA를 송수신을 하고 있습니다.

다른 개발자분이 말씀하시길, TCP 는 전송중 패킷이 분할되는 경우 수신단에서 띄엄띄엄 수신되기 때문에
Socket 프로그램에서 Software 처리를 통해 하나의 패킷으로 만들어야 한다고 합니다.

[질문 1] 서버에서 WIZ550io 로 1KB 의 데이터를 한번에 전송하는 경우,
중간 전송계층에서 패킷이 분할되었을 때, WIZ550io 가 알아서 하나의 전체 패킷으로
만들어 HOST MCU로 내보내 주는건가요?

[질문 2] 만약 합쳐진 패킷이 아닌 띄엄띄엄 수신된다면…
서버에서 전송한 한프레임의 전체 패킷이 모두 수신되었다는 것을
WIZ550io 을 통해 알수있는 방법이 있을 까요?

답변 부탁드립니다.

안녕하세요.

보통 1kB의 데이터를 한 번에 전송하실 경우, 저도 테스트를 해봐야 알겠지만, 1kB정도면 한 번에 전송되지 않을까 합니다. 데이터 사이즈가 커지면 2~3번에 걸쳐서 데이터를 보내기도 합니다. 이는 테스트를 해보고 알려드릴 수 있을 것 같습니다.

Wireshark 라는 프로그램이 있습니다. 이 프로그램을 이용해서 패킷이 나뉘어졌는지, 한 번에 전송되었는지 확인할 수 있습니다.

감사합니다.

답변 감사드립니다.

[질문 1]에서 답변주신 상황과 같이 한번에 전송하는 데이터 사이즈가
W5500 Socket 버퍼 사이즈(2KB)를 초과 하는 상황은 아닙니다.

단지 전송측(PC)에서 한프레임으로 전송한 패킷이
중간 전송계층의 전송지연으로 인해 나뉘어서 수신 되는 상황일 때,
패킷이 수신될때까지 W5500이 모아 두었다가 수신완료 여부를 알려주는 것인지…
HOST MCU 에서 알아서 수신완료 여부를 판단해야 하는것인지 확인이 필요해서 문의 드렸습니다.

전송측(PC) 에서는 일부러 패킷을 나누어서 전송하지는 않는 상황입니다.
때문에, 현재 로컬네트워크나 근거리에서 TCP/IP 로 송수신 할때는 문제가 없는 상황인데,
곧 제품이 500Km 이상 장거리 송수신에 적용될 예정이라…

이런경우, W5500 TCP Socket 처리에 별도로 Software 적인 처리가 필요한 것인지 해서 문의드립니다.

안녕하세요.

결론적으로 말씀드리면 MCU에서 수신완료 여부를 판단해서 사용하시면 됩니다.
W5500은 TCP든 UDP든 데이터가 들어오면 protocol을 걷어내고 실제 buffer에 저장하고, 결국 이를 사용하고 가공하는 것은 MCU로 제어를 해야합니다.

이해하기 쉽게, 일단 총 2kb의 패킷 데이터를 1kb씩 나누어 보낸다고 하면 각 완성된 1kb 데이터가 2개 전송되게 됩니다. 그러면 W5500은 각 1kb의 데이터의 protocol을 걷어내고 실제 데이터를 버퍼에 저장하게 됩니다.

그러면 MCU는 W5500의 버퍼를 확인하여 원하는 데이터가 들어왔는지 읽어서 확인하고 파싱하는 형태로 가시는 것이 맞습니다.

감사합니다.

답변 감사합니다~