O IP não garante a entrega e, de fato, muitos protocolos que são construídos sobre IP (provavelmente o mais conhecido como UDP) também não fazem tais garantias.
As garantias de entrega no TCP / IP são tratadas pelo TCP. O TCP pode funcionar através de um protocolo de entrega garantida, mas é projetado de tal forma que não é necessário. Se o protocolo subjacente não garantir a entrega, o TCP irá.
Assim, no caso normal do TCP / IP, um quadro Ethernet descartado leva a um pacote IP descartado ou corrompido, que por sua vez se traduz em um pacote TCP ou UDP descartado ou corrompido. Se é TCP (ou algum outro protocolo que faz garantias de entrega), o TCP é responsável por detectar a falha e tentar novamente a transmissão.
Isso é independente da implementação do sistema operacional ou da pilha IP, pois trata dos próprios protocolos. Qualquer implementação TCP que não detecte falhas de transmissão de nível inferior (IP ou inferior) viola a especificação.
Observe também que as colisões definitivas são apenas uma maneira em que os pacotes podem se tornar corrompidos ou destroçados em um nível que o TCP não tem como evitar e só pode detectar (e reagir). E o IP também pode funcionar com portadoras não Ethernet; veja RFC 1149 para um exemplo.