데이터 송신에 관련된 오류 문의 입니다


#1

망 구성은 PC 에 서버 프로그램(서버 소켓)이 있고, W5100 을 SPI 인터페이스로 한 게이트웨이 장치(클라이언트 소켓)가 있습니다. TCP 타입으로 소켓을 연결하고 있습니다.

  1. TX 지연 현상

발생 빈도는 낮으나 Send()함수를 통해서 W5100의 TX 버퍼에 데이터를 정상적으로 Copy 한듯 한데 1분이상 전송 지연이 발생하였습니다. ( 심지어 전송이 누락된 경우도 있습니다. )

  1. send() 함수 Block

이것도 발생 빈도는 낮으나 서버 소켓이 망 이상으로 Close 되고 다시 연결 된 그 시점에 W5100 장착 보드가 send() 함수를 호출 할 때 해당 함수에서 Block 되는 현상이 발생합니다. Block이 발생하는 부분은 아래와 같이 2개 의 포인트 인듯한데… (정확하지 않습니다만)
while( IINCHIP_READ(Sn_CR(s)) );
while ( (IINCHIP_READ(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK );

그 이후 서버 소켓을 다시 Close 하고 Open 해야만 0 이 리턴되면서 함수가 종료 됩니다.

위의 문제에 대한 해결 방안 또는 권장 운행 방식에 대해서 코멘트 부탁드립니다.


#2

안녕하세요 고객님.

  1. 지연현상에서 여러가지 경우가 있을 수 있습니다.
    먼저 네트워크 트래픽이 많아 ACK를 받지 못해 지속적으로 재전송하는 경우가 있는데 이경우 W5100과 PC를 다이렉트로 연결해서 테스트 해보시기 바랍니다. 이렇게 구성하였으나 여전히 증상이 지속된다면, 트래픽 문제는 아닌 것으로 판단이 됩니다.

두번째로 서버의 소켓프로그램의 처리속도가 늦어져서 ACK를 보내는 속도가 데이터를 받는 속도보다 늦어져 W5100에서 전송시간이 지연되는 경우도 가능합니다. 이 경우를 확인하기 위해 저희 홈페이지에 있는 AX1 프로그램을 서버에 설치하여 테스트 해보시기 바랍니다. AX1은 loopback 프로그램으로 받은 즉시 바로바로 보내기 때문에 RX버퍼가 꽉 차서 발생하는 딜레이가 없습니다. 만약 AX1 프로그램으로 정상적으로 동작한다면, 마지막으로는 PC 성능이 너무 저하가 된 경우일 수도 있습니다.

위의 모든 경우가 아니라면 wireshark와 같은 패킷캡쳐 프로그램으로 서버와 클라이언트 간의 주고 받는 데이터를 캡쳐하여 다시 문의 주시기 바랍니다.

  1. Send() 함수에서 block이 설명하신 두 군대 말고도 TX free buffer size 체크에서도 발생 할 수 있습니다. 위의 문제와 같이 발생한다고 가정 한다면, 아마도 1번 문제가 해결될 수도 있을 것 같습니다.

감사합니다.