目录

前文列表

4G EPS 中的小区搜索

4G EPS 中的 PLMN 选择

4G EPS 中的小区选择

4G EPS 中的随机接入

4G EPS 中建立 UE 与 eNB 之间的 RRC 连接

S1 连接

NOTE:这里的 S1 连接我们特指 S1-C 上的连接。

eNB 和 MME 发送 S1AP 消息之前需建立 eNB 和 MME 之间的 S1 连接。S1 连接分为两个层面:

  1. eNB 的 S1 连接(Non-UE-associated S1-connection):是 eNB 和 MME 的 S1AP 实体之间的连接。eNB 入网时会主动和 MME 建立 S1 连接(eNB 会配置并接入指定 MME S1-C 接口的 IP/Port),这个 S1 连接和 UE 无关,即使 eNB 空载也依然存在。

  2. UE 的 S1 连接(UE-associated logical S1-connection):是和 UE 关联的逻辑连接。由于 eNB 和 MME 不止为一个 UE 服务,eNB 和 MME 通过为每个 UE 建立不同的 S1 连接(逻辑连接)来进行区分,并发送对应的 S1AP 消息,eNB 的 S1 连接是 UE 的 S1 连接的基础。

eNB 的 S1 连接

eNB 的 S1 连接建立是 eNB 入网的一部分。eNB 通过静态配置或查询 Local DNS 方式获得 MME 的 SCTP Endpoint 的 IP/Port,主动向 MME 请求建立 SCTP 偶联(SCTP Association):eNB 向 MME 发送 S1 SETUP REQUEST,MME 向 eNB 发送 S1 SETUP RESPONSE,双方交换配置(比如 eNB 的 eNB ID 和 TAI、MME 的 GUMMEI 和 RMC),eNB 的 S1 连接建立完成。

在 MME POOL 组网场景中,eNB 会与 POOL 中的各个 MME 分别建立 S1 连接。过程中,MME 会下发各自的 GUMMEI(MME 全局标识)和 RMC(Relative MME Capacity)到 eNB 保存,以确定后续如何选择 MME,继而路由 NAS 消息(NNSF,NAS Node Select Function)。



NOTE:eNB 的 S1 连接仅在 eNB 入网时涉及,所以后文中如无特殊说明,S1 连接均为 UE 的 S1 连接。

UE 的 S1 连接

当 UE 和 MME 之间有 NAS 消息交互时,eNB 和 MME 之间必须首先建立 UE 的 S1 连接。UE 的 S1 连接总是由 eNB 发起创建的:

  1. 当某个 UE 入网,eNB 从 RRC 消息的 NAS PDU 中接收到第一条上行 NAS 消息后(e.g. UE ATTACH REQUEST),立即为 UE 分配 eNB UE S1AP ID,并包含在 eNB 发送到 MME 的 S1AP 消息 INITIAL UE MESSAGE 中。
  2. 随后 MME 应为 UE 分配 MME UE S1AP ID,并包含在 MME 发送到 eNB 的 S1AP 消息 DOWNLINK NAS TRANSPORT(携带 ESM INFORMATION REQUEST 或 AUTHENTICATE REQUEST 等 NAS 消息)中。

eNB UE S1AP ID 和 MME UE S1AP ID 组成了一对 UE S1AP ID Pair,这些信息会包含在 UE Context 内并保存在 eNB 和 MME 中,用于识别 S1AP 消息关联的 UE。如果 eNB 或 MME 发现 S1AP 消息包含的 UE S1AP ID Pair 和 UE Context 中保存的不同,就会发送 ERROR INDICATION,原因可能为 “ID 无法识别”、“ID 已分配过” 或 “ID 对前后不一致”

:以下结果在 UE 入网过程中抓 s1ap 协议可得。

示图中 INITIAL UE MESSAGE 包含 eNB UE S1AP ID: 1546538,随后 DOWNLINK NAS TRANSPORT 包含 MME UE S1AP ID: 160563068,同时还包含之前的 eNB UE S1AP ID: 1546538,这样 eNB 就知道下行 S1AP 消息(携带 NAS 消息)对应的 UE 了;最后 UPLINK NAS TRANSPORT 同时了包含 eNB UE S1AP ID 和 MME UE S1AP ID,这样 MME 就知道上行 S1AP 消息(携带 NAS 消息)对应的 UE 了

4G EPS 中建立 eNB 与 MME 之间的 S1 连接的更多相关文章

  1. MYSQL 中 MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比

    1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...

  2. Keil环境中建立带FreeRTOS的STM32L项目

    本文是网上转载,版权所有. Keil环境中建立带FreeRTOS的STM32L项目 1.先把source文件夹复制至project目录,然后在keil中添加RTOS文件,如图: 其中heap_2.c按 ...

  3. Servlet中的GET和POST之间的区别

    自己的感悟: get和post这是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的 ...

  4. 1.2 如何在visual studio 中建立C#程序

    这一节简单介绍一下怎么在visual studio 2015中建立第一个C#程序,我使用的是2015版的visual studio,不同版本可能有一些差异,不过大体上是相同的,这些信息仅供新手参考,大 ...

  5. <Java中的继承和组合之间的联系和区别>

    //Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...

  6. jQuery中的bind() live() delegate()之间区别分析

    jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click', ...

  7. Android 中建立一个OpenGL ES的开发环境

    转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...

  8. Android中Bitmap, Drawable, Byte,ID之间的转化

    Android中Bitmap, Drawable, Byte,ID之间的转化 1.  Bitmap 转化为 byte ByteArrayOutputStream out = new ByteArray ...

  9. Oracle中建立物化视图报错

    Oracle中建立物化视图报错 今天在建立视图的时候,报了一个错:ORA-01723: zero-length columns are not allowed. 建视图的语句: create mate ...

  10. SQL Server中建立外键的方法

    在SQL中建立外键约束,可以级联查询表中的数据,在C#代码生成器中,也能根据外键关系生成相应的外键表数据模型.外键也可防止删除有外键关系的记录,一定程度上保护了数据的安全性. 步骤: 1.要建立外键关 ...

随机推荐

  1. #状压dp,贪心#CF1316E Team Building

    题目 为了组织一支排球队,你需要为队伍里的\(p\)个不同的位置,从\(n\)个人中选出\(p\)个人, 且每个位置上都恰好有一个人.另外还需要从剩下的人中选出恰好\(k\)个人作为观众. 对于第\( ...

  2. 使用OHOS SDK构建libxml2

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://gitlab.gnome.org/GNOME/ ...

  3. 浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

    一.前言 OpenAtom OpenHarmony(以下简称"OpenHarmony")采用多内核架构,支持Linux内核的标准系统.LiteOS-A的小型系统.LiteOS-M的 ...

  4. C#实现的下拉多选框,下拉多选树,多级节点

    今天给大家上个硬货,下拉多选框,同时也是下拉多选树,支持父节点跟子节点!该控件是基于Telerik控件封装实现的,所以大家在使用的过程中需要引用Telerik.WinControls.dll.Tele ...

  5. 动态库 DLL 封装三:对dll二次封装,并将回调函数放出去,供别人调用

    背景: 我需要对一个dll进行二次封装,其中有一个接口,里面的参数需要传回调函数. 需求: 这个回调函数,我需要开放出去,让别人调用我的dll时,自己写这个回调函数 示例: // 回调原型 VOID ...

  6. locust的 -T,--tags使用

    官网的TAG配置说明:-T [TAG [TAG ...]], --tags [TAG [TAG ...]]List of tags to include in the test, so only ta ...

  7. ES6中Module以及使用场景

    一.介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口(即其他 ...

  8. 在RockyLinux 9.2环境中编译CockroachDB 23.1

    目的 CockroachDB自 23.1开始,编译模式逐步放弃了Makefile,改用Bazel构建.实际上在23.1代码执行make buildshort 能够成功,但make build应该就会因 ...

  9. portainer安装,配置,使用

    Portainer安装 Portainer是Docker容器管理可视化界面,主要是可以通过可视化界面创建,管理Dockert容器,并且支持多个节点管理(免费版支持五个节点). Portainer官网地 ...

  10. 谈谈PolarDB-X在读写分离场景的实践

    简介: 针对写少读多的业务可以考虑通过添加数据库节点来使其达到提升性能的目的,但添加节点,往往涉及到数据的搬迁,扩容周期比较长,很难应对徒增的业务流量,这个时候可以考虑采用读写分离的方式,将读写流量做 ...