O SO_RCVBUF mínimo de 256 bytes não permite que um pacote seja mantido?

1

man mount

SO_RCVBUF

Sets or gets the maximum socket receive buffer in bytes. The kernel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and this doubled value is returned by getsockopt(2). The default value is set by the /proc/sys/net/core/rmem_default file, and the maximum allowed value is set by the /proc/sys/net/core/rmem_max file. The minimum (doubled) value for this option is 256.

mas acho que esse buffer não pode conter nenhum pacote

What values may Linux use for the default unix socket buffer size?

...

The per-packet overhead is a combination of struct sk_buff and struct skb_shared_info, so it depends on the exact size of these structures (rounded up slightly for alignment). E.g. in the 64-bit kernel above, the overhead is 576 bytes per packet.

O acima está correto? Existe algum bom motivo para que o kernel imponha um tamanho de buffer de soquete mínimo de 256?

    
por sourcejedi 16.02.2018 / 01:06

1 resposta

2

Olhando para uma pergunta anteriormente feita "Qual é a valor mínimo de SO_RCVBUF? " e este guia de programação de rede , suas suspeitas parecem corretas. Os pacotes UDP e IP seriam descartados silenciosamente porque não haveria espaço suficiente para armazenar o pacote e (pelo que sei) as conexões TCP não funcionariam porque o tamanho mínimo da janela de transferência seria maior que o buffer; em qualquer caso, você não receberia nada.

Por que o tamanho mínimo do buffer de soquete é tão pequeno, provavelmente é um artefato histórico na documentação. Procurando na fonte do Linux v4.0 (linux / include / net / sock .h) , parece que o tamanho mínimo real de um pouco maior (2048 + o tamanho alinhado de sk_buff) e foi por algum tempo . Meu palpite sobre por que o mínimo documentado é tão baixo é permitir o acesso bruto aos pacotes de células ATM, que eram 48-53 bytes , mas isso é apenas um palpite.

    
por 16.02.2018 / 07:26

Tags