Socat- Sem buffer

2

Estou usando um roteador TP-Link TL-WR710N com OpenWRT como um conversor / gateway IPv4 para IPv6 com o seguinte comando socat:

socat TCP4-LISTEN:80,fork,su=nobody TCP6:[xx:xx:xx::xx]:80

No lado do IPv4 existe um PC que envia uma grande quantidade de dados (por exemplo, 300kB) via TCP. No lado do Ipv6, há um dispositivo embutido com uma pilha muito pequena, que só pode processar 1 frame Ethernet de uma só vez.

O roteador armazena até 300k dos dados e envia quadro a quadro para o dispositivo incorporado. Às vezes, o roteador envia os pacotes TCP na ordem errada, como:

Sender(TP-Link router)     Receiver(embedded sys)
packet 1                   Ack 1
packet 3                   Ack 1
packet 2                   Ack 2
packet 4                   Ack 2
transmission pause (400ms)
packet 3                   Ack 3
packet 5                   Ack 3
packet 4                   Ack 4
packet 6                   Ack 4
transmission pause (1,2s)
packet 5                   Ack 5
packet 7                   Ack 5
packet 6                   Ack 6
packet 8                   Ack 6
transmission pause (5s)
...

Em um sistema com um grande buffer de recebimento, isso não é um problema, porque ele pode reordenar os pacotes recebidos. Mas no meu pequeno dispositivo incorporado, a reordenação não é possível. As pausas de (re) transmissões ficam mais longas até que o dispositivo embutido entre em tempo limite.

Para resolver esse problema eu tentei reduzir o buffer socat do roteador para o tamanho de um pacote no lado do ipv6, então ele tem que receber um novo pacote de pacote para enviar um novo pacote. Mas esta abordagem não funcionou porque o buffer de aplicativo socat não é o único buffer, existe também o buffer do roteador. Alguém tem uma ideia para gerenciar isso?

actual state:
1. [ PC (300kB) ]  ------ [ Router         ] ------ [       Embedded-device ]
2. [ PC         ]  ------ [ (300kB) Router ] ------ [       Embedded-device ]
3. [ PC         ]  ------ [ Router (299kB) ] ------ [ (1kB) Embedded-device ]
4. [ PC         ]  ------ [ Router (298kB) ] ------ [ (2kB) Embedded-device ]
5. .....

should state:
1. [ PC (300kB) ]  ------ [ Router ] ------ [       Embedded-device ]
2. [ PC (299kB) ]  ------ [ Router ] ------ [ (1kB) Embedded-device ]
3. [ PC (298kB) ]  ------ [ Router ] ------ [ (2kB) Embedded-device ]
4. [ PC (297kB) ]  ------ [ Router ] ------ [ (3kB) Embedded-device ]
5. .....

Também estou interessado em uma solução em que a pausa de (re-) transmissão seja menor que 1s e não aumente.

    
por Chris 08.05.2017 / 10:50

0 respostas