HTTP2 and GRPC support a keepalive feature (not to be confused with http 1.1 keepalive header).
https://github.com/grpc/grpc/blob/master/doc/keepalive.md
This feature periodically send Ping request and receive ping response to check if the connection is still open and not stuck in "half open".
But the TCP protocol also have a Keepalive feature, which periodically send ping packet on the connection to verify its still open and avoid load balancer from dropping the connection because its idle.
Since those 2 Keepalive feature are doing exactly the same thing, when should you use HTTP2 keepalive instead of TCP Keepalive. And why both exist ?