Fragmentação


TCP/IP é projetada para ser usada com diferentes tipos de redes. Infelizmente, projetistas de redes não concordam em quão grande um pacote pode ser. Pacotes Ethernet podem ter até 1500 octetos. Pacotes Arpanet têm um tamanho máximo de 1000 octetos. Algumas redes muito rápidas têm pacotes muito maiores. Primeiramente, você poderia imaginar que o IP simplesmente instituiu o menor tamanho possível. Infelizmente, isto causaria sérios problemas de performance. Quando estamos transferindo arquivos grandes, grandes pacotes são bem mais eficientes do que os pequenos. Então nós queremos ser capazes de usar o maior tamanho de pacote possível. Mas nós queremos também ser capazes de manipular redes com limites pequenos.

Há duas soluções para isso. Primeiro, o TCP tem a habilidade de "negociar" o tamanho do datagrama. Quando uma conexão TCP é aberta, ambas as partes devem enviar o tamanho máximo do datagrama que elas suportam. Isto permite que duas implementações que podem manipular grandes datagramas possam usá-los, e também permite a comunicação destas com implementações que não suportam grandes datagramas. Entretanto isto não resolve completamente o problema. O problema mais sério é que as duas partes não necessariamente conhecem todos os passos entre elas. Por exemplo, quando enviamos dados entre Rutgers e Bekerley, é como se ambos os computadores estivessem sobre a Ethernet. Assim ambos irão estar preparados para manipular datagramas de 1500 octetos. No entanto a conexão irá, em algum ponto, acabar caindo na Arpanet. Ela não pode manipular pacotes deste tamanho.

Por esta razão há recursos para quebrar datagramas em pedaços. (Isto é referenciado como "fragmentação"). O cabeçalho IP contém campos indicando que o datagrama foi quebrado, e informações suficientes para fazer com que os pedaços sejam encaixados novamente. Se um gateway conecta uma Ethernet à Arpanet, ele deve estar preparado para receber pacotes Ethernet de 1500 octetos e quebrá-los em pedaços que serão ajustados à Arpanet.

Além disso, toda implementação de host TCP/IP deve estar preparada para aceitar pedaços e remontá-los. Isto é refenciado como "remontagem"(reassembly).

Implementações TCP/IP diferem na solução que adotam para decidir o tamanho do datagrama. É muito comum implentações usarem datagramas de 576 bytes sempre que eles não podem verificar se o caminho inteiro é capaz de manipular grandes pacotes. Esta estratégia mais conservadora é usada devido ao número de implementações com bugs no código de remontagem dos fragmentos. Implementadores geralmente tentam evitar a ocorrência de fragmentações. Diferentes implementadores tomam diferentes soluções para decidir quando é seguro usar grandes datagramas. Alguns usam estes somente para redes locais. Outros irão usá-los para qualquer rede no mesmo campus. 576 bytes é um tamanho "seguro", o qual todas as implementações suportam.


texto original