前面都是讲电脑上网的情景,今天咱们就来认识下使用最多的移动网络上网场景。数据库
你必定知道手机上网有 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 中控制的,于是你仍是上不了脸书。