先把結(jié)論放這:TCP 的 keepalive 和 HTTP 請(qǐng)求和響應(yīng)的包頭里的 keepalive 不是一回事。
TCP 的 keepalive 是用來(lái)檢查 TCP 連接的對(duì)方是否還“活著”,Linux 有三個(gè)參數(shù)跟 keepalive 有關(guān)。
-
tcp_keepalive_time一個(gè)連接閑了一定時(shí)間,就發(fā) keepalive 的消息,這個(gè)時(shí)間長(zhǎng)度是由tcp_keepalive_time來(lái)指定。 -
tcp_keepalive_probes指定發(fā)送多少個(gè) keepalive 探測(cè)包。如果對(duì)方回了 keepalive 探測(cè)包,說(shuō)明對(duì)方還在,就繼續(xù)保持這個(gè)連接。 -
tcp_keepalive_intvl指定發(fā)送 keepalive 探測(cè)報(bào)的間隔時(shí)間。跟tcp_keepalive_probes相乘(發(fā)送多個(gè) keepalive 探測(cè)包,對(duì)方?jīng)]有響應(yīng)),得到的就是從開(kāi)始 keepalive 檢查到放棄這個(gè)連接的時(shí)間。
HTTP 的 keepalive 是指客戶端和 HTTP 服務(wù)端建立起 TCP 連接后,在這一個(gè) TCP 連接上進(jìn)行多次 HTTP 請(qǐng)求和響應(yīng),而不是建立 TCP 連接,請(qǐng)求,應(yīng)答 HTTP,然后就斷開(kāi) TCP 連接。建立、斷開(kāi) TCP 的次數(shù)大大減少了,TCP 的連接數(shù)也減少了。