关于会话标识的思考

会话管理的key专题

一个会话可以理解为多个网元实体处理的一个共同的资源,这种资源通常是用户端和服务端之间创建的关联。通过这种关联,Client/Server两端就可以互相发送数据,就同一资源进行处理。

在会话建立的过程中,可能有多个网络模块参与,且一个网络模块不仅服务于一个会话。这种多对多的关系如果处理不当,会导致“数据不通,记错费用,串号(对于通信领域)” 等严重的问题,因此如何合理的标识一个会话资源非常重要。

会话标识通常和消息路由有一定关联,我们可以使用Hash或者掩码算法,从中提取出路由的信息,因此路由也纳入本文的讨论范围。

会话标识通常也和数据存储有关,我们可以选择合适的会话标识,当做关系型数据库的主键,也可当做数据库的索引,因此数据库也在本文讨论范围内。

现说明下文章的用词:

ContextId, SessionId指会话的标识。

PrimaryKey, Index指数据库里的键和索引。

TunnelId, RefValue指通信的端点标识,参考点标识。

通信、资源、key基本概念

通信是分层的

最经典的就是网络分层的OSI模型。

无论是系统内部还是系统外部的通信方式都是有层级的。分层能够帮我们聚焦于一类问题,统一术语,统一范围,并能屏蔽掉下一层的细节。

key的唯一性是有范围的

key只需要在一定范围内唯一即可。就如每一栋楼都可以有1层。

比如在一栋楼范围内找另一户人,只需要知道几层第几户。而在小区范围内找另一户人,则还需要知道楼栋号。

当我们明确通信的对端在 某一范围 内,那么最好就用那个范围内的唯一标识,不需要过多的扩展,额外的信息只会带来困扰。

pic1

资源编号的分配者应该是谁

两个平级的资源自然不能给自己分资源编号,因为他们很有可能分重了,应该交由他们的上级来分配。

同一资源的标识方式可能有多种

一种标识方式,对应着一种通信方式、一种路由方式。一个模块可能与周边多个模块通信,因此同一资源就会有多种标识方式。

比如ModA模块可以通过API_AB协议栈和ModB模块通信,可以通过API_AC协议栈和ModC模块通信,那么ModA的一个会话就会同时拥有:

  • AB接口上的标识ContextId_AB
  • AC接口上的标识ContextId_AC

同一资源的不同标识的矛盾

正如上一个话题所说,如果标识的对应关系发生了错乱,则会导致通信的两端无所适从。比如A-B通信时,BAPI_AB中携带了ContextId_AC的值,但是所带的值和A保存的值不一致,那就会导致A的困扰。

实际工作中,难以避免在多个模块间同步这些信息时发生丢失,造成标识对不上的困境。

在极力保证通信可靠性的同时,我们也应该思考:如果真正发生了不一致,如何处理是最合理的。

可以采取的方案有:

  • 信赖于对端:从而修改自身的资源标识的对应关系。
  • 信赖于自己:从而拒绝对端的请求。
  • 都不信赖:删除资源,等待重新建立。
  • 定期进行资源核查。

物理资源与逻辑资源

逻辑资源可以理解为一个处理者,物理资源可以理解为他所依赖的计算资源,他们在通信中处于不同的层级。

在设计资源的标识时,一定要想好什么是会变的(一定不要依赖于可能会改变,或者可能未来会改变的标识),什么是一定不变的,两个通信的单元是处于什么层级,针对什么资源达成的共识。

会话标识 in 核心网控制面协议栈

SessionId的设计与两个网络模块的通信方式关系很大,因此首先要了解两个通信实体的协议栈是如何规定的。

GUL的移动管理、会话管理网络实体依赖于GTP协议栈。

5G则依赖于HTTP协议栈。

2、3、4G的隧道

协议栈为 [GTP(应用层) - UDP(传输层) - IP(网络层) - L2 - L1]

在2\3\4G中对一个会话的另一种说法是一条隧道,从29274协议中能看出端倪。Create Session Request被归类为了Tunnel Management

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUfknTg1-1589017078775)(https://code.huawei.com/q00452800/BlogsRepo/uploads/4d57b15c0de4b4b673efb2c034d92e49/image.png)]

那么隧道是什么?

GPRS隧道协议(英语:GPRS Tunnelling Protocol,简称:GTP)是一组基于IP的通信协议,用于在GSM、UMTS和LTE网络中承载GPRS(通用分组无线业务,英语:General Packet Radio Service)。
GTP协议目前有3个版本:version 2使用于LTE核心网;version 1使用于GSM和UMTS网络,也应用于LTE网络中以传输用户面数据;version 0是早期版本,被1999年标准化的version 1替代。

From 维基百科

隧道是GTP协议栈中关键的一个概念,简单理解就是两点一线构成一个会话,其中两点即TEID,全称:Tunnel endpoint identifier。他由通信的两端分配,并携带给对端,在后续的交互中,会在GTP消息头中携带这一TEID,标识通信对端的一个会话,属于应用层的概念。

在这里插入图片描述

5g的reference point

5g的核心网网元间采用HTTP协议,采用基于服务的架构(SBA)。

相比于4g,在通信理念上有较大的变化,基于服务的架构也是IT领域后端常见的架构,更详细的可参考文章 5G核心网的颠覆:SBA架构

5gReference

简单来说,一个网元称为一个网络服务(Network Function),服务通过生产者(Producer)与消费者(Consumer)之间的消息交互来达成。交互模式简化为两种:Request-Response、Subscribe-Notify,NF之间按照服务化接口交互。

这种总线式的模型淡化了通信两端的概念,更偏向于一个NF能够提供什么服务,像是建立于HTTP层以上的一种RPC方式。习惯称一个服务接口为一个referece point

OSI的五层模型为 [HTTP(应用层) - TCP(传输层) - IP(网络层) - L2 - L1]

在HTTP协议的理念中,采用URI作为资源定位的key

URL是一种URI,它标识一个互联网资源。
大部分URL遵循一种标准格式,该格式包含三个部分:

  • 第一部分:方案scheme,方案告知Web客户端怎样访问资源
  • 第二部分:服务器的位置<host>:<port>,告知Web客户端资源位于何处。
  • 第三部分:指定服务器上某个资源/<path>,说明了请求的是服务器上的哪个特定的资源。

TCP/IP层的通信key在URL的第二部分,host+port决定了唯一一个TCP连接,在一个TCP/IP的连接上,可能建立多个用户的会话资源,如何区分不同的会话资源呢?

答案自然就在第三部分,对于一个5G的会话来说,它的唯一资源标识 SmContextRef 就藏于此处。首次创建时,被请求方SMF应当分配SmContextRef,并且要保证它的唯一性。

在这里插入图片描述

会话标识 in 终端&&核心网

手机是日常生活中最常见的终端,手机最常见的身份标识就是IMSI(5g为SUPI),它存在于SIM卡中。一个终端可以通过不同的会话连接到多个数据网络上,不同的会话使用不同的Id标识,对于2\3\4G,是Nsapi/Lbi,对于5g是PduSessionId

Id的分配者可能是终端或者网络侧。无论分配者是谁,最终终端和网络侧均需要就一个会话的标识达成一致。

一般情况下,终端会通过IMSI+一个数字,来标识一个会话。特殊情况下,终端可能会通过wifi等其他方式接入网络,不过需要资源标识的原则是不变的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值