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