技術(shù)
導(dǎo)讀:那手機(jī)不連網(wǎng)線,也不連電話線,它是怎么上網(wǎng)的呢?
移動(dòng)網(wǎng)絡(luò)的發(fā)展歷程
你一定知道手機(jī)上網(wǎng)有 2G、3G、4G的說(shuō)法,究竟這都是什么意思呢?有一個(gè)通俗的說(shuō)法就是:用 2G 看 txt,用 3G 看 jpg,用4G看 avi。
2G 網(wǎng)絡(luò)
手機(jī)本來(lái)是用來(lái)打電話的,不是用來(lái)上網(wǎng)的,所以原來(lái)在 2G 時(shí)代,上網(wǎng)使用的不是 IP 網(wǎng)絡(luò),而是電話網(wǎng)絡(luò),走模擬信號(hào),專業(yè)名稱為公共交換電話網(wǎng)(PSTN,PublicSwitchedTelephoneNetwork)。
那手機(jī)不連網(wǎng)線,也不連電話線,它是怎么上網(wǎng)的呢?
手機(jī)是通過(guò)收發(fā)無(wú)線信號(hào)來(lái)通信的,專業(yè)名稱是 MobileStaTIon,簡(jiǎn)稱 MS,需要嵌入 SIM。手機(jī)是客戶端,而無(wú)線信號(hào)的服務(wù)端,就是基站子系統(tǒng)(BSS,BaseStaTIonSubsystemBSS)。至于什么是基站,你可以回想一下,你在爬山的時(shí)候,是不是看到過(guò)信號(hào)塔?我們平時(shí)城市里面的基站比較隱蔽,不容易看到,所以只有在山里才會(huì)注意到。正是這個(gè)信號(hào)塔,通過(guò)無(wú)線信號(hào),讓你的手機(jī)可以進(jìn)行通信。
但是你要知道一點(diǎn),無(wú)論無(wú)線通信如何無(wú)線,最終還是要連接到有線的網(wǎng)絡(luò)里。
因而,基站子系統(tǒng)分兩部分,一部分對(duì)外提供無(wú)線通信,叫作基站收發(fā)信臺(tái)(BTS,BaseTransceiverStaTIon),另一部分對(duì)內(nèi)連接有線網(wǎng)絡(luò),叫作基站控制器(BSC,BaseStaTIonController)?;臼瞻l(fā)信臺(tái)通過(guò)無(wú)線收到數(shù)據(jù)后,轉(zhuǎn)發(fā)給基站控制器。
這部分屬于無(wú)線的部分,統(tǒng)稱為無(wú)線接入網(wǎng)(RAN,RadioAccessNetwork)。
基站控制器通過(guò)有線網(wǎng)絡(luò),連接到提供手機(jī)業(yè)務(wù)的運(yùn)營(yíng)商的數(shù)據(jù)中心,這部分稱為核心網(wǎng)(CN,CoreNetwork)。核心網(wǎng)還沒(méi)有真的進(jìn)入互聯(lián)網(wǎng),這部分還是主要提供手機(jī)業(yè)務(wù),是手機(jī)業(yè)務(wù)的有線部分。
首先接待基站來(lái)的數(shù)據(jù)的是移動(dòng)業(yè)務(wù)交換中心(MSC,MobileServiceSwitchingCenter),它是進(jìn)入核心網(wǎng)的入口,但是它不會(huì)讓你直接連接到互聯(lián)網(wǎng)上。
因?yàn)樵谧屇愕氖謾C(jī)真正進(jìn)入互聯(lián)網(wǎng)之前,提供手機(jī)業(yè)務(wù)的運(yùn)營(yíng)商,需要認(rèn)證是不是合法的手機(jī)接入。別你自己造了一張手機(jī)卡,就連接上來(lái)。鑒權(quán)中心(AUC,AuthenticationCenter)和設(shè)備識(shí)別寄存器(EIR,EquipmentIdentityRegister)主要是負(fù)責(zé)安全性的。
另外,需要看你是本地的號(hào),還是外地的號(hào),這個(gè)牽扯到計(jì)費(fèi)的問(wèn)題,異地收費(fèi)還是很貴的。訪問(wèn)位置寄存器(VLR,VisitLocationRegister)是看你目前在的地方,歸屬位置寄存器(HLR,HomeLocationRegister)是看你的號(hào)碼歸屬地。
當(dāng)你的手機(jī)卡既合法又有錢的時(shí)候,才允許你上網(wǎng),這個(gè)時(shí)候需要一個(gè)網(wǎng)關(guān),連接核心網(wǎng)和真正的互聯(lián)網(wǎng)。網(wǎng)關(guān)移動(dòng)交換中心(GMSC,GatewayMobileSwitchingCenter)就是干這個(gè)的,然后是真正的互連網(wǎng)。在 2G 時(shí)代,還是電話網(wǎng)絡(luò) PSTN。
數(shù)據(jù)中心里面的這些模塊統(tǒng)稱為網(wǎng)絡(luò)子系統(tǒng)(NSS,NetworkandSwitchingSubsystem)。
因而 2G 時(shí)代的上網(wǎng)如圖所示,我們總結(jié)一下,有這幾個(gè)核心點(diǎn):
手機(jī)通過(guò)無(wú)線信號(hào)連接基站;
基站一面朝前接無(wú)線,一面朝后接核心網(wǎng);
核心網(wǎng)一面朝前接到基站請(qǐng)求,一是判斷你是否合法,二是判斷你是不是本地號(hào),還有沒(méi)有錢,一面通過(guò)網(wǎng)關(guān)連接電話網(wǎng)絡(luò)。
2.5G 網(wǎng)絡(luò)
后來(lái)從 2G 到了 2.5G,也即在原來(lái)電路交換的基礎(chǔ)上,加入了分組交換業(yè)務(wù),支持 Packet 的轉(zhuǎn)發(fā),從而支持 IP 網(wǎng)絡(luò)。
在上述網(wǎng)絡(luò)的基礎(chǔ)上,基站一面朝前接無(wú)線,一面朝后接核心網(wǎng)。在朝后的組件中,多了一個(gè)分組控制單元(PCU,PacketControlUnit),用以提供分組交換通道。
在核心網(wǎng)里面,有個(gè)朝前的接待員(SGSN,ServiceGPRSSupportedNode)和朝后連接 IP 網(wǎng)絡(luò)的網(wǎng)關(guān)型 GPRS 支持節(jié)點(diǎn)(GGSN,GatewayGPRSSupportedNode)。
3G 網(wǎng)絡(luò)
到了 3G 時(shí)代,主要是無(wú)線通信技術(shù)有了改進(jìn),大大增加了無(wú)線的帶寬。
以 W-CDMA 為例,理論最高 2M 的下行速度,因而基站改變了,一面朝外的是 NodeB,一面朝內(nèi)連接核心網(wǎng)的是無(wú)線網(wǎng)絡(luò)控制器(RNC,RadioNetworkController)。核心網(wǎng)以及連接的 IP 網(wǎng)絡(luò)沒(méi)有什么變化。
4G 網(wǎng)絡(luò)
然后就到了今天的4G網(wǎng)絡(luò),基站為 eNodeB,包含了原來(lái) NodeB 和 RNC 的功能,下行速度向百兆級(jí)別邁進(jìn)。另外,核心網(wǎng)實(shí)現(xiàn)了控制面和數(shù)據(jù)面的分離,這個(gè)怎么理解呢?
在前面的核心網(wǎng)里面,有接待員 MSC 或者 SGSN,你會(huì)發(fā)現(xiàn)檢查是否合法是它負(fù)責(zé),轉(zhuǎn)發(fā)數(shù)據(jù)也是它負(fù)責(zé),也即控制面和數(shù)據(jù)面是合二為一的,這樣靈活性比較差,因?yàn)榭刂泼嬷饕侵噶?,多是小包,往往需要高的及時(shí)性;數(shù)據(jù)面主要是流量,多是大包,往往需要吞吐量。
于是有了下面這個(gè)架構(gòu):
HSS 用于存儲(chǔ)用戶簽約信息的數(shù)據(jù)庫(kù),其實(shí)就是你這個(gè)號(hào)碼歸屬地是哪里的,以及一些認(rèn)證信息。
MME 是核心控制網(wǎng)元,是控制面的核心,當(dāng)手機(jī)通過(guò) eNodeB 連上的時(shí)候,MME 會(huì)根據(jù) HSS 的信息,判斷你是否合法。如果允許連上來(lái),MME 不負(fù)責(zé)具體的數(shù)據(jù)的流量,而是 MME 會(huì)選擇數(shù)據(jù)面的 SGW 和 PGW,然后告訴 eNodeB,我允許你連上來(lái)了,你連接它們吧。
于是手機(jī)直接通過(guò) eNodeB 連接 SGW,連上核心網(wǎng),SGW 相當(dāng)于數(shù)據(jù)面的接待員,并通過(guò) PGW 連到 IP 網(wǎng)絡(luò)。PGW 就是出口網(wǎng)關(guān)。在出口網(wǎng)關(guān),有一個(gè)組件 PCRF,稱為策略和計(jì)費(fèi)控制單元,用來(lái)控制上網(wǎng)策略和流量的計(jì)費(fèi)。
4G 網(wǎng)絡(luò)協(xié)議解析
我們來(lái)仔細(xì)看一下 4G 網(wǎng)絡(luò)的協(xié)議,真的非常復(fù)雜。我們將幾個(gè)關(guān)鍵組件放大來(lái)看。
控制面協(xié)議
其中虛線部分是控制面的協(xié)議。當(dāng)一個(gè)手機(jī)想上網(wǎng)的時(shí)候,先要連接 eNodeB,并通過(guò) S1-MME 接口,請(qǐng)求 MME 對(duì)這個(gè)手機(jī)進(jìn)行認(rèn)證和鑒權(quán)。S1-MME 協(xié)議棧如下圖所示。
UE 就是你的手機(jī),eNodeB 還是兩面派,朝前對(duì)接無(wú)線網(wǎng)絡(luò),朝后對(duì)接核心網(wǎng)絡(luò),在控制面對(duì)接的是 MME。
eNodeB 和 MME 之間的連接就是很正常的 IP 網(wǎng)絡(luò),但是這里面在 IP 層之上,卻既不是 TCP,也不是 UDP,而是 SCTP。這也是傳輸層的協(xié)議,也是面向連接的,但是更加適合移動(dòng)網(wǎng)絡(luò)。它繼承了 TCP 較為完善的擁塞控制并改進(jìn) TCP 的一些不足之處。
SCTP 的第一個(gè)特點(diǎn)是多宿主。一臺(tái)機(jī)器可以有多個(gè)網(wǎng)卡,而對(duì)于 TCP 連接來(lái)講,雖然服務(wù)端可以監(jiān)聽 0.0.0.0,也就是從哪個(gè)網(wǎng)卡來(lái)的連接都能接受,但是一旦建立了連接,就建立了四元組,也就選定了某個(gè)網(wǎng)卡。
SCTP 引入了聯(lián)合(association)的概念,將多個(gè)接口、多條路徑放到一個(gè)聯(lián)合中來(lái)。當(dāng)檢測(cè)到一條路徑失效時(shí),協(xié)議就會(huì)通過(guò)另外一條路徑來(lái)發(fā)送通信數(shù)據(jù)。應(yīng)用程序甚至都不必知道發(fā)生了故障、恢復(fù),從而提供更高的可用性和可靠性。
SCTP 的第二個(gè)特點(diǎn)是將一個(gè)聯(lián)合分成多個(gè)流。一個(gè)聯(lián)合中的所有流都是獨(dú)立的,但均與該聯(lián)合相關(guān)。每個(gè)流都給定了一個(gè)流編號(hào),它被編碼到 SCTP 報(bào)文中,通過(guò)聯(lián)合在網(wǎng)絡(luò)上傳送。在 TCP 的機(jī)制中,由于強(qiáng)制順序,導(dǎo)致前一個(gè)不到達(dá),后一個(gè)就得等待,SCTP 的多個(gè)流不會(huì)相互阻塞。
SCTP 的第三個(gè)特點(diǎn)是四次握手,防止 SYN 攻擊。在 TCP 中是三次握手,當(dāng)服務(wù)端收到客戶的 SYN 之后,返回一個(gè) SYN-ACK 之前,就建立數(shù)據(jù)結(jié)構(gòu),并記錄下狀態(tài),等待客戶端發(fā)送 ACK 的 ACK。當(dāng)惡意客戶端使用虛假的源地址來(lái)偽造大量 SYN 報(bào)文時(shí),服務(wù)端需要分配大量的資源,最終耗盡資源,無(wú)法處理新的請(qǐng)求。
SCTP 可以通過(guò)四次握手引入 Cookie 的概念,來(lái)有效地防止這種攻擊的產(chǎn)生。在 SCTP 中,客戶機(jī)使用一個(gè) INIT 報(bào)文發(fā)起一個(gè)連接。服務(wù)器使用一個(gè) INIT-ACK 報(bào)文進(jìn)行響應(yīng),其中就包括了 Cookie。然后客戶端就使用一個(gè) COOKIE-ECHO 報(bào)文進(jìn)行響應(yīng),其中包含了服務(wù)器所發(fā)送的 Cookie。這個(gè)時(shí)候,服務(wù)器為這個(gè)連接分配資源,并通過(guò)向客戶機(jī)發(fā)送一個(gè) COOKIE-ACK 報(bào)文對(duì)其進(jìn)行響應(yīng)。
SCTP 的第四個(gè)特點(diǎn)是將消息分幀。TCP 是面向流的,也即發(fā)送的數(shù)據(jù)沒(méi)頭沒(méi)尾,沒(méi)有明顯的界限。這對(duì)于發(fā)送數(shù)據(jù)沒(méi)有問(wèn)題,但是對(duì)于發(fā)送一個(gè)個(gè)消息類型的數(shù)據(jù),就不太方便。有可能客戶端寫入 10 個(gè)字節(jié),然后再寫入 20 個(gè)字節(jié)。服務(wù)端不是讀出 10 個(gè)字節(jié)的一個(gè)消息,再讀出 20 個(gè)字節(jié)的一個(gè)消息,而有可能讀入 25 個(gè)字節(jié),再讀入 5 個(gè)字節(jié),需要業(yè)務(wù)層去組合成消息。
SCTP 借鑒了 UDP 的機(jī)制,在數(shù)據(jù)傳輸中提供了消息分幀功能。當(dāng)一端對(duì)一個(gè)套接字執(zhí)行寫操作時(shí),可確保對(duì)等端讀出的數(shù)據(jù)大小與此相同。
SCTP 的第五個(gè)特點(diǎn)是斷開連接是三次揮手。在 TCP 里面,斷開連接是四次揮手,允許另一端處于半關(guān)閉的狀態(tài)。SCTP 選擇放棄這種狀態(tài),當(dāng)一端關(guān)閉自己的套接字時(shí),對(duì)等的兩端全部需要關(guān)閉,將來(lái)任何一端都不允許再進(jìn)行數(shù)據(jù)的移動(dòng)了。
當(dāng) MME 通過(guò)認(rèn)證鑒權(quán),同意這個(gè)手機(jī)上網(wǎng)的時(shí)候,需要建立一個(gè)數(shù)據(jù)面的數(shù)據(jù)通路。建立通路的過(guò)程還是控制面的事情,因而使用的是控制面的協(xié)議 GTP-C。
建設(shè)的數(shù)據(jù)通路分兩段路,其實(shí)是兩個(gè)隧道。一段是從 eNodeB 到 SGW,這個(gè)數(shù)據(jù)通路由 MME 通過(guò) S1-MME 協(xié)議告訴 eNodeB,它是隧道的一端,通過(guò) S11 告訴 SGW,它是隧道的另一端。第二端是從 SGW 到 PGW,SGW 通過(guò) S11 協(xié)議知道自己是其中一端,并主動(dòng)通過(guò) S5 協(xié)議,告訴 PGW 它是隧道的另一端。
GTP-C 協(xié)議是基于 UDP 的,這是 UDP 的“城會(huì)玩”中的一個(gè)例子。如果看 GTP 頭,我們可以看到,這里面有隧道的 ID,還有序列號(hào)。
通過(guò)序列號(hào),不用 TCP,GTP-C 自己就可以實(shí)現(xiàn)可靠性,為每個(gè)輸出信令消息分配一個(gè)依次遞增的序列號(hào),以確保信令消息的按序傳遞,并便于檢測(cè)重復(fù)包。對(duì)于每個(gè)輸出信令消息啟動(dòng)定時(shí)器,在定時(shí)器超時(shí)前未接收到響應(yīng)消息則進(jìn)行重發(fā)。
數(shù)據(jù)面協(xié)議
當(dāng)兩個(gè)隧道都打通,接在一起的時(shí)候,PGW 會(huì)給手機(jī)分配一個(gè) IP 地址,這個(gè) IP 地址是隧道內(nèi)部的 IP 地址,可以類比為 IPsec 協(xié)議里面的 IP 地址。這個(gè) IP 地址是歸手機(jī)運(yùn)營(yíng)商管理的。然后,手機(jī)可以使用這個(gè) IP 地址,連接 eNodeB,從 eNodeB 經(jīng)過(guò) S1-U 協(xié)議,通過(guò)第一段隧道到達(dá) SGW,再?gòu)?SGW 經(jīng)過(guò) S8 協(xié)議,通過(guò)第二段隧道到達(dá) PGW,然后通過(guò) PGW 連接到互聯(lián)網(wǎng)。
數(shù)據(jù)面的協(xié)議都是通過(guò) GTP-U,如圖所示:
手機(jī)每發(fā)出的一個(gè)包,都由 GTP-U 隧道協(xié)議封裝起來(lái),格式如下:
和 IPsec 協(xié)議很類似,分為乘客協(xié)議、隧道協(xié)議、承載協(xié)議。其中乘客協(xié)議是手機(jī)發(fā)出來(lái)的包,IP 是手機(jī)的 IP,隧道協(xié)議里面有隧道 ID,不同的手機(jī)上線會(huì)建立不同的隧道,因而需要隧道 ID 來(lái)標(biāo)識(shí)。承載協(xié)議的 IP 地址是 SGW 和 PGW 的 IP 地址。
手機(jī)上網(wǎng)流程
接下來(lái),我們來(lái)看一個(gè)手機(jī)開機(jī)之后上網(wǎng)的流程,這個(gè)過(guò)程稱為 Attach??梢钥闯鰜?lái),移動(dòng)網(wǎng)絡(luò)還是很復(fù)雜的。因?yàn)檫@個(gè)過(guò)程要建立很多的隧道,分配很多的隧道 ID,所以我畫了一個(gè)圖來(lái)詳細(xì)說(shuō)明這個(gè)過(guò)程。
手機(jī)開機(jī)以后,在附近尋找基站 eNodeB,找到后給 eNodeB 發(fā)送 AttachRequest,說(shuō)“我來(lái)啦,我要上網(wǎng)”。
eNodeB 將請(qǐng)求發(fā)給 MME,說(shuō)“有個(gè)手機(jī)要上網(wǎng)”。
MME 去請(qǐng)求手機(jī),一是認(rèn)證,二是鑒權(quán),還會(huì)請(qǐng)求 HSS 看看有沒(méi)有錢,看看是在哪里上網(wǎng)。
當(dāng) MME 通過(guò)了手機(jī)的認(rèn)證之后,開始分配隧道,先告訴 SGW,說(shuō)要?jiǎng)?chuàng)建一個(gè)會(huì)話(CreateSession)。在這里面,會(huì)給 SGW 分配一個(gè)隧道 IDt1,并且請(qǐng)求 SGW 給自己也分配一個(gè)隧道 ID。
SGW 轉(zhuǎn)頭向 PGW 請(qǐng)求建立一個(gè)會(huì)話,為 PGW 的控制面分配一個(gè)隧道 IDt2,也給 PGW 的數(shù)據(jù)面分配一個(gè)隧道 IDt3,并且請(qǐng)求 PGW 給自己的控制面和數(shù)據(jù)面分配隧道 ID。
PGW 回復(fù) SGW 說(shuō)“創(chuàng)建會(huì)話成功”,使用自己的控制面隧道 IDt2,回復(fù)里面攜帶著給 SGW 控制面分配的隧道 IDt4 和控制面的隧道 IDt5,至此 SGW 和 PGW 直接的隧道建設(shè)完成。雙方請(qǐng)求對(duì)方,都要帶著對(duì)方給自己分配的隧道 ID,從而標(biāo)志是這個(gè)手機(jī)的請(qǐng)求。
接下來(lái) SGW 回復(fù) MME 說(shuō)“創(chuàng)建會(huì)話成功”,使用自己的隧道 IDt1 訪問(wèn) MME,回復(fù)里面有給 MME 分配隧道 IDt6,也有 SGW 給 eNodeB 分配的隧道 IDt7。
當(dāng) MME 發(fā)現(xiàn)后面的隧道都建設(shè)成功之后,就告訴 eNodeB,“后面的隧道已經(jīng)建設(shè)完畢,SGW 給你分配的隧道 ID 是 t7,你可以開始連上來(lái)了,但是你也要給 SGW 分配一個(gè)隧道 ID”。
eNodeB 告訴 MME 自己給 SGW 分配一個(gè)隧道,ID 為 t8。
MME 將 eNodeB 給 SGW 分配的隧道 IDt8 告知 SGW,從而前面的隧道也建設(shè)完畢。
這樣,手機(jī)就可以通過(guò)建立的隧道成功上網(wǎng)了。
異地上網(wǎng)問(wèn)題
接下來(lái)我們考慮異地上網(wǎng)的事情。
為什么要分 SGW 和 PGW 呢,一個(gè) GW 不可以嗎?SGW 是你本地的運(yùn)營(yíng)商的設(shè)備,而 PGW 是你所屬的運(yùn)營(yíng)商的設(shè)備。
如果你在巴塞羅那,一下飛機(jī),手機(jī)開機(jī),周圍搜尋到的肯定是巴塞羅那的 eNodeB。通過(guò) MME 去查尋國(guó)內(nèi)運(yùn)營(yíng)商的 HSS,看你是否合法,是否還有錢。如果允許上網(wǎng),你的手機(jī)和巴塞羅那的 SGW 會(huì)建立一個(gè)隧道,然后巴塞羅那的 SGW 和國(guó)內(nèi)運(yùn)營(yíng)商的 PGW 建立一個(gè)隧道,然后通過(guò)國(guó)內(nèi)運(yùn)營(yíng)商的 PGW 上網(wǎng)。
這樣判斷你是否能上網(wǎng)的在國(guó)內(nèi)運(yùn)營(yíng)商的 HSS,控制你上網(wǎng)策略的是國(guó)內(nèi)運(yùn)營(yíng)商的 PCRF,給手機(jī)分配的 IP 地址也是國(guó)內(nèi)運(yùn)營(yíng)商的 PGW 負(fù)責(zé)的,給手機(jī)分配的 IP 地址也是國(guó)內(nèi)運(yùn)營(yíng)商里統(tǒng)計(jì)的。運(yùn)營(yíng)商由于是在 PGW 里面統(tǒng)計(jì)的,這樣你的上網(wǎng)流量全部通過(guò)國(guó)內(nèi)運(yùn)營(yíng)商即可,只不過(guò)巴塞羅那運(yùn)營(yíng)商也要和國(guó)內(nèi)運(yùn)營(yíng)商進(jìn)行流量結(jié)算。
由于你的上網(wǎng)策略是由國(guó)內(nèi)運(yùn)營(yíng)商在 PCRF 中控制的,因而你還是上不了臉書。
小結(jié)
移動(dòng)網(wǎng)絡(luò)的發(fā)展歷程從 2G 到 3G,再到 4G,逐漸從打電話的功能為主,向上網(wǎng)的功能為主轉(zhuǎn)變;
請(qǐng)記住 4G 網(wǎng)絡(luò)的結(jié)構(gòu),有 eNodeB、MME、SGW、PGW 等,分控制面協(xié)議和數(shù)據(jù)面協(xié)議,你可以對(duì)照著結(jié)構(gòu),試著說(shuō)出手機(jī)上網(wǎng)的流程;
即便你在國(guó)外的運(yùn)營(yíng)商下上網(wǎng),也是要通過(guò)國(guó)內(nèi)運(yùn)營(yíng)商控制的,因而也上不了臉書。