WIZnet Developer Forum

Tcp 처리 중 issue

w5500 chip 사용중입니다

tcp socket을 아무 옵션 없이 NULL로 생성하였고

listen 후 established 들어 선 뒤 서로 send, recv 처리가 오고갑니다
->정정
: listen 후 established 들어 선 뒤 서로 recv 후 send 처리가 진행 됩니다

이때 recv 전 ack 처리는 정상동작하고 있고

send 전 ack 처리가 동반되어야 하는데

실제 동작은 send 전 ack 송신 처리가 없습니다
강제로 라도 ack 를 보내야 하는 상황인데 방법이 없을런지요

시간이 매우 촉박한 상황이라 빠른 확인 부탁드립니다

안녕하세요
ack는 recv에 대한응답으로서, 잘 수신하였다는 의미로 상대방에게 주는 패킷입니다.
따라서 recv후 ack처리가 동반되는것이지 send나 recv전에 ack처리가 동반되는것이 아닙니다.
감사합니다.

표현이 좀 이상했습니다

recv 후의 ack 처리가 안된 상태로 send를 진행하고 있습니다

해결방법이 궁금합니다

send와 ack는 하나의 패킷으로 처리 될수도 있습니다.

ack number(=상대방이 보낸 seq number + 수신한 data length )와 함께 data를 실어 보내면 정상동작하고 있는것이 맞습니다.

이론적으로 ack를 보내지않고 통신을 계속할 수는 없습니다.

저희칩에서는 ack를 받지 못할경우 재전송을 일정횟수만큼 시도하도록 되어있습니다.

재전송 처리도 진행되었나요?

확인 부탁드립니다.

현재 요구하는 프로토콜이

client 측에서 data를 send 할 경우

w5500 에서 tcp ack signal, recv 한 길이만 응답 한 뒤
해당 data에 대한 app단 return 정보를 다시 client로 send 처리를 하고
그에 대한 tcp ack signal을 다시 수신 처리 해야 합니다

아래 말씀하신 부분에 대해서는 정상적으로 동작하고 있습니다
(data + ack가 같이 진행되고 있습니다)
-> 이에 대해서는 제가 tcp에 대해 잘 모르지만
표준이 맞고 아니고를 떠나서, 현재 구현해야 되는 상황이 이렇습니다

그래서 처음에 강제로 라도 ack 를 보낼 수 있는 방법이 있는지를 함께 질문 드렸었습니다

결론은
현재 요구되는 프로토콜이 tcp ack signal을 한번 더 요구하고 있습니다

우선 W5500 dataseet를 보시면 Sn_MR register에 No delayed ack 라는 옵션이있습니다.

이 bit를 1로 setting해주면 ack가 데이터 수신 즉시 나갑니다.

정확히 원하시는 동작이 무엇인지 파악이 되지 않는데, 아마 이방법으로 해결이 되지 않을까 합니다.

혹시 이방법으로도 해결이 되지않으시면 전화로 들으셨던 zero data send를 다시한번 해보시기 바랍니다.

단 socket.c라는 파일에 send함수안에 CHECK_SOCKDATA()라는 함수가 있는데

zero data send를 막아놓은 함수입니다. 이 이부분을 주석처리하고 하셔야합니다.

즐거운 주말 보내세요 감사합니다.

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