TCP的連接重連之痛
一條 TCP 連接是由四元組標(biāo)識(shí)的(源 IP占拍,源端口,目的 IP晃酒,目的端口)。什么叫連接遷移呢贝次?就是當(dāng)其中任何一個(gè)元素發(fā)生變化時(shí),這條連接依然維持著蛔翅,能夠保持業(yè)務(wù)邏輯不中斷敲茄。當(dāng)然這里面主要關(guān)注的是客戶端的變化山析,因?yàn)榭蛻舳瞬豢煽夭⑶揖W(wǎng)絡(luò)環(huán)境經(jīng)常發(fā)生變化,而服務(wù)端的 IP 和端口一般都是固定的笋轨。
比如大家使用手機(jī)在 WIFI 和 4G 移動(dòng)網(wǎng)絡(luò)切換時(shí),客戶端的 IP 肯定會(huì)發(fā)生變化爵政,需要重新建立和服務(wù)端的 TCP 連接。
又比如大家使用公共 NAT 出口時(shí)钾挟,有些連接競爭時(shí)需要重新綁定端口,導(dǎo)致客戶端的端口發(fā)生變化等龙,同樣需要重新建立 TCP 連接伶贰。
從 TCP 連接的角度來講蛛砰,這個(gè)問題是無解的黍衙。
基于UDP的QUIC連接遷移實(shí)現(xiàn)
當(dāng)用戶的地址發(fā)生變化時(shí),如 WIFI 切換到 4G 場景琅翻,基于 TCP 的 HTTP 協(xié)議無法保持連接的存活柑贞。QUIC 基于連接 ID 唯一識(shí)別連接。當(dāng)源地址發(fā)生改變時(shí)钧嘶,QUIC 仍然可以保證連接存活和數(shù)據(jù)正常收發(fā)。
那 QUIC 是如何做到連接遷移呢有决?
很簡單空盼,QUIC是基于UDP協(xié)議的书幕,任何一條 QUIC 連接不再以 IP 及端口四元組標(biāo)識(shí)揽趾,而是以一個(gè) 64 位的隨機(jī)數(shù)作為 ID 來標(biāo)識(shí),這樣就算 IP 或者端口發(fā)生變化時(shí)篱瞎,只要 ID 不變,這條連接依然維持著掠抬,上層業(yè)務(wù)邏輯感知不到變化,不會(huì)中斷两波,也就不需要重連闷哆。
由于這個(gè) ID 是客戶端隨機(jī)產(chǎn)生的腰奋,并且長度有 64 位抱怔,所以沖突概率非常低。
參考
什么是QUIC協(xié)議
https://help.aliyun.com/document_detail/126676.html
談?wù)凲UIC協(xié)議原理
https://mp.weixin.qq.com/s/pa5lLcNtsEYRBHrUAJYcJA