我正在尝试在两个GSM设备之间实现SMS传输。我搜索并阅读了很多标准和文章,但找不到以下问题的答案。有谁知道SMSC如何知道发送者的号码并将其插入SMS-Delivery数据包堆栈的TP-OA字段中?
实际上,我不确定这是您需要的还是这会对您有所帮助,但无论如何..
在GSM网络中,有很多节点,每个节点都执行其负责的某些事情。它们通过消息相互通信,其中包含处理所需操作所需的某些信息:建立呼叫,发送SMS,执行更新位置等。
因此,有关发件人号码的信息从另一个称为VLR/MSC的节点进入SMSC,并附有一条消息,告诉它"哟,一个人想向另一个人发送短信。所以这是关于这些家伙的消息和信息。请转发"。
以下是用户 A向用户B发送短信的场景:
- 用户 A向VLR/MSC发送短信以及有关其目的地的信息
- 然后,VLR/MSC调用MAP消息ForwardSM(转发短消息),通过网络将接收到的数据进一步发送到名为SMS IMSC的节点。
短信IMSC是网络与SMSC之间扮演接口角色的节点
SMS IMSC在收到转发SM消息时向SMSC发送TPDU(传输协议数据单元)消息,其中包含发送的SMS和路由信息的文本
在此SMSC向用户A发送回复后,收到短信的结果。如果成功,则SMSC开始通过网络将此短信路由到用户 B
因此,您要查找的消息是来自第 3 点的TPDU消息。根据TPDU类型,此消息的类型为SMS 提交。
编辑:
身份验证是单独的操作,当用户开始其活动(例如打开手机)或漫游到另一个VLR/MSC正在服务的另一个区域时发生。无论如何,VLR/MSC将此用户视为该领域的新手。如果您知道什么是VLR/MSC,请跳过此部分:
HLR是一个节点,用于存储有关运营商网络中每个订阅者的所有信息。所以基本上它是一个数据库,其中包含整个运营商网络中每个用户的所有信息。
网络覆盖了巨大的地理区域,所以它被划分为称为细胞的较小区域。VLR/MSC是一个类似于HLR的节点(它也存储用户的数据)。但它负责某个单元,因此它存储当前在该特定单元中操作的用户的数据。因此,当新用户来到其区域时,VLR/MSC会从HLR下载他的数据。当用户离开该区域时,VLR/MSC会删除他的数据。
如果某个节点需要获取用户的数据,它不会"要求">HLR,而是会"询问">VLR/MSC用户当前处于活动状态的区域。
因此,当VLR/MSC看到新订户来到其区域时,在从HLR下载其数据之前,它会触发身份验证过程以检查此用户是否有效,并且其他人是否假装是该用户:
- VLR/MSC将发送身份验证信息MAP 消息与IMSI(由其 SIM 卡唯一标识的移动用户号码)一起发送到HLR
- HLR检查给定的IMSI并验证订阅者。如果订户存在并且他没有问题,则HLR将IMSI发送到AUC(身份验证中心)
- 在IMSI接收时,AUC生成一个包含SRES、RAND和Kc值的三元组(用户识别所需的一些加密密钥),并将此数据发送回HLR
- HLR将此数据转发回触发身份验证过程的VLR/MSC
- VLR/MSC在接收SRES、RAND 和Kc后将收到的RAND发送给移动用户
- 移动用户收到RAND后,他使用给定的RAND和Ki(写入用户 SIM 卡中的某个值)计算SRES,并将计算出的SRES发送回VLR/MSC
- 在最后一步中,VLR/MSC将AUC生成的SRES与用户生成的SRES进行比较。如果它们匹配,则成功识别用户,VLR/MSC从HLR获取用户的数据并完成身份验证过程。
VLR/MSC从 HLR 下载数据后,需要此订阅者数据的所有其他节点都将从VLR/MSC而不是HLR获取数据。在此之后,身份验证过程不会在每次订阅者想要做某事(拨打电话,发送短信等)时开始。
因此,当用户 A 向用户B发送短信时,有关用户 A 的数据(例如他的号码)已经存储在 VLR/MSC 中,并且它与发送的短信用户 A一起从VLR/MSC到达SMSC。