Ethernet 케이블 단선시 W5500동작

안녕하세요.

소켓 한개를 TCP/IP Server 모드로 잘 사용하고 있다가 Client측의 정상적인 Close Socket 명령 없이 케이블이 단선되거나 빠졌을때 W5500의 동작이 궁금합니다.

현재 Debugger로 본 결과 Status 가 LISTEN 이었던 소켓은 계속 LISTEN으로 남아 있고 ESTABLISHED로 되어 있던 소켓은 CLOSED로 되어 버리는 것 같은데 맞는지 확인 부탁 드립니다.

감사합니다.

안녕하세요.

케이블이 단선되거나 빠졌을때 만약 W5500이 아무런 동작이 없을경우 현재 상태를 유지합니다.

established경우 그대로 현재 상태를 유지하지만 만약 패킷을 전송할 경우 timeout이 발생하여 closed가 됩니다.

listen의 경우 connection이 성립 되지 않았으므로 현재 상태를 계속 유지 할 겁니다.

감사합니다.

먼저, Debugger로 확인하신 내용이 맞습니다.

조금 더 자세히 정리하면
TCP Server로 동작 중 LAN 케이블 단선이 발생하는 경우 다음과 같은 대표 케이스들이 나올 수 있겠네요.

  1. Socket Established 상태 일 때 데이터 교환 없음
    현 상태를 유지합니다.
    다만 TCP 연결의 유지를 위해 keep-alive 패킷 등이 전송되도록 설정된 경우 아래 2.와 같이 동작합니다.

  2. Socket Established 상태 일 때 데이터 교환 발생
    TCP의 구조 상, 전송한 데이터에 대한 ACK를 수신하여야 전송이 완료되거나 다음 데이터가 추가로 전송됩니다.
    단선 시, 전송한 데이터에 대한 ACK를 받지 못하므로 Timeout이 발생하게 되며
    레퍼런스 드라이버에는 send() 함수 내에서 timeout 발생 시 socket을 close 하도록 구성되어 있습니다.
    이 때 Timeout 발생 시간은 W5500 칩 내 RCR, RTR에 의해 정해집니다.
    다만 W5500 칩이 사용된 디바이스가 먼저 데이터를 수신하고 전송 동작을 수행하도록 구성된 경우, 연결된 상태로 간주하고 대기합니다.

  3. Socket listen 상태 일 때
    TCP Client의 connection 요청이 발생할 때 까지 현 상태를 유지하므로, 단선 중에는 그대로 listen 상태입니다.


따라서 안정적인 TCP connection을 유지하고 체크하도록 제품을 구현 하시려면,
W5500내 auto keep-alive 기능을 사용하셔서 connection 유지를 확인하는 것이 좋으며,
(최소 한 번 이상의 데이터 전송 이후부터 keep-alive 패킷이 나간다는 점을 주의 바랍니다.)
LAN 케이블이 빠지는 등의 문제는 PHYCFGR (PHY Configuration register)의 LINK 비트를 통해 LINK up / down을 확인 하는 것으로 체크가 가능합니다.