前面都是講電腦上網的情景,今天咱們就來認識下使用最多的移動網絡上網場景。數據庫
你必定知道手機上網有 2G、3G、4G 的說法,究竟這都是什麼意思呢?有一個通俗的說法就是:用 2G 看 txt,用 3G 看 jpg,用 4G 看 avi。安全
手機原本是用來打電話的,不是用來上網的,因此原來在 2G 時代,上網使用的不是 IP 網絡,而是電話網絡,走模擬信號,專業名稱爲公共交換電話網(PSTN,Public Switched Telephone Network)。服務器
那手機不連網線,也不連電話線,它是怎麼上網的呢?網絡
手機是經過收發無線信號來通訊的,專業名稱是 Mobile Station,簡稱 MS,須要嵌入 SIM。手機是客戶端,而無線信號的服務端,就是基站子系統(BSS,Base Station SubsystemBSS)。至於什麼是基站,你能夠回想一下,你在登山的時候,是否是看到過信號塔?咱們平時城市裏面的基站比較隱蔽,不容易看到,因此只有在山裏纔會注意到。正是這個信號塔,經過無線信號,讓你的手機能夠進行通訊。數據結構
可是你要知道一點,不管無線通訊如何無線,最終仍是要鏈接到有線的網絡裏。架構
於是,基站子系統分兩部分,一部分對外提供無線通訊,叫做基站收發信臺(BTS,Base Transceiver Station),另外一部分對內鏈接有線網絡,叫做基站控制器(BSC,Base Station Controller)。基站收發信臺經過無線收到數據後,轉發給基站控制器。ui
這部分屬於無線的部分,統稱爲無線接入網(RAN,Radio Access Network)。編碼
基站控制器經過有線網絡,鏈接到提供手機業務的運營商的數據中心,這部分稱爲核心網(CN,Core Network)。核心網尚未真的進入互聯網,這部分仍是主要提供手機業務,是手機業務的有線部分。spa
首先接待基站來的數據的是移動業務交換中心(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 時代的上網如圖所示,咱們總結一下,有這幾個核心點:
後來從 2G 到了 2.5G,也即在原來電路交換的基礎上,加入了分組交換業務,支持 Packet 的轉發,從而支持 IP 網絡。
在上述網絡的基礎上,基站一面朝前接無線,一面朝後接核心網。在朝後的組件中,多了一個分組控制單元(PCU,Packet Control Unit),用以提供分組交換通道。
在覈心網裏面,有個朝前的接待員(SGSN,Service GPRS Supported Node)和朝後鏈接 IP 網絡的網關型 GPRS 支持節點(GGSN,Gateway GPRS Supported Node)。
到了 3G 時代,主要是無線通訊技術有了改進,大大增長了無線的帶寬。
以 W-CDMA 爲例,理論最高 2M 的下行速度,於是基站改變了,一面朝外的是 Node B,一面朝內鏈接核心網的是無線網絡控制器(RNC,Radio Network Controller)。核心網以及鏈接的 IP 網絡沒有什麼變化。
而後就到了今天的 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 網絡的協議,真的很是複雜。咱們將幾個關鍵組件放大來看。
其中虛線部分是控制面的協議。當一個手機想上網的時候,先要鏈接 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,因此我畫了一個圖來詳細說明這個過程。
這樣,手機就能夠經過創建的隧道成功上網了。
接下來咱們考慮異地上網的事情。
爲何要分 SGW 和 PGW 呢,一個 GW 不能夠嗎?SGW 是你本地的運營商的設備,而 PGW 是你所屬的運營商的設備。
若是你在巴塞羅那,一下飛機,手機開機,周圍搜尋到的確定是巴塞羅那的 eNodeB。經過 MME 去查尋國內運營商的 HSS,看你是否合法,是否還有錢。若是容許上網,你的手機和巴塞羅那的 SGW 會創建一個隧道,而後巴塞羅那的 SGW 和國內運營商的 PGW 創建一個隧道,而後經過國內運營商的 PGW 上網。
這樣判斷你是否能上網的在國內運營商的 HSS,控制你上網策略的是國內運營商的 PCRF,給手機分配的 IP 地址也是國內運營商的 PGW 負責的,給手機分配的 IP 地址也是國內運營商裏統計的。運營商因爲是在 PGW 裏面統計的,這樣你的上網流量所有經過國內運營商便可,只不過巴塞羅那運營商也要和國內運營商進行流量結算。
因爲你的上網策略是由國內運營商在 PCRF 中控制的,於是你仍是上不了臉書。