WIZnet Developer Forum

w5500의 기본적인 질문

  • 완전 초보 입니다.
  • 귀사에서 제공하신 socket 드라이버를 분석 해봤습니다.

거기서 궁금한 점을 문의 합니다.

  1. w5500에서는 TCP모드 에서 1번에 1프레임만 Tx 할수 있는 거 같은데 맞는지요?

  2. 만약 프리사이즈 영역이 2개의 프레임을 보낼수 있는 용량 이라면,
    tx 버퍼에 1차 프레임 데이터를 쓰고 Send(), 그리고 첫번째 프레임이 송신 완료 되기 전에 연속해서 다시 2차 프레임 데이터를 쓰고 Send()
    하면 2개의 프레임이 연속해서 송신 되나요?

  3. 수신시에도, 2개의 프레임이 연속해서 수신 될때, 첫번째 프레임을 Receive() 하기전에 2번째프레임이 수신 되면, rmgn
    Receive()를 할때 2개의 프레임을 어떻게 구분 하나요? 아니면 Rx_size가 1프레임+2프레임 으로 되고, 구분이 불가능 한건가요?
    혹은 1차 프레임을 Receive()하기전에 다른 프레임이 수신 되면…Socket 에러가 나는건지요?

허접한 질문이지만…훌륭한 설명 부탁드립니다.
감사합니다.

전송 command를 내리면 데이터가 mss size보다 작을경우 한번만 전송되고 mss size보다 클경우 나누어져서 전송됩니다. 데이터 사이즈에 따라 한번에 한번만 전송될수도, 여러번 전송될 수도 있습니다.
TCP전송에서는 전송자가 수신자의 windowsize 보다 작은 패킷만 전송하게 되어있습니다. 만약 보내려는 패킷이 windowsize보다 클 경우 데이터를 나누어서 전송합니다. 수신자가 수신을하고 ack를 보내면 window가 비워짐을 인식하고 전송자가 다음데이터를 전송합니다. 만약 수신자로부터 ack를 받지 못한다면 재전송하게 되어있습니다.

예! 잘 알겠습니다. 그런데 제가 드리는 질문은 1개의 프레임을 세그멘테이션해서 여러
패킷으로 전송하는 부분이 아니라…

  • 상대방 측 mss보다 작은 프레임을 연속으로 tx_buf에 쓰고 소켓에 send() 지령을 주면…
    즉, 예를 들어 충분히 짧은 데이터 사이즈의 프레임을 ( 예: 16바이트?)
  1. tx_buf 0~0x0f 영역에 wite
  2. send()
  3. 2)번에 대한 송신 완료 확인 없이 즉시, 동일한 내용을 tx_buf 0x10~0x1f 영역에 wite
  4. send() 를 한다면

w5500이 자동적으로 2개의 프레임을 연속으로 TCP processing 절차에 따라 수행을 할수 있는가 하는 것입니다.

아니면, 반드시 1)2) send()를 처리하고 ( 결과를 확인하고), 3)4)번 send()를 처리해야 하는 것인지 궁금해서 문의 드립니다.

저희칩은 send ok(송신완료)가 떠야 다음 명령을 수행하게 되어있습니다.
만약 송신 완료를 보지않고 send를 바로하면 buf를 읽어가는 중이기때문에 수행되지 않습니다.

제 상황 설명이 조금씩 부족했던거 같습니다.
송신확인을 했다고 가정하고, 답신을 받기전에, 또다시 송신을 한것으로 수정해서 문의 드립니다.

즉,

  1. tx_buf 0~0x0f 영역에 wite
  2. send()
  3. 2)번에 대한 [color=#FF0000]송신 완료 확인 후 답신을 받기전에[/color] , 동일한 내용을 tx_buf 0x10~0x1f 영역에 wite
  4. send() 를 한다면

w5500이 자동적으로 2개의 프레임을 연속으로 TCP processing 절차에 따라 수행을 할수 있는가 하는 것입니다.

아니면, 반드시 1)2) send()를 처리하고 ( 결과를 확인하고), 3)4)번 send()를 처리해야 하는 것인지 궁금해서 문의 드립니다.

즉, 어떤 TCP 통신 절차가 완료 되기전에… 또다른 TCP 통신 요청이 가능한건지요?
다시말해 , 어느 한순간 2개의 TCP 트랜섹션이 특정 채널상에서 처리 될수 있는냐 하는 겁니다.

감사합니다.

2개의 프레임을 연속으로 수행가능합니다.
수신측에서는 연속으로 받게되면 하나의 수신완료 프레임을 전송측에 보냅니다.

상기 답변에 있어서…

  1. " 하나의 수신완료 프레임" 이란것은
    => 연속 보낸 2개의 프레임이 합쳐져서 한개의 프레임으로 수신측에 올려보낸다는 뜻인지요?

  2. “전송측” 이란 수신측을 뜻하나요?

두개의 프레임을 연속으로 보내는 전송측을 (A), 그프레임을 받는쪽을 (B)라고 언급하겠습니다.
기본적으로는 A가 프레임을 보내면 B에서는 각각 받을때마다 수신확인(즉, 잘받았다는)프레임을 보냅니다. 수신확인 프레임을통해 A에서는 전송이 잘 되었음을 인지하고 재전송하지않습니다.
만약 예외적으로 두개의 프레임을 연속으로 보내면 B에서 2개를 받았지만 1개의 수신확인 프레임(두개를 받았다는 정보가 담긴)을 A에게 보냅니다. :smiley:

예! 알겠습니다.

친절한 답변 감사합니다.

Copyright © 2017 WIZnet Co., Ltd. All Rights Reserved.