What is efficient way for sending such small amounts of data reliably? (UDP with ack?)
Sim, isso é essencialmente para o que a UDP foi inventada. Isso ou use conexões TCP de longa duração.
Why my headers are bigger than 40 bytes (60 or 52)?
A maioria dos sistemas operacionais inclui muito mais do que o mínimo necessário.
How can I print key-value list of headers instead of hex values?
Capture o pacote no Wireshark e descarte sua análise.
Pode demorar um pouco mais do que isso para obter o formato de "valor-chave", dependendo do que você está procurando.
How long TCP connection can live?
Tecnicamente, para sempre. Realisticamente, isso depende ... O TCP em si não tem limite, as conexões podem permanecer vivas por anos concebivelmente. Realisticamente, a maioria dos aplicativos tem um tempo limite no qual eles desconectam os clientes inativos. Além disso, os firewalls geralmente soltam regras com estado para conexões inativas após um longo período de tempo.
Is TCP sending additional packets if you keep connection open?
Se você tem keep-alives ativados, sim. Caso contrário, provavelmente não. Depende da implementação.
Is it efficient to keep all their connections open?
Demora memória para manter cada conexão aberta (alguns KB geralmente). Uma ou duas mil conexões levarão apenas alguns MB. Milhões de pessoas começam a cortar o "monte" de memória. Sistemas operacionais modernos podem facilmente rastrear milhares de conexões; mas seu aplicativo deve ser razoavelmente projetado para acomodar tantos.