前面都是講電腦上網(wǎng)的情景,今天我們就來認(rèn)識(shí)下使用最多的移動(dòng)網(wǎng)絡(luò)上網(wǎng)場(chǎng)景。
移動(dòng)網(wǎng)絡(luò)的發(fā)展歷程
你一定知道手機(jī)上網(wǎng)有 2G、3G、4G 的說法,究竟這都是什么意思呢?有一個(gè)通俗的說法就是:用 2G 看 txt,用 3G 看 jpg,用 4G 看 avi。
2G 網(wǎng)絡(luò)
手機(jī)本來是用來打電話的,不是用來上網(wǎng)的,所以原來在 2G 時(shí)代,上網(wǎng)使用的不是 IP 網(wǎng)絡(luò),而是電話網(wǎng)絡(luò),走模擬信號(hào),專業(yè)名稱為公共交換電話網(wǎng)(PSTN,Public Switched Telephone Network)。
那手機(jī)不連網(wǎng)線,也不連電話線,它是怎么上網(wǎng)的呢?
手機(jī)是通過收發(fā)無線信號(hào)來通信的,專業(yè)名稱是 Mobile Station,簡(jiǎn)稱 MS,需要嵌入 SIM。手機(jī)是客戶端,而無線信號(hào)的服務(wù)端,就是基站子系統(tǒng)(BSS,Base Station SubsystemBSS)。至于什么是基站,你可以回想一下,你在爬山的時(shí)候,是不是看到過信號(hào)塔?我們平時(shí)城市里面的基站比較隱蔽,不容易看到,所以只有在山里才會(huì)注意到。正是這個(gè)信號(hào)塔,通過無線信號(hào),讓你的手機(jī)可以進(jìn)行通信。
但是你要知道一點(diǎn),無論無線通信如何無線,最終還是要連接到有線的網(wǎng)絡(luò)里。
因而,基站子系統(tǒng)分兩部分,一部分對(duì)外提供無線通信,叫作基站收發(fā)信臺(tái)(BTS,Base Transceiver Station),另一部分對(duì)內(nèi)連接有線網(wǎng)絡(luò),叫作基站控制器(BSC,Base Station Controller)?;臼瞻l(fā)信臺(tái)通過無線收到數(shù)據(jù)后,轉(zhuǎn)發(fā)給基站控制器。
這部分屬于無線的部分,統(tǒng)稱為無線接入網(wǎng)(RAN,Radio Access Network)。
基站控制器通過有線網(wǎng)絡(luò),連接到提供手機(jī)業(yè)務(wù)的運(yùn)營(yíng)商的數(shù)據(jù)中心,這部分稱為核心網(wǎng)(CN,Core Network)。核心網(wǎng)還沒有真的進(jìn)入互聯(lián)網(wǎng),這部分還是主要提供手機(jī)業(yè)務(wù),是手機(jī)業(yè)務(wù)的有線部分。
首先接待基站來的數(shù)據(jù)的是移動(dòng)業(yè)務(wù)交換中心(MSC,Mobile Service Switching Center),它是進(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ī)卡,就連接上來。鑒權(quán)中心(AUC,Authentication Center)和設(shè)備識(shí)別寄存器(EIR,Equipment Identity Register)主要是負(fù)責(zé)安全性的。
另外,需要看你是本地的號(hào),還是外地的號(hào),這個(gè)牽扯到計(jì)費(fèi)的問題,異地收費(fèi)還是很貴的。訪問位置寄存器(VLR,Visit Location Register)是看你目前在的地方,歸屬位置寄存器(HLR,Home Location Register)是看你的號(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 ,Gateway Mobile Switching Center)就是干這個(gè)的,然后是真正的互連網(wǎng)。在 2G 時(shí)代,還是電話網(wǎng)絡(luò) PSTN。
數(shù)據(jù)中心里面的這些模塊統(tǒng)稱為網(wǎng)絡(luò)子系統(tǒng)(NSS,Network and Switching Subsystem)。
因而 2G 時(shí)代的上網(wǎng)如圖所示,我們總結(jié)一下,有這幾個(gè)核心點(diǎn):
手機(jī)通過無線信號(hào)連接基站;
基站一面朝前接無線,一面朝后接核心網(wǎng);
核心網(wǎng)一面朝前接到基站請(qǐng)求,一是判斷你是否合法,二是判斷你是不是本地號(hào),還有沒有錢,一面通過網(wǎng)關(guān)連接電話網(wǎng)絡(luò)。
2.5G 網(wǎng)絡(luò)
后來從 2G 到了 2.5G,也即在原來電路交換的基礎(chǔ)上,加入了分組交換業(yè)務(wù),支持 Packet 的轉(zhuǎn)發(fā),從而支持 IP 網(wǎng)絡(luò)。
在上述網(wǎng)絡(luò)的基礎(chǔ)上,基站一面朝前接無線,一面朝后接核心網(wǎng)。在朝后的組件中,多了一個(gè)分組控制單元(PCU,Packet Control Unit),用以提供分組交換通道。
在核心網(wǎng)里面,有個(gè)朝前的接待員(SGSN,Service GPRS Supported Node)和朝后連接 IP 網(wǎng)絡(luò)的網(wǎng)關(guān)型 GPRS 支持節(jié)點(diǎn)(GGSN,Gateway GPRS Supported Node)。
3G 網(wǎng)絡(luò)
到了 3G 時(shí)代,主要是無線通信技術(shù)有了改進(jìn),大大增加了無線的帶寬。
以 W-CDMA 為例,理論最高 2M 的下行速度,因而基站改變了,一面朝外的是 Node B,一面朝內(nèi)連接核心網(wǎng)的是無線網(wǎng)絡(luò)控制器(RNC,Radio Network Controller)。核心網(wǎng)以及連接的 IP 網(wǎng)絡(luò)沒有什么變化。
4G 網(wǎng)絡(luò)
然后就到了今天的 4G 網(wǎng)絡(luò),基站為 eNodeB,包含了原來 Node B 和 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ī)通過 eNodeB 連上的時(shí)候,MME 會(huì)根據(jù) HSS 的信息,判斷你是否合法。如果允許連上來,MME 不負(fù)責(zé)具體的數(shù)據(jù)的流量,而是 MME 會(huì)選擇數(shù)據(jù)面的 SGW 和 PGW,然后告訴 eNodeB,我允許你連上來了,你連接它們吧。
于是手機(jī)直接通過 eNodeB 連接 SGW,連上核心網(wǎng),SGW 相當(dāng)于數(shù)據(jù)面的接待員,并通過 PGW 連到 IP 網(wǎng)絡(luò)。PGW 就是出口網(wǎng)關(guān)。在出口網(wǎng)關(guān),有一個(gè)組件 PCRF,稱為策略和計(jì)費(fèi)控制單元,用來控制上網(wǎng)策略和流量的計(jì)費(fèi)。
4G 網(wǎng)絡(luò)協(xié)議解析
我們來仔細(xì)看一下 4G 網(wǎng)絡(luò)的協(xié)議,真的非常復(fù)雜。我們將幾個(gè)關(guān)鍵組件放大來看。
控制面協(xié)議
其中虛線部分是控制面的協(xié)議。當(dāng)一個(gè)手機(jī)想上網(wǎng)的時(shí)候,先要連接 eNodeB,并通過 S1-MME 接口,請(qǐng)求 MME 對(duì)這個(gè)手機(jī)進(jìn)行認(rèn)證和鑒權(quán)。S1-MME 協(xié)議棧如下圖所示。
UE 就是你的手機(jī),eNodeB 還是兩面派,朝前對(duì)接無線網(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 連接來講,雖然服務(wù)端可以監(jiān)聽 0.0.0.0,也就是從哪個(gè)網(wǎng)卡來的連接都能接受,但是一旦建立了連接,就建立了四元組,也就選定了某個(gè)網(wǎng)卡。
SCTP 引入了聯(lián)合(association)的概念,將多個(gè)接口、多條路徑放到一個(gè)聯(lián)合中來。當(dāng)檢測(cè)到一條路徑失效時(shí),協(xié)議就會(huì)通過另外一條路徑來發(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)文中,通過聯(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)惡意客戶端使用虛假的源地址來偽造大量 SYN 報(bào)文時(shí),服務(wù)端需要分配大量的資源,最終耗盡資源,無法處理新的請(qǐng)求。
SCTP 可以通過四次握手引入 Cookie 的概念,來有效地防止這種攻擊的產(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è)連接分配資源,并通過向客戶機(jī)發(fā)送一個(gè) COOKIE-ACK 報(bào)文對(duì)其進(jìn)行響應(yīng)。
SCTP 的第四個(gè)特點(diǎn)是將消息分幀。TCP 是面向流的,也即發(fā)送的數(shù)據(jù)沒頭沒尾,沒有明顯的界限。這對(duì)于發(fā)送數(shù)據(jù)沒有問題,但是對(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)閉,將來任何一端都不允許再進(jìn)行數(shù)據(jù)的移動(dòng)了。
當(dāng) MME 通過認(rèn)證鑒權(quán),同意這個(gè)手機(jī)上網(wǎng)的時(shí)候,需要建立一個(gè)數(shù)據(jù)面的數(shù)據(jù)通路。建立通路的過程還是控制面的事情,因而使用的是控制面的協(xié)議 GTP-C。
建設(shè)的數(shù)據(jù)通路分兩段路,其實(shí)是兩個(gè)隧道。一段是從 eNodeB 到 SGW,這個(gè)數(shù)據(jù)通路由 MME 通過 S1-MME 協(xié)議告訴 eNodeB,它是隧道的一端,通過 S11 告訴 SGW,它是隧道的另一端。第二端是從 SGW 到 PGW,SGW 通過 S11 協(xié)議知道自己是其中一端,并主動(dòng)通過 S5 協(xié)議,告訴 PGW 它是隧道的另一端。
GTP-C 協(xié)議是基于 UDP 的,這是UDP 的 “城會(huì)玩” 中的一個(gè)例子。如果看 GTP 頭,我們可以看到,這里面有隧道的 ID,還有序列號(hào)。
通過序列號(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)過 S1-U 協(xié)議,通過第一段隧道到達(dá) SGW,再?gòu)?SGW 經(jīng)過 S8 協(xié)議,通過第二段隧道到達(dá) PGW,然后通過 PGW 連接到互聯(lián)網(wǎng)。
數(shù)據(jù)面的協(xié)議都是通過 GTP-U,如圖所示:
手機(jī)每發(fā)出的一個(gè)包,都由 GTP-U 隧道協(xié)議封裝起來,格式如下:
和 IPsec 協(xié)議很類似,分為乘客協(xié)議、隧道協(xié)議、承載協(xié)議。其中乘客協(xié)議是手機(jī)發(fā)出來的包,IP 是手機(jī)的 IP,隧道協(xié)議里面有隧道 ID,不同的手機(jī)上線會(huì)建立不同的隧道,因而需要隧道 ID 來標(biāo)識(shí)。承載協(xié)議的 IP 地址是 SGW 和 PGW 的 IP 地址。
手機(jī)上網(wǎng)流程
接下來,我們來看一個(gè)手機(jī)開機(jī)之后上網(wǎng)的流程,這個(gè)過程稱為Attach。可以看出來,移動(dòng)網(wǎng)絡(luò)還是很復(fù)雜的。因?yàn)檫@個(gè)過程要建立很多的隧道,分配很多的隧道 ID,所以我畫了一個(gè)圖來詳細(xì)說明這個(gè)過程。
手機(jī)開機(jī)以后,在附近尋找基站 eNodeB,找到后給 eNodeB 發(fā)送 Attach Request,說“我來啦,我要上網(wǎng)”。
eNodeB 將請(qǐng)求發(fā)給 MME,說“有個(gè)手機(jī)要上網(wǎng)”。
MME 去請(qǐng)求手機(jī),一是認(rèn)證,二是鑒權(quán),還會(huì)請(qǐng)求 HSS 看看有沒有錢,看看是在哪里上網(wǎng)。
當(dāng) MME 通過了手機(jī)的認(rèn)證之后,開始分配隧道,先告訴 SGW,說要?jiǎng)?chuàng)建一個(gè)會(huì)話(Create Session)。在這里面,會(huì)給 SGW 分配一個(gè)隧道 ID t1,并且請(qǐng)求 SGW 給自己也分配一個(gè)隧道 ID。
SGW 轉(zhuǎn)頭向 PGW 請(qǐng)求建立一個(gè)會(huì)話,為 PGW 的控制面分配一個(gè)隧道 ID t2,也給 PGW 的數(shù)據(jù)面分配一個(gè)隧道 ID t3,并且請(qǐng)求 PGW 給自己的控制面和數(shù)據(jù)面分配隧道 ID。
PGW 回復(fù) SGW 說“創(chuàng)建會(huì)話成功”,使用自己的控制面隧道 ID t2,回復(fù)里面攜帶著給 SGW 控制面分配的隧道 ID t4 和控制面的隧道 ID t5,至此 SGW 和 PGW 直接的隧道建設(shè)完成。雙方請(qǐng)求對(duì)方,都要帶著對(duì)方給自己分配的隧道 ID,從而標(biāo)志是這個(gè)手機(jī)的請(qǐng)求。
接下來 SGW 回復(fù) MME 說“創(chuàng)建會(huì)話成功”,使用自己的隧道 ID t1 訪問 MME,回復(fù)里面有給 MME 分配隧道 ID t6,也有 SGW 給 eNodeB 分配的隧道 ID t7。
當(dāng) MME 發(fā)現(xiàn)后面的隧道都建設(shè)成功之后,就告訴 eNodeB,“后面的隧道已經(jīng)建設(shè)完畢,SGW 給你分配的隧道 ID 是 t7,你可以開始連上來了,但是你也要給 SGW 分配一個(gè)隧道 ID”。
eNodeB 告訴 MME 自己給 SGW 分配一個(gè)隧道,ID 為 t8。
MME 將 eNodeB 給 SGW 分配的隧道 ID t8 告知 SGW,從而前面的隧道也建設(shè)完畢。
這樣,手機(jī)就可以通過建立的隧道成功上網(wǎng)了。
異地上網(wǎng)問題
接下來我們考慮異地上網(wǎng)的事情。
為什么要分 SGW 和 PGW 呢,一個(gè) GW 不可以嗎?SGW 是你本地的運(yùn)營(yíng)商的設(shè)備,而 PGW 是你所屬的運(yùn)營(yíng)商的設(shè)備。
如果你在巴塞羅那,一下飛機(jī),手機(jī)開機(jī),周圍搜尋到的肯定是巴塞羅那的 eNodeB。通過 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ó)內(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ó)內(nèi)運(yùn)營(yíng)商即可,只不過巴塞羅那運(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),試著說出手機(jī)上網(wǎng)的流程;
即便你在國(guó)外的運(yùn)營(yíng)商下上網(wǎng),也是要通過國(guó)內(nèi)運(yùn)營(yíng)商控制的,因而也上不了臉書。
編輯:hfy
評(píng)論
查看更多