소켓 연결 상태 불일치 관련

안녕하세요.
w5500 제품을 사용하여 제품을 구현하여 납품 중인 FW 엔지니어 입니다.

현재 1000개 이상의 제품이 클라이언트로 동작 중인데
서버 관리자로 부터 연결상태가 이상하다는 문의를 받았습니다.

문의 내용은
서버와 통신을 하던 중 서버측에서는 클라이언트 제품과의 소켓이 끊어졌다고 로그가 찍히는데,
제품측에서는 소켓 연결이 끊어지지 않은 상태로 판단하여 통신을 지속한다는 내용입니다.

현재 클라이언트 제품의 경우 1.25초 마다 Sn_SR 커맨드를 이용하여 소캣 상태를 읽어오고 있습니다.
1.25초라는 시간이 짧은 시간은 아니지만 그 사이에 W5500이 인식하지 못하게 소켓 연결이 해제 되었다가
자동으로 연결(connect 명령 없이)이 될 수 있는지 궁금합니다.

안녕하세요

우선 W5500에서 연결이 끊어졌는데 connect 명령없이 자동연결이 되는 경우는 없습니다.
TCP 통신 자체가 connection이 이루어진 이후에만 통신이 가능하기때문에
W5500입장에서는 연결이 끊긴적이 없거나, 서버로부터 Connect 명령에 대한 응답을 받은 경우 뿐입니다.

말씀하신 상황은 서버에서 연결을 끊기위한 메세지를 보냈으나,
W5500이 이를 받지 못해 통신을 지속하는것으로 추측됩니다.

What value Sn_SR is being checked against in your application?

It can be easily seen in the Wireshark log.

답변 감사합니다.
답변에 대한 추가 문의 사항이 있습니다

1.전자의 경우
서버에서 접속이 끊겼다고 판단이 되었으나,
별도의 connect 과정 없이 데이터 송수신이 진행 되었다면
서버의 오동작으로 판단하여도 될까요?

  1. 후자의 경우 해결가능한 방법이 있을까요?
  1. 접속이 끊겼다고 판단 후에 별도의 connect 과정 없이도 데이터 송수신이 진행된다면 오동작으로 판단하셔도 됩니다.

  2. 서버에서 접속이 끊긴 후 클라이언트에서 통신을 지속할 때 서버의 응답은 어떤가요? 정상 동작의 경우 서버에서만 접속이 끊었고, 클라이언트에서는 데이터 송수신을 지속할 경우 서버에서 다시 접속을 끊는 메시지를 보내서 결국 끊기게 되어있습니다. 하지만 서버 설정에 따라 메시지를 보내지 않을 수도 있습니다. 상황을 정확히 판단하기 위해 wireshark를 통해 패킷을 확인하는 것이 좋을 것 같습니다.

위와 같은 경우는…
서버에서 클라이언트(W5500)에게 FIN pakcet을 보냄으로써 연결끊기를 시도했지만,
W5500에서는 FIN pakcet을 받은 후 MCU부터 Sn_CR의 disconnect 명령을 받지 못한경우 연결이 끊기지 않아 데이터 전송을 계속하게 됩니다.

위글을 wireshark 프로그램을 이용하여 확인하실부분은 다음과 같습니다.

  1. 서버쪽에서 FIN packet을 보낸후 Client에서 FIN + ack packet을 보냈는지를 확인하셔야합니다.

현재 오동작 현상에 대하여 설명드리자면

서버와 통신이 단절되어 재 접속을 하게 되면
인증정보 요청 데이터를 전송하여 인증을 받도록 되어있으나

서버에서 연결해제 판단후에 인증정보 요청 데이터 전송없이
정기보고나 다른 평상시 동작에 포함되는 데이터를 전송하여 서버에서 오류가 나는 상황이라고 합니다.

특정 조건에서 발생하는 문제라고 하면 wireshark를 통한 캡쳐가 수월하겠지만
언제 발생할지 모르는 오동작이다 보니 캡쳐를 진행하지 못하고 있습니다.

또한 서버쪽에서 disconnect 동작을 수행한것이 아니라,
동작 중에 어떠한 원인으로 인해 클라이언트와 연결이 끊어졌다 라고 판단이 되어
오동작이 발생하는 듯 싶습니다.

지금 상황에서는 오동작 조건을 파악하여야 임의로 조건을 만들어서 캡쳐가 수월할듯 싶습니다.
혹시나 이러한 현상이 발생할만한 조건에 대하여 짐작이 되는 내용이 있으시면 조언좀 부탁드리겠습니다.