[趣谈网络协议学习] 23 移动网络:去巴塞罗那,手机也上不了脸书

2G 网络

2G时代上网使用的不是IP网络, 而是电话网络, 走模拟信号. 被称为公共交换电话网(PSTN, Public Switched Telephone Network)

2G时代手机怎么上网?

手机是通过收发无线信号来通信的,专业名称是 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 Identify Register) 主要是负责安全性

计费, 检查是不是外地号. 访问 位置寄存器(VLR, Visit Location Register) 是看你目前在的地方, 归属位置寄存器(HLR, Home Location Register) 是看你的号码归属地

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

数据中心里面的这些模块统称为网络子系统(NSS,Network and Switching Subsystem)。

图片 2G 网络

手机 -> 基站子系统(BSS)[基站收发信台(BTS) -> 基站控制器(BSC)]无线接入网(RAN) -> 网络子系统(NSS)[移动业务交换中心 (MSC) 、鉴权中心(AUC) 、 设备识别寄存器(EIR) 、位置寄存器(VLR) 、 归属位置寄存器(HLR) 、 网关移动交换中心(GMSC)]核心网(CN)

2G网络特点

  • 手机通过无线信号连接基站
  • 基站
    • 朝前接无线(RAN)
    • 朝后接核心网(CN)
  • 核心网
    • 超前接到基站请求
      • 判断你是否合法
      • 判断你是不是本地号码
      • 有没有钱
    • 通过网关连接电话网络

2.5G 网络

原来电路交换的基础上,加入了分组交换业务,支持 Packet 的转发,从而支持 IP 网络

基站:

  • 一面朝前接无线
  • 一面朝后接核心网
    • 多了一个分组控制单元(PCU,Packet Control Unit),用以提供分组交换通道。

核心网:

  • 朝前接待员(SGSN, Service GPRS Supported Node)
  • 朝后链接IP网络的网关型GPRS支持节点(GGSN, Gateway GPRS Supported Node).

图片 2.5 G 网络

3G 网络

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

W-CDMA 为例,理论最高 2M 的下行速度,因而基站改变了

基站:

  • 一面朝外的是 Node B
  • 一面朝内连接核心网的是无线网络控制器(RNC,Radio Network Controller)

核心网以及连接的 IP 网络没有什么变化。

图片 3 G 网络

4G 网络

基站为 eNodeB , 包含了原来Node BRNC的功能.

核心网实现了控制面数据面的分离

原先前面核心网里面有MSC(2G)或SGSN(2.5, 3G), 检查是否合法以及转发数据都是它负责. 控制面和数据面是合二为一的, 灵活性比较差.

  • 控制面主要是指令,多是小包,往往需要高的及时性;
  • 数据面主要是流量,多是大包,往往需要吞吐量。

图片 4 G 网络

  • HSS 用于存储用户签约信息的数据库,其实就是你这个号码归属地是哪里的,以及一些认证信息。

  • MME 是核心控制网元,是控制面的核心,当手机通过 eNodeB 连上的时候,MME 会根据 HSS 的信息,判断你是否合法。如果允许连上来,MME 不负责具体的数据的流量,而是 MME 会选择数据面的 SGW 和 PGW,然后告诉 eNodeB,我允许你连上来了,你连接它们吧。

  • 手机直接通过 eNodeB 连接 SGW,连上核心网,SGW 相当于数据面的接待员,并通过 PGW 连到 IP 网络。PGW 就是出口网关。在出口网关,有一个组件 PCRF,称为策略和计费控制单元,用来控制上网策略和流量的计费。

SGW(Serving GateWay,服务网关) PGW(PDN GateWay,PDN网关)

4G 网络协议解析

图片 4G 网络协议解析

控制面协议

虚线部分是控制面的协议.

当一个手机想上网的时候,先要连接 eNodeB,并通过 S1-MME 接口,请求MME对这个手机进行认证和鉴权。

图片 S1-MME 协议栈

  • UE 就是你的手机
  • eNodeB
    • 朝前对接无线网络
    • 朝后对接核心网络
  • 控制面对接的是 MME

eNodeBMME之间的连接就是正常的IP网络. 在IP层上是SCTP(既不是TCP, 也不是UDP).

SCTP:也是传输层的协议,也是面向连接的,但是更加适合移动网络。 它继承了 TCP 较为完善的拥塞控制并改进 TCP 的一些不足之处。

SCTP特点

SCTP - 多宿主

一台机器可以有多个网卡. 虽然TCP可以监听0.0.0.0也就是从哪个网卡来的连接都能接收, 但是一旦建立连接, 就建立了四元组, 也就选定了某个网卡

SCTP - 将一个联合分成多个流

SCTP引入了联合(association)的概念, 将多个接口, 多条路径放到一个联合中来. 当检测到一条路径失效时, 协议就会通过另外一条路径来发送通信数据. 应用程序不必知道发生了故障, 恢复, 提高了可用性和可靠性.

一个联合中的所有流都是独立的, 但均与该联合相关. 每个流都给定了一个流编号, 被编码到SCTP报文中, 通过联合在网络上传送.

  • TCP中, 由于强制顺序, 导致前一个不到达, 后一个就等待.
  • SCTP 的多个流不会相互阻塞.

SCTP - 四次握手, 防止SYN攻击

TCP是三次握手, 当服务端收到客户的SYN之后, 返回一个SYN-ACK之前, 就建立数据结构, 并记录下状态, 等待客户端发送ACK的ACK.

当恶意客户端使用虚假的源地址来伪造大量SYN报文时, 服务端需要分配大量的资源, 最好耗尽资源, 无法处理新的请求.

SCTP通过四次握手引入Cookie的概念, 来有效的防止这种攻击.

  • 客户机使用一个INIT报文发起一个连接.
  • 服务器使用一个INIT-ACK报文进行响应, 包括了Cookie.
  • 客户端使用一个COOKIE-ECHO报文进行响应, 包含了服务器所发送的Cookie.
  • 这个时候, 服务器为这个连接分配资源, 并通过向客户机发送一个COOKIE-ACK报文对其响应.

SCTP - 消息分帧

TCP是面向流的, 也即发送的数据没头没尾, 没有明显的界限.

发送数据没问题, 但是对于发送一个个消息类型的数据, 不太方便. 可能客户端写入10个字节, 再写入20个字节. 服务端不是读出10个字节的一个消息, 再读出20个字节的一个消息. 而是有可能读入 25 个字节, 再读入 5 个字节,需要业务层去组合成消息.

SCTP借鉴了UDP的机制, 在数据传输中提供了消息分帧功能. 当一端对一个套接字执行写操作时, 可确保对等端读出的数据大小与此相同

SCTP - 断开连接是三次挥手

在 TCP 里面,断开连接是四次挥手,允许另一端处于半关闭的状态。

SCTP: 当一端关闭自己的套接字时, 对等的两端全部需要关闭, 将来任何一端都不讯再进行数据的移动了.

数据通路与GTP-C

当 MME 通过认证鉴权,同意这个手机上网的时候,需要建立一个数据面的数据通路

建立通路的过程还是控制面的事情, 因而使用的是控制面的协议GTP-C.

建设的数据通路分两段路, 两个隧道.

  • 第一段是eNodeB到SGW

    • 由MME通过S1-MME协议告诉eNodeB. 它是隧道一端.
    • 通过S11告诉SGW,它是隧道的另一端.
  • 第二段是SGW到PGW

    • SGW 通过 S11 协议知道自己是其中一端,并主动通过 S5 协议,告诉 PGW 它是隧道的另一端。

GTP-C 协议是基于 UDP 的

图片 GTP-C

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 隧道协议封装起来,格式如下。

图片 GTP-U 隧道协议

和 IPsec 协议很类似

  • 乘客协议是手机发出来的包, IP是手机的IP
  • 隧道协议里面有隧道 ID,不同的手机上线会建立不同的隧道,因而需要隧道 ID 来标识
  • 承载协议的 IP 地址是 SGW 和 PGW 的 IP 地址。

手机上网流程

图片 手机上网流程

手机开机上网的流程, 这个过程称为Attach.

  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分配一个隧道.
  9. eNodeB告诉MME自己给SGW分配一个隧道, ID为t8.
  10. MME将eNodeB给SGW分配的隧道ID t8告知SGW, 从而前面的隧道也建设完毕.

这样,手机就可以通过建立的隧道成功上网了。

异地上网

  • SGW是本地的运营商设备
  • PGW是所属的运营商的设备

国外上网:

  • 搜索本地eNodeB
  • 通过MME去查寻国内运营商的HSS, 检查是否合法, 有钱.
  • 如果可以上网, 手机和国外的SGW建立一个隧道
  • 国外的SGW和国内运营商的PGW建立一个隧道, 通过国内运营商的PGW上网

图片 国外上网

  • 能否上网是国内运营商的HSS
  • 控制上网策略的是国内运营商的PCRF
  • 给手机分配的IP地址也是国内运营商的PGW负责
  • 上网流量全部通过国内运营商即可
  • 国外运营商也要和国内运营商进行流量结算

参考资料:

趣谈网络协议(极客时间)链接:
http://gk.link/a/106nW


GitHub链接:
https://github.com/lichangke/LeetCode
知乎个人首页:
https://www.zhihu.com/people/lichangke/
CSDN首页:
https://me.csdn.net/leacock1991
欢迎大家来一起交流学习

发布了170 篇原创文章 · 获赞 16 · 访问量 2820

猜你喜欢

转载自blog.csdn.net/leacock1991/article/details/102025052