현재 1000개 이상의 제품이 클라이언트로 동작 중인데
서버 관리자로 부터 연결상태가 이상하다는 문의를 받았습니다.
문의 내용은
서버와 통신을 하던 중 서버측에서는 클라이언트 제품과의 소켓이 끊어졌다고 로그가 찍히는데,
제품측에서는 소켓 연결이 끊어지지 않은 상태로 판단하여 통신을 지속한다는 내용입니다.
현재 클라이언트 제품의 경우 1.25초 마다 Sn_SR 커맨드를 이용하여 소캣 상태를 읽어오고 있습니다.
1.25초라는 시간이 짧은 시간은 아니지만 그 사이에 W5500이 인식하지 못하게 소켓 연결이 해제 되었다가
자동으로 연결(connect 명령 없이)이 될 수 있는지 궁금합니다.
우선 W5500에서 연결이 끊어졌는데 connect 명령없이 자동연결이 되는 경우는 없습니다.
TCP 통신 자체가 connection이 이루어진 이후에만 통신이 가능하기때문에
W5500입장에서는 연결이 끊긴적이 없거나, 서버로부터 Connect 명령에 대한 응답을 받은 경우 뿐입니다.
말씀하신 상황은 서버에서 연결을 끊기위한 메세지를 보냈으나,
W5500이 이를 받지 못해 통신을 지속하는것으로 추측됩니다.
접속이 끊겼다고 판단 후에 별도의 connect 과정 없이도 데이터 송수신이 진행된다면 오동작으로 판단하셔도 됩니다.
서버에서 접속이 끊긴 후 클라이언트에서 통신을 지속할 때 서버의 응답은 어떤가요? 정상 동작의 경우 서버에서만 접속이 끊었고, 클라이언트에서는 데이터 송수신을 지속할 경우 서버에서 다시 접속을 끊는 메시지를 보내서 결국 끊기게 되어있습니다. 하지만 서버 설정에 따라 메시지를 보내지 않을 수도 있습니다. 상황을 정확히 판단하기 위해 wireshark를 통해 패킷을 확인하는 것이 좋을 것 같습니다.
위와 같은 경우는…
서버에서 클라이언트(W5500)에게 FIN pakcet을 보냄으로써 연결끊기를 시도했지만,
W5500에서는 FIN pakcet을 받은 후 MCU부터 Sn_CR의 disconnect 명령을 받지 못한경우 연결이 끊기지 않아 데이터 전송을 계속하게 됩니다.
위글을 wireshark 프로그램을 이용하여 확인하실부분은 다음과 같습니다.
서버쪽에서 FIN packet을 보낸후 Client에서 FIN + ack packet을 보냈는지를 확인하셔야합니다.