golang tcp keepalive研究记录(基于websocket) – 若

golang tcp keepalive研究记录(基于websocket) - 若

为什么有tcp Keepalive?

  服务器和客户端建立tcp连接以后,客户端/服务器如何知道对方是否挂掉了? 

  这时候TCP协议提出一个办法,当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接已经丢失,客户端就没必要继续保持连接了。如果没有这种机制就会有很多空闲的连接占用着系统资源。

KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows)中,都实现了KeepAlive功能。

  RFC1122#TCP Keep-Alives

tcp Keepalive是否默认开启?

 

  KeepAlive默认情况下是关闭的,可以被上层应用开启和关闭

 

如何设置tcp keepalive?

在Linux内核设置

KeepAlive默认不是开启的,如果想使用KeepAlive,需要在你的应用中设置SO_KEEPALIVE才可以生效。

查看当前的配置:

cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_intvl
cat /proc/sys/net/ipv4/tcp_keepalive_probes
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » golang tcp keepalive研究记录(基于websocket) – 若