2014-12-16 3 views
0

저는 FreeRTOS + LwiP를 사용하여 TCP/IP를 사용하여 1k 데이터를 보내고 있습니다. 문서에서 나는 TCP/IP 프로토콜이 스택 내부에 흐름 제어 기능을 가지고 있음을 알았지 만이 흐름 제어는 네트워크 버퍼에 의존합니다. 아래에서 설명하는 시나리오에서 어떻게 처리 할 수 ​​있는지 잘 모르겠습니다.흐름 제어 구현 - 방법

  1. 는 (이 데이터 전송 속도가 20MB/s의 것)

  2. 는 수신 된 무선 랜 데이터 10K size10 블록의 큐에 투입되는 무선 랜의 각 블록을 TCP/IP를 사용 1K 크기의 데이터를 수신 큐에서 1K

  3. 의 크기를 갖는 각 블록은 촬영 낮은 속도로 다른 인터페이스로 전송됩니다 1MB의/s의

난 그녀에 때문에,이 시나리오에서 수행 wifi < -> queue의 데이터간에 수동으로 흐름 제어를 보완 하시겠습니까? 이것을 어떻게 할 수 있습니까?

답변

0

직접 흐름 제어를 구현할 필요가 없습니다. TCP 알고리즘이 내부적으로 처리합니다.

기본적으로 보낸 사람으로부터 TCP 세그먼트를 받으면 LwIP는 해당 버퍼에 남아있는 사용 가능한 공간 (창 크기)을 포함하는 ACK를 다시 보냅니다. 데이터가 처리 할 수있는 것보다 빨리 도착하기 때문에 스택은 결국 0의 창 크기를 가진 ACK를 다시 전송합니다. 이렇게하면 보낸 사람의 스택이 중단되고 나중에 다시 시도되며 자동으로 수행됩니다. 네트워크 버퍼에서 더 많은 데이터를 추출하려고하면 스택은 수신 한 마지막 세그먼트를 다시 ACK해야하며 이번에는 더 많은 데이터를 수신 할 수 있다고 말하는 창을 열어야합니다.

피해야 할 대상은 네트워크 사용 및 성능에 큰 영향을 줄 수 있으므로 silly window syndrome입니다. 가능한 경우 큰 덩어리로 네트워크에서 데이터를 읽으십시오. 한 번에 1 바이트 씩 버퍼를 채우는 엄격한 루프는 피하십시오.