gitbook/趣谈网络协议/docs/10534.md
2022-09-03 22:05:03 +08:00

17 KiB
Raw Permalink Blame History

第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书

前面讲的都是电脑上网的场景,那使用手机上网有什么不同呢?

移动网络的发展历程

你一定知道手机上网有2G、3G、4G的说法究竟这都是什么意思呢有一个通俗的说法就是用2G看txt用3G看jpg用4G看avi。

2G网络

手机本来是用来打电话的不是用来上网的所以原来在2G时代上网使用的不是IP网络而是电话网络走模拟信号专业名称为公共交换电话网PSTNPublic Switched Telephone Network

那手机不连网线,也不连电话线,它是怎么上网的呢?

手机是通过收发无线信号来通信的专业名称是Mobile Station简称MS需要嵌入SIM。手机是客户端而无线信号的服务端就是基站子系统BSSBase Station SubsystemBSS。至于什么是基站你可以回想一下你在爬山的时候是不是看到过信号塔我们平时城市里面的基站比较隐蔽不容易看到所以只有在山里才会注意到。正是这个信号塔通过无线信号让你的手机可以进行通信。

但是你要知道一点,无论无线通信如何无线,最终还是要连接到有线的网络里。前面讲数据中心的时候我也讲过,电商的应用是放在数据中心的,数据中心的电脑都是插着网线的。

因而基站子系统分两部分一部分对外提供无线通信叫作基站收发信台BTSBase Transceiver Station另一部分对内连接有线网络叫作基站控制器BSCBase Station Controller。基站收发信台通过无线收到数据后转发给基站控制器。

这部分属于无线的部分统称为无线接入网RANRadio Access Network

基站控制器通过有线网络连接到提供手机业务的运营商的数据中心这部分称为核心网CNCore Network。核心网还没有真的进入互联网这部分还是主要提供手机业务是手机业务的有线部分。

首先接待基站来的数据的是移动业务交换中心MSCMobile Service Switching Center它是进入核心网的入口但是它不会让你直接连接到互联网上。

因为在让你的手机真正进入互联网之前提供手机业务的运营商需要认证是不是合法的手机接入。你别自己造了一张手机卡就连接上来。鉴权中心AUCAuthentication Center和设备识别寄存器EIREquipment Identity Register主要是负责安全性的。

另外需要看你是本地的号还是外地的号这个牵扯到计费的问题异地收费还是很贵的。访问位置寄存器VLRVisit Location Register是看你目前在的地方归属位置寄存器HLRHome Location Register是看你的号码归属地。

当你的手机卡既合法又有钱的时候才允许你上网这个时候需要一个网关连接核心网和真正的互联网。网关移动交换中心GMSC Gateway Mobile Switching Center就是干这个的然后是真正的互连网。在2G时代还是电话网络PSTN。

数据中心里面的这些模块统称为网络子系统NSSNetwork and Switching Subsystem

因而2G时代的上网如图所示我们总结一下有这几个核心点

  • 手机通过无线信号连接基站;

  • 基站一面朝前接无线,一面朝后接核心网;

  • 核心网一面朝前接到基站请求,一是判断你是否合法,二是判断你是不是本地号,还有没有钱,一面通过网关连接电话网络。

2.5G网络

后来从2G到了2.5G也即在原来电路交换的基础上加入了分组交换业务支持Packet的转发从而支持IP网络。

在上述网络的基础上基站一面朝前接无线一面朝后接核心网。在朝后的组件中多了一个分组控制单元PCUPacket Control Unit用以提供分组交换通道。

在核心网里面有个朝前的接待员SGSNService GPRS Supported Node和朝后连接IP网络的网关型GPRS支持节点GGSNGateway GPRS Supported Node

3G网络

到了3G时代主要是无线通信技术有了改进大大增加了无线的带宽。

以W-CDMA为例理论最高2M的下行速度因而基站改变了一面朝外的是Node B一面朝内连接核心网的是无线网络控制器RNCRadio 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到PGWSGW通过S11协议知道自己是其中一端并主动通过S5协议告诉PGW它是隧道的另一端。

GTP-C协议是基于UDP的这是UDP的“城会玩”中的一个例子。如果看GTP头我们可以看到这里面有隧道的ID还有序列号。

通过序列号不用TCPGTP-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所以我画了一个图来详细说明这个过程。

  1. 手机开机以后在附近寻找基站eNodeB找到后给eNodeB发送Attach Request说“我来啦我要上网”。

  2. eNodeB将请求发给MME说“有个手机要上网”。

  3. MME去请求手机一是认证二是鉴权还会请求HSS看看有没有钱看看是在哪里上网。

  4. 当MME通过了手机的认证之后开始分配隧道先告诉SGW说要创建一个会话Create Session。在这里面会给SGW分配一个隧道ID t1并且请求SGW给自己也分配一个隧道ID。

  5. SGW转头向PGW请求建立一个会话为PGW的控制面分配一个隧道ID t2也给PGW的数据面分配一个隧道ID t3并且请求PGW给自己的控制面和数据面分配隧道ID。

  6. PGW回复SGW说“创建会话成功”使用自己的控制面隧道ID t2回复里面携带着给SGW控制面分配的隧道ID t4和控制面的隧道ID t5至此SGW和PGW直接的隧道建设完成。双方请求对方都要带着对方给自己分配的隧道ID从而标志是这个手机的请求。

  7. 接下来SGW回复MME说“创建会话成功”使用自己的隧道ID t1访问MME回复里面有给MME分配隧道ID t6也有SGW给eNodeB分配的隧道ID t7。

  8. 当MME发现后面的隧道都建设成功之后就告诉eNodeB“后面的隧道已经建设完毕SGW给你分配的隧道ID是t7你可以开始连上来了但是你也要给SGW分配一个隧道ID”。

  9. eNodeB告诉MME自己给SGW分配一个隧道ID为t8。

  10. 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等分控制面协议和数据面协议你可以对照着结构试着说出手机上网的流程

  • 即便你在国外的运营商下上网,也是要通过国内运营商控制的,因而也上不了脸书。

最后,给你留两个思考题:

  1. 咱们上网都有套餐,有交钱多的,有交钱少的,你知道移动网络是如何控制不同优先级的用户的上网流量的吗?

  2. 前面讲过的所有的网络都是基于物理机的,随着云计算兴起,无论是电商,还是移动网络都要部署在云中了,你知道云中网络的设计有哪些要点吗?

我们的专栏更新到第23讲不知你掌握得如何每节课后我留的思考题你都有没有认真思考并在留言区写下答案呢我会从已发布的文章中选出一批认真留言的同学,赠送学习奖励礼券和我整理的独家网络协议知识图谱。

欢迎你留言和我讨论。趣谈网络协议,我们下期见!