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