Oi Julio
realmente falei besteira... agora estava pesquisando,
e percebi isso. Ele falou de fragmentação e MTU, então
pensei logo no IP. Como você disse, o Nagle diz respeito ao TCP.
O Nagle é uma heurística de prevenção
para a Síndrome da Janela Desnecessaria, ou Silly Window Sindrome
(SWS) no TCP. Para que o receptor não fique retornando confirmações
com um tamanho de janela disponivel de apenas um byte, eles atrasam um
pouco ate que tenham um tamanho de janela suficiente, e vao ajuntando no
buffer. Existe formas de prevenção tanto no receptor como
no transmissor. É feito esse atraso para encher o buffer mesmo em
operacoes PUSH. Mas acho que ele não quebra aqueles 10 bytes do
Jorge, ou se quebra, só o libera para a aplicação
superior em conjunto.
Até onde eu entendi, o Nagle, funciona no
transmissor, e não em roteadores no meio do caminho, certo? Ou existem
implementações dele assim?
Uma boa fonte de pesquisa para mim é o livro
do Douglas Comer, Internetworkin with TCP/IP.
Agora voltando ao assunto original:
O Nagle funciona por causa de um problema no TCP.
O VoIP funciona com o UDP.
Ou seja... para o VoIP, Nagle não quer dizer
nada.
Obrigado pela dica.
um abraço.
Julio Arruda wrote:
Lista de Discussão Rede Wan - http://www.networkdesigners.com.brDenys,O
Jorge nao esta falando de fragmentacao no IP e sim no nivel "tcp" (sim,
concordo que nao é fragmentacao, o termo fica meio "esquisito",
mas o conceito da para entender).O
segmento TCP que sai de um lado, via um "write" nao necessariamente é
lido em um unico read do outro lado (falando de end-point para end-point).Em
aplicacoes que tomem um certo cuidado, isto nao deve dar xabu.[],
<O_O>
Lista de Discussão Rede Wan - http://www.networkdesigners.com.br
Não é exatamente assim. A fragmentação
dos datagramas acontece por que ele é maior que o MTU de uma rede
que ele tem que passar. Então o roteador quebra ele em pedaços
copiando grande parte do header para todos os fragmentos, que serão
pacotes IP menores, com o header quase igual, com a diferenç no
campo FLAGS que é setado alguns bits, o campo OFFSET DE FRGAMENTO,
usado para saber a posição daquele dado dentro do pacote
IP original que foi fragmentado.
Um pacote pequeno não é um pacote
fragmentado. Existe um MTU mínino permitido, sendo que dessa forma
existirão datagramas que nunca serão fragmentados, como datagramas
de controle e etc. Originalmente, quem remonta esses datagramas fragmentados
é o host destino. Com o nagle, segundo me consta (essa parte eu
não tenho total certeza), um roteador no caminho, que vai jogar
para uma rede com MTU maior que o que está chegando, pega todos
os pacotes que foram fragmentados (só os que foram fragmentados)
e remonta-os antes de repassar para a próxima rede, afim de melhorar
a performance, o que exige um roteador bem robusto. Porém, hoje
em dia, acredito que o mais comun seja o path MTU discovery, que faz com
que as duas pontas que conversam, descubram o MTU minimo usado no caminho
e utilizem este para melhorar a performance. Porque?
Porque quando o destino começa a receber
os fragmentos ele inicia um contador, e se esse contador esgota antes de
chegar todos os fragmentos, ele infelizmente descarta o pacote que está
sendo remontado inteirinho (mesmo que ele já tenha recebido grande
parte deste), e aí o grande problema da fragmentação
que causa impacto na performance. A remontagem dos pacotes também
geram uma perda significativa de performance. Essa é a motivação
na procura de algoritimos para cuidar das fragmentações,
de onde vieram o Nagle e o path MTU discovery.
"Silveira, Jorge" wrote:
Lista de Discussão Rede Wan - http://www.networkdesigners.com.brJulio,
Não sei se te entendi. O que quis dizer é que, como o exemplo:
Possuo, por exemplo, um pacote de "keep-alive" de 10 bytes e este não
pode ser segmentado. Se eu habilitar o nagle, o equipamento armazena os
dados até o tamanho máximo da MTU, para melhor aproveitamento
da rede!!??? Agora, imagine que no buffer já está armazenado
1495bytes e o buffer recebe o keep alive ==>1495+5=1500bytes(1º pacote
enviado) e depois, os outros 5bytes do keepalive serão armazenados
no buffer para a próxima transmissão. No outro end-point,
a aplicação recebe o keep-alive fragmentado e minha aplicação
está programada para discartar keep-alives fragmentados. Dependendo
dos parâmetros da programação, a aplicação
poderá "derrubar" a conexão!! Espero ter sido claro, agora.
Se vi isto acontecer, inclusive usando analisador.
--
--------------------------------------------------------------
Denys Sene dos Santos - [EMAIL PROTECTED]
Diretor Técnico - System and Network Administrator
Onlinet - Afiliado do Universo Online - O Melhor da Internet
http://www.onlinet.com.br/
|