TCP PUSH e segmentos

1

Estou lendo a seção TCP PUSH no TCP / IP Guide e tenho uma pergunta sobre este parágrafo:

It's important to realize that the push function only forces immediate delivery of data. It does not change the fact that TCP provides no boundaries between data elements. It may seem that an application could send one record of data and then “push” it to the recipient; then send the second record and “push” that, and so on. However, the application cannot assume that because it sets the PSH bit for each piece of data it gives to TCP, that each piece of data will be in a single segment. It possible that the first “push” may contain data given to TCP earlier that wasn't yet transmitted, and it's also possible that two records “pushed” in this manner may end up in the same segment anyway.

A minha pergunta é sobre a última frase com itálico, como os dados podem ser dados ao TCP anteriormente, com o sinalizador PSH definido, mas não serem transmitidos? Não ter o sinalizador PSH configurado imediatamente libera os buffers imediatamente?

    
por user26825 01.12.2011 / 17:39

2 respostas

2

É importante entender que o TCP é um protocolo de streaming, e a separação em segmentos é apenas um detalhe de implementação e é apenas porque alguns protocolos de nível inferior são baseados em pacotes.

Configurar o flag PSH é apenas uma indicação para o terminal de recebimento que deve liberar seu buffer para o aplicativo. Devido à natureza assíncrona da pilha TCP / IP, no momento em que o aplicativo for notificado de que há dados pendentes, vários outros pacotes mais recentes podem já ter sido recebidos, e tudo junto será enviado ao aplicativo. O TCP é um fluxo.

Além disso, esteja ciente de que não há garantia de que a separação em segmentos TCP também será preservada na rede. É verdade que geralmente é preservado, mas há proxies, firewalls de inspeção profunda, etc., que podem realmente colar vários pequenos segmentos em um maior, etc.

    
por 01.12.2011 / 21:44
1

Há situações em que o TCP não tem permissão para enviar dados novos e esperar por ACKs primeiro.

Em geral, o sinalizador PUSH força o TCP no receptor a entregar o conteúdo do buffer ao aplicativo. Não força o TCP do remetente a enviar qualquer coisa.

    
por 01.12.2011 / 17:51

Tags