w5300 클라이언트 모드 동작 서버 연결시 타임아웃 오류

w5300과 서버pc와의 연결 : 크로스 케이블 연결
서버프로그램 : Loopback Test Program
서버 프로그램 port : 3000
서버 pc ip : 192.168.0.1
W5300 ip : 192.168.0.100

위와 같은 조건에서
socket(s,Sn_MR_TCP,any_port++,mode); 동작후에는 Sn_MR=0x0001,Sn_PORTR=0x0421(1057),Sn_SSR=0013 상태가 되고
w5300에서 서버로의 connect 동작시에 Sn_IR_TIMEOUT이 발생 합니다.

와이어 샤크 에서는 아래와 같이 모니터링이 됩니다.


w5300을 TCP Server모드로 동작시와 UDP로 동작시에는 정상적으로 동작 합니다.
비교를 위해 TCP Server모드 동작의 와이어 샤크 모니터링 결과입니다.


차이는 syc 프레임의 Option내용이 좀 다르다는 것인데
w5300을 서버로 동작시에는 syc를 받고 syc ack를 pc로 송신하고 연결이 되는데
w5300을 클라이언트로 동작시에는 syc를 pc로 송신하였는데 왜 pc에서 syc ack가 오지 않는 것일까요?

socket(s,Sn_MR_TCP,any_port++,mode); 에서

any_port 값은 비휘발성 메모리에 저장한 값을 사용하는지요?

이값은 계속 변경이 되어야만 서버에서 접속을 받아 줍니다.
이값이 reset마다 동일한 값을 갖는다면 서버에서는 접속을 받아 주지 않습니다.
이는 이전 접속가 서버에 여전히 남아 있기 때문입니다. 이 정보는 아주 오래 가지 때문에 any_port 값은 매번 새로운 값으로 변경하셔야 합니다.

답변 감사합니다.
이리저리 해보는 중에 포트를 고정시켜놓고 테스트한것을 올렸네요
코드는 아래와 같이 새로 테스트를 해 보았습니다.


테스트를 해본 결과 동일한 증상이었습니다.


sync를 보내지만 sync ack를 받지 못하는 상황입니다.
추가로 더 확인을 해 보아야될 부분이 있을까요?

소스를 보니 port가 1000으로 되어있는것 같은데 port가 안맞아서 그런거 아닌가요? 저도 궁금하네요~

PC의 IP 주소를 192.168.0.20으로 변경하는 건 어떠신지?
왠지 192.168.0.1은 공유기IP주소로 많이 사용되는걸로 알고있어서

다른건 이상이 없는거로 보여서…

irina kim :slight_smile:

자답 입니다.

테스트 환경이 문제였던것으로 보입니다.

Ax1 Program 매뉴얼에 w5300을 pc와 직접 연결하여 테스트 할 경우에는 크로스케이블로 연결하여 테스트를 하라고 되어있는데

w5300 서버모드 동작은 정상이었지만 클라이언트모드는 크로스케이블 연결시 동작 되지 않는것 같아 보입니다.

(케이블이 이상한것일수도??? ㅡㅡ;… 서버모드로는 정상적으로 동작 한 것으로 보아 이상은 없을 것이라고 생각 됩니다만은…)

공유기에 다이렉트 케이블로 pc와 w5300을 연결하여 테스트한 결과 정상 동작 하였습니다.

W5300은 Auto MDI/MDIX를 지원합니다. 즉 다이렉트케이블 및 크로스케이블을 자동으로 판단하여 사용할 수 있습니다.
단순 케이블 문제로만 판단하기는 무리가 있어 보입니다. 물론 케이블은 라인색별로 특성이 다릅니다. 잘못 만들어진 케이블에서는 오동작 할 수 있습니다.
하지만 패킷캡쳐를 분석해보면 서버가 응답을 아예 주지 않는 걸로 보입니다.
이런 경우는 이전에 설명드린 것 처럼 클라이언트의 로컬포트는 이전에 사용한 값을 그대로 사용하는 경우 대부분 발생합니다.
서버를 다시 재부팅 후 접속을 시도하면 접속이 잘될 것으로 판단되나, 테스트시 계속 값을 증가 시켜도, 클라이언트를 리셋을 해도 증가를 시작하는 값이 다시 리셋되어 이전에 접속 시도한 포트 넘버를 다시 사용될 가능성이 높습니다.
따라서, 증가된 값을 미리 비휘발성 메모리에 저장해두고 이를 이용하여 증가시킨 포트 넘버를 사용한다면 서버와의 접속에 있어 문제의 소지를 줄일 수 있습니다.