W7500/W7500P RST,ACK 문제 분석 요청 件

안녕하세요. 에이루트 입니다.
현재 사용 하고 있는 모델은 W7500/W7500P을 사용 하고 있습니다.
테스트 환경은 리눅스이고, 테스트 방식은 Shell Script 방식으로 사용하고 있습니다.
W7500/W7500P모델 모두 발생 합니다.

첨부 파일(Shell_Script.zip 및 WireShark : W7500_RST_ACK.zip) 참조
테스트 방법 ./loopback.sh 회수 IP Addres delay
[ex: ./loopback.sh 10 192.168.0.192 0]

소스는 샘플 예제와 동일 합니다.
main.c

while(1)
{
loopback_tcps(0, test_buf, 9100);
}
loopbak.c

int32_t loopback_tcps(uint8_t sn, uint8_t* buf, uint16_t port)
{
int32_t ret;
uint16_t size = 0, sentsize=0;

#ifdef LOOPBACK_DEBUG
uint8_t destip[4];
uint16_t destport;
#endif

switch(getSn_SR(sn))
{
case SOCK_ESTABLISHED :
if(getSn_IR(sn) & Sn_IR_CON)
{
#ifdef LOOPBACK_DEBUG
getSn_DIPR(sn, destip);
destport = getSn_DPORT(sn);
printf(“%d:Connected - %d.%d.%d.%d : %d\r\n”,sn, destip[0], destip[1], destip[2], destip[3], destport);
#endif
setSn_IR(sn,Sn_IR_CON);
}
if((size = getSn_RX_RSR(sn)) > 0) // Don’t need to check SOCKERR_BUSY because it doesn’t not occur.
{
if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
ret = recv(sn, buf, size);

		if(ret <= 0) return ret;      // check SOCKERR_BUSY & SOCKERR_XXX. For showing the occurrence of SOCKERR_BUSY.
       /*
		sentsize = 0;

		while(size != sentsize)
		{
			ret = send(sn, buf+sentsize, size-sentsize);
			if(ret < 0)
			{
				close(sn);
				return ret;
			}
			sentsize += ret; // Don't care SOCKERR_BUSY, because it is zero.
		}
		*/
     }
     break;
  case SOCK_CLOSE_WAIT :
	 #ifdef _LOOPBACK_DEBUG_
      //printf("%d:CloseWait\r\n",sn);
	 #endif

	 if((ret = disconnect(sn)) != SOCK_OK){
	 	
		#ifdef _LOOPBACK_DEBUG_
			printf("%d:CloseWait Fail:%d\r\n",sn,ret);
		#endif
	 	return ret;
	 }

	 #ifdef _LOOPBACK_DEBUG_
     printf("%d:Socket Closed\r\n", sn);
	 #endif
	 
     break;
  case SOCK_INIT :
	//#ifdef _LOOPBACK_DEBUG_
	 //printf("%d:Listen, TCP server loopback, port [%d]\r\n", sn, port);
	//#endif
     if( (ret = listen(sn)) != SOCK_OK){

	 	#ifdef _LOOPBACK_DEBUG_
	 	printf("%d:Listen, TCP server loopback, port [%d]--> Fail:%d\r\n", sn, port,ret);
		#endif
	 	return ret;
     }

	 #ifdef _LOOPBACK_DEBUG_
	 printf("%d:Listen, TCP server loopback, port [%d]\r\n", sn, port);
	 #endif
     break;
  case SOCK_CLOSED:
	#ifdef _LOOPBACK_DEBUG_
     //printf("%d:TCP server loopback start\r\n",sn);
	#endif
     if((ret = socket(sn, Sn_MR_TCP, port, 0x00)) != sn){
	 	#ifdef _LOOPBACK_DEBUG_
          printf("%d:Socket open Fail:%d\r\n",sn,ret);
	   #endif
	 	return ret;
     }
	#ifdef _LOOPBACK_DEBUG_
     printf("%d:Socket opened\r\n",sn);
	#endif
     break;
  default:
     break;

}
return 1;
}
검토 부탁 드립니다.
수고하세요
Shell_Script.zip (647 바이트)
W7500_RST_ACK.zip (2.3 KB)

안녕하세요 위즈네트 입니다.
패킷확인결과 9100 port 소켓에서 SYN 수신이후 RST,ACK 패킷 전송이 확인됩니다
네트워크에 대한 환경부분도 확인되면 도움이 많이 될 것 같습니다.
W7500과 W7500P의 사용 IP가 192.168.0.192가 맞을까요?
테스트 환경은 리눅스PC이며 정확한 application을 확인할 수 있을까요?
감사합니다.

답변 감사 합니다.

  1. W7500과 W7500P의 사용 IP가 192.168.0.192가 맞을까요?
    네 맞습니다.
  2. application을 확인할 수 있을까요?
    리눅스 Shell_Script : 도스의 Console 프로그램이라고 생각 하시면 됩니다.

참조 ./loopback.sh 10 192.168.0.192 1 와 같이 테스트 시 정상 동작 합니다만,
(즉 delay 0으로 사용 하지 않으면 발생 하지 않습니다.)
필드 이슈 사항으로 ./loopback.sh 10 192.168.0.192 0 조건으로 해결 해야 하는 사항입니다.
검토 부탁 드립니다.

가상 리눅스 설치 방법입니다.

참조 바랍니다.

회신 부탁 드립니다.