Tcp 송신속도 문의

안녕하세요 W5100의 데이터 송신 속도에 대하여 문의 하고자 합니다.

저희가 server & client 모드 두가지로 TCP 통신 실험을 하고 있습니다.
똑같이 100kbyte 되는 데이터를 전소하고 있습니다.
server mode에서 client(PC)에 데이터를 전송만 하면 평균 210ms 됩니다. 그러나 이때 client에서 일정 주기로 3byte 데이터 씩 server에 전송하면 80~100ms 이내로 변합니다. 이런 현상은 왜 발생 되나요?

또한 client mode에서 server(PC) 에 똑 같은 데이터를 전송하면 200~500ms 되고 심한 경우에는 700ms까지도 됩니다. 이때 PC에서 3byte데이터를 주기적으로 주어도 마찬 가지입니다.

client mode 와 server mode에서 데이터 송 수신 속도 차이가 있나요?

안녕하세요

기본적으로 Server/Client 모드에 따로 속도 차이가 나지는 않습니다.

혹시 Timeout이 발생하지 않나요?
common register에 RCR/RTR을 변경하지 않으면,
Timeout값이 default value로 200ms로 됩니다.
일정한 주기로 보낸다고 하셨는데, 일정한 주기라는 것이 어느정도인지…

감사합니다.
EKkim

빠른 지원 감사합니다.

100ms마다 3byte 전송 합니다.

TimeOut에 관하여 확인 해보니 ServerMode에서 socket을 생성 하면서 socket(i, Sn_MR_TCP, 80, Sn_MR_ND); 이렇게 delay 없이 설정 하였으나
client모드에서는 이와 같이 socket생성 함수를 쓰지 않고 connect(s,destaddress,destport)로만 했네요.

  1. client 모드에서 connect(s,destaddress,destport) 하기 전에 socket(s, Sn_MR_TCP, 80, Sn_MR_ND);를 하면 이 socket은 no delay 로 되나요? 아니면 따로 처리 해야 되나요?

  2. wiznet 홈페이지 loopback예제에서 보면 client 모드 동작에서 connect(s,destaddress,destport) 만을 하고 client 모드로 동작이 되기에 크게 생각하지 않았는데, client 모드 동작 전에 socket(s, Sn_MR_TCP, 80, Sn_MR_ND);을 해도 되나요? 한걱과 안 한것이 어떤 차이가 있나요?

  3. 추가 질문 하나만 더 하겠습니다.
    IP를 FW에서 고정 으로 사용하면 공유기에 처음 접속 순간만 networklist에 w5100에 설정된 IP가 뜨고 이후 사라집니다.
    PC나 컴퓨터에서 수동으로 IP를 설정하면 공유기 네트워크 리스트에 표시가 되는데 w5100를 이용하여 수동으로 IP 설정후 공유기네 나타나게 하려면 어떠한 동작이 더 필요 한가요? (DNS 기능을 사용하여 자동 할당 으로 하면 공유기에 표시 됩니다.)

안녕하세요~

  1. TCP Client일경우에도 Socket 함수는 TCP Server와 동일하게 사용됩니다.
    저희가 제공하는 Loopback application에서 Socket함수는 Sn_SR가 SOCK_CLOSED일때 사용됩니다.

TCP Client일때는

  • Socket open → connect → send /receive ->close

Sn_MR_ND를 할 경우 peer로 부터 데이터를 수신한 다음 곧바로 ack packet이 전송되며,
사용하지 않을 경우 내부 timeout 메커니즘(RCR/RTR)에 따라 전송됩니다.

  1. 1번과 동일한 답변인듯합니다.

PC <-> 공유기(192.168.13.xxx) <-> W5100 EVB
위와 같은 구성으로
W5100(TCP Server) <—> PC(TCP Client)로 테스트 했습니다.

수동으로 W5100 IP를 192.168.1.100으로 작성하면 통신이 되지 않습니다.
반면에 수동으로 192.168.13.100으로 작성하면 통신이 되지만, 공유기 networklist에 뜨지는 않습니다.

즉,
W5100과 PC는 192.168.13.xxx의 IP를 가져야 통신이 가능합니다.
이는 DHCP를 IP를 할당 받거나/ 수동으로 IP를 넣을때 모두 동일합니다

위와같이 네트워크 구성을 한후에
PC에서 W5100의 IP 로 ping을 보냈을경우 응답이 오는지 확인하셔야 할 것같습니다.

DNS가 되는 이유는

  • DHCP를 이용하여 IP를 할당받았거나
  • 같은 대역(192.168.13.xxx)의 값으로 IP를 주었기때문입니다.

감사합니다.
irina Kim :slight_smile:

안녕하세요. 답변 감사 합니다.

“- Socket open → connect → send /receive ->close” 중에서 Socket open 이라는 말은 무었을 뜻 하난요 ? 이렇게 socket(2, Sn_MR_TCP, 19800, Sn_MR_ND);을 생성 하는 것을 말씀 하시는 건가요?
제가 socket(2, Sn_MR_TCP, 19800, Sn_MR_ND);으로 socket을 초기화하고 select(s, SEL_CONTROL)으로 socket 상태를 확인 해 보니 SOCKET_INIT(0x13) 이 였습니다.
“저희가 제공하는 Loopback application에서 Socket함수는 Sn_SR가 SOCK_CLOSED일때 사용됩니다.” 라고 하셨는데 connet함수를 다른 어 떤 상태에서 호출 가능한가요?
제가 sock_init 상태에서 connet를 해 보았습니다. 속도가 확연이 빨라 졌는지는 눈에 띄게 는 보이지 않습니다. 그러나 connet되는 반응 속도는 loopback에서처럼 빨리 반응을 해 주지 않고 있습니다.

client 모드로 사용하려면 socket(2, Sn_MR_TCP, 19800, Sn_MR_ND) 후 어떤 동작이여야 맞나요?

안녕하세요.

  1. Socket open은 Socket함수를 말합니다.
  2. connect함수 Sn_SR이 SOCK_CLOSED일때 사용가능합니다.
  3. TCP Client 동작의 함수는
    socket() → connect() → send() or recv() ->close()

Socket()내에 Sn_CR 명령은 다음과 같이 동작한다.

Sn_CR_CLOSE → (Sn_SR = 0x00 변경)-> Sn_CR_OPEN → (Sn_SR = 0x13 변경)
즉, Connect()은 Sn_SR값이 SOCK_INIT(0x13)일때 사용해야한다.

  1. 속도의 비교는 Sn_MR의 ND 비트를 사용할때와 안할때는 비교하셔야합니다.
    [ socket(2, Sn_MR_TCP, 19800, Sn_MR_ND) 와 socket(2, Sn_MR_TCP, 19800, 0x00) ]

참고로
TCP Server 동작함수는

  • socket() → listen() → send() or recvfrom() → close() 입니다.
    UDP 동작함수는
  • socket() → sendto() or recvfrom() → close() 입니다.

감사합니다.
irina kim

동작 확인 되었습니다.
자세한 설명 감사합니다.

다른 문의가 있으시면 글남겨주세요
thanks
irinakim :slight_smile: