這個(gè)問(wèn)題很基礎(chǔ)坟奥,也很簡(jiǎn)單明刷,但是卻很容易被人忽視婴栽,而犯下一些錯(cuò)誤。
- TCP屬于傳輸層辈末,所謂TCP的keep-alive的說(shuō)法其實(shí)并不科學(xué)愚争,TCP傳輸層通過(guò)三次握手連接后,會(huì)自動(dòng)發(fā)心跳包檢測(cè)連接還存在(所謂keep-alive)挤聘,如果心跳異常轰枝,會(huì)發(fā)起FIN斷開(kāi)連接。
- HTTP屬于應(yīng)用層组去,而且HTTP本質(zhì)上是短連接鞍陨,但為了節(jié)省創(chuàng)建連接的開(kāi)銷(xiāo),一般HTTP協(xié)議中Header會(huì)帶上keep-alive字段从隆,目的很簡(jiǎn)單湾戳,在建立鏈接后保持的時(shí)間由這個(gè)字段決定,若該鏈接超出keep-alive時(shí)間無(wú)HTTP請(qǐng)求交互(即Idle狀態(tài))广料,HTTP將主動(dòng)發(fā)起鏈路斷開(kāi)砾脑。
- 我們不能進(jìn)入思維誤區(qū),HTTP是在TCP之上的艾杏,換句話說(shuō)HTTP的數(shù)據(jù)包都要走TCP字節(jié)流發(fā)往對(duì)端韧衣,HTTP處于IDLE狀態(tài)時(shí),TCP層依舊是有字節(jié)流交互的(心跳)购桑,但這并不會(huì)影響HTTP層主動(dòng)發(fā)起斷開(kāi)畅铭,而在斷開(kāi)交互的過(guò)程中,依舊也包含了TCP層FIN起始的4次斷開(kāi)握手行為勃蜘。