O Windows XP automaticamente remonta os fragmentos UDP?

3

Eu tenho um aplicativo do Windows que recebe e processa mensagens XML transmitidas via UDP. O aplicativo coleta os dados usando soquetes "brutos" do Windows, portanto, todo o pacote da camada 3 é visível.

Recentemente, deparamos com um problema que me deixou perplexo.

Se as mensagens XML (isto é, pacotes UDP) forem grandes (isto é, > 1500 bytes), elas serão fragmentadas conforme o esperado. Normalmente, isso fará com que o processador XML falhe porque ele tenta processar cada pacote UDP como se fosse uma mensagem XML completa. Este é um conhecido short-coming no sistema nesta fase do seu desenvolvimento.

No Windows 7, isso é exatamente o que acontece. Os fragmentos são recebidos e registrados, mas nenhum processamento ocorre. No Windows XP, no entanto, os mesmos fragmentos são vistos, e o processador XML parece lidar com tudo muito bem.

O Windows XP reagrupa automaticamente os fragmentos UDP? Eu acho que eu poderia esperar isso para um soquete UDP normal, mas não é o comportamento esperado para um soquete "raw", IMO. Além disso, se esse for o caso do Windows XP, por que o comportamento não é o mesmo no Windows 7? Existe uma maneira de ativar isso?

    
por Matt Davis 18.06.2012 / 22:26

1 resposta

2

parece que o bug está na forma como o processador XML está obtendo os datagramas UDP. Não deveria estar olhando para os pacotes. Esse é o trabalho da pilha UDP.

O processador XML deve estar pedindo à UDP para datagramas UDP remontados. A divisão de datagramas em pacotes e a remontagem desses pacotes em datagramas é o trabalho da pilha IP e UDP.

Obviamente, se você usar soquetes brutos, o UDP quebrará se você não replicar esse comportamento. Mas não use soquetes brutos, use o UDP dessa forma, ele foi planejado para ser usado.

Quando você intercepta pacotes através da interface bruta, se você obtê-los antes ou depois da remontagem de IP, isso depende de vários parâmetros do sistema, como quais firewalls estão habilitados e quais regras eles possuem. O seu código "funciona" se receber os pacotes brutos após a remontagem do IP. Mas confiando nisso está quebrado. se a remontagem não for necessária, isso não acontecerá e nem sempre será necessário.

    
por 19.06.2012 / 01:22