这是
全栈开发循环中有关数据秘密生命的第三篇文章。 它专用于长而困难的SMS路由:拨号,保存,发送,接收和显示。 我将添加一些历史记录和上下文以稀释协议列表。 尽管本文是非常技术性的,但很容易理解。
周期的前两个部分:
所以让我们开始吧...
我的腿不由自主地颤动了一下:是电话还是看起来呢? -粗略地瞥了一眼,发现蓝灯闪烁。 我妻子说:“我爱你”。 我立即下楼祝她晚安,因为我知道一条消息和一条
消息之间的区别。 这有点像加密或隐写术:任何人都可以看到文本,但是只有我可以解码隐藏的数据。
我的翻译只是一连串意外事件中的一个链接,这些事件对于在不到五秒钟的时间内发送和解密消息(“下来说晚安”)至大约10米的距离是必需的。
显然,该消息起源于我妻子的大脑某处,并转变为手指运动,但是这种信号传输是另一篇文章的主题。 我们的对话从她的拇指碰到半透明屏幕的那一刻开始,到光线照射到我的视网膜上时结束。
透过窥镜
每次触摸屏幕,少量电荷就会流到手中。 由于电流容易流过人体,因此手机上的传感器会记录手指触摸屏幕的位置的电压变化。 在这种情况下,屏幕的其余部分会出现随机的电压波动,因此该算法将确定最大电压波动,并假定此人想要用手指按下该位置。
图 0.电容式触摸传感器因此,她单击屏幕,一次输入一个字母。
I--love--you.
她不使用滑动(但是由于某些原因,她的打印速度仍然比我快)。 手机会可靠地记录每次按下的坐标(x,y)并检查屏幕上每个键的坐标。 这比您想象的要难。 有时手指会滑开,但手机会以某种方式知道这不是手势,而只是模糊的点击。
在设备金属内胆深处,该算法检查每次电压变化所覆盖的像素数量是否超过一定数量,这称为
触摸倾斜 。 如果面积很小,电话将记录一次按键,而不是滑动。
图 1.用于检测触摸倾斜的Android代码。 请注意,开发人员知道我妻子的性别她结束了该消息,允许使用160个字符中的10个字符。
160个字符是经过仔细验证的数字。 根据传说,1984年,德国电话工程师Friedhelm Hillebrand在打字机上坐下来,写下了随他想写的任意多的句子。 然后,他的小组检查了明信片和电传消息-发现其中大多数不超过160个字符。 “尤里卡!” -显然,他们用德语大喊大叫,然后在接下来的三到几十年中固定了短信中的字符数限制。
符号限制和图例
传说很少讲述整个故事,短信也不例外。 希勒布兰德和他的团队希望通过电话已经用于与基站交换信息的附加通道传输消息。
SS7信令系统是手机用来与基站保持持续联系的一组协议。 他们需要固定的连接才能接收呼叫并转移其位置,检查语音邮件等。1980年开发协议时,他们引入了279字节信息的硬限制。 如果Hillebrand希望使用SS7协议接收短信,则他应该适合此限制。
通常279个字节等于279个字符。 一个字节中有8位,在通常的编码中,一个字符对应一个字节。
一
0100 0001
乙
0100 0010
用
0100 0011
等等。
不幸的是,要使用SS7协议发送消息,您不能简单地从一个电话向另一个电话发送2232个零和单位和带有无线电信号的单位(279字节的8位)。 该消息必须包括发送方和接收方的号码,以及基站的服务消息“嘿,此消息,不是呼叫,请不要发送呼叫信号!”
到Hillebrand及其同事设法将所有必要的上下文位塞入279字节信号时,他们只剩下140字节或1120位。
但是,如果只用7位编码一个字符怎么办? 然后,您可以将160(1120/7 = 160)个字符压缩到每个消息中,但是这样的减少需要牺牲:减少可能的字符。
8位编码允许256个可能的字符:一个位置是小写字母“ a”,一个位置是大写字母“ A”,它在空格处的位置以及符号“ @”,换行符等,最多256个。要将字母范围缩小到7位,必须删除一些符号:符号1/2(1/2),度数(°),pi(π)等等。 但是,假设人们从不在文本中使用这些字符(当然,这是一个错误的假设),Gillebrand和他的同事设法将160个字符放入140个字节中。 反过来,此卷恰好适合SS7信号的279个字节:恰好是先前定义为理想消息长度的字符数。

图 2. GSM-7字符集然后妻子输入“我爱你”,然后电话将字母转换为7位编码方案GSM-7。
“ I”(表格中第四列与第九行的交集):
49
空格(第二列与零行的交集):
20
“ L” =
6C
“ O” =
6F
依次类推。
通常,她的消息变成以下顺序:
49 20 6C 6F 76 65 20 79 6F 75
(共10个字节)。 每个由两个字符组成的代码(称为十六进制代码)代表一个八位的片段,听起来像是“我爱你”。
但实际上,该消息并非如此存储在电话中。 它应该将8位文本转换为7位代码。
转换的结果是
,消息开始更改为:
49 10 FB 6D 2F 83 F2 EF 3A
(9个字节)在她的手机中。
当妻子最终完成留言(仅几秒钟)时,她单击“发送”-许多小天使收到编码后的信息,将他们看不见的翅膀拍打到我的办公室10米处,然后小心地将其转移到我的手机上。 这个过程不是很容易,这就是为什么我的手机在发货时会有些振动的原因。
所谓的“通信工程师”会告诉您一个不同的故事,为了完整起见,我将重述一下,但是如果我是您,我不会太信任这些人。
SIM卡发送
工程师会说,当手机通过“发送”按钮检测到屏幕上坐标中与图形元素坐标一致的电压变化时,它将向SIM卡发送已编码的消息,并在传输期间添加各种上下文数据。 当邮件到达我妻子的SIM卡时,已经不是140个字节,而是176个字节(文本+上下文)。
如下所示,另外36个字节用于编码其他信息。
图 3.在这里,字节称为八位字节(8位)。 计数全部得到174个八位位组(10 +1 + 1 +1 12 +1 +1 + 7 +1 + 140)。 其余两个字节保留给记帐SIM卡前十个字节保留给SMS中心(SMSC)的电话号码(SCA),该中心负责接收,存储,转发和传递文本消息。 实际上,这是一个开关:妻子的电话向本地手机发射塔发送信号,本地手机发射塔向SMSC发送短信。 SMS中心(在我们的情况下是由AT&T控制)将文本发送到距离我的手机最近的基站。 当我和妻子坐在三个房间时,消息被返回到同一基站,然后又返回到我的电话。
图 4.蜂窝短信网络下一个字节(PDU类型)编码有关电话应如何解释消息的基本信息:是否成功发送了消息,是否需要传递消息以及(重要)消息是单个文本还是相关消息链的一部分。
PDU类型之后的字节是消息引用(MR)。 实际上,此数字从1到255被用作短期ID,以便电话和话务员识别该消息。 来自妻子的消息被设置为数字0,因为她的电话具有自己的消息识别系统,与该特定文件无关。
接下来的十二个字节保留给收件人的电话号码,称为目标地址(DA)。 除了7位文本编码(可将160个字母压缩为140个字符)外,电话号码编码是此SMS中最愚蠢和令人困惑的事情。 这称为反向半字节表示法,并将每个数字转换为半字节,即半字节并交换它们(您了解所有内容吗?半字节是半字节,哈哈哈哈哈,但没人笑,是工程师)。
我在妻子手机中的电话1-352-537-8376注册为:
3125358773f6
1-3变成
31
52变成
25
53变成
35
7-8变成
87
37变成
73
最后6个变成...
f6
这六个到底干了什么? 嗯,这意味着数字的结尾,但是出于某种可怕的原因(再次是反向符号),它是最后一位之前的一个字符。
这就像
“小猪拉丁”,仅用于数字。
, . , .
但是我不是在开玩笑。
[UPD:Sean Gies
指出 ,半字节写回是不可避免的伪像,它表示从最小到最旧的(小尾数)8位片段的4位数字。 这不会否定以上描述,但会为理解并做出更合理决定的人们增加一些背景信息。
现在,协议标识符(PID)字节基本上已经被浪费了。 它需要大约40个可能的值,并告诉提供者如何发送消息。 价值
22
表示妻子将“我爱你”发送至传真,并且该值
24
表示她以某种方式将其发送到语音线路。 由于此消息以短信形式发送到手机,因此PID设置为
0
(就像现代世界中发送的其他任何文本一样)。
图 5.可能的PID值下一个字节是数据编码方案(DCS,
请参阅文档 ),它告诉操作员和接收者的电话使用了哪种字符编码方案。 我的妻子将文本发送到GSM-7,但是很难想象文本可以用西里尔字母,象形文字或复杂的数学方程式键入(嗯,也许不容易想象,但是每个人都有做梦的权利,对吧?)。
在妻子的文本中,DCS字节设置为
0
对应于7位字母,但该值可以更改为8位或16位字母,尽管这将为字符留出更少的空间。 顺便说一句,这就是您的表情符号减少可用字符数的原因。
DCS字节中仍然有一个小标志,告诉电话发送后消息是否应自毁,就像电影《不可能的任务》中那样,因此非常酷。
有效期(VP)占用七个字节,使我们有机会了解SMS转发系统实际工作方式的另一个方面。 再看一下顶部的图4。 没关系,我等。
因此,当妻子最终单击“发送”按钮时,文本将发送到SMS中心(SMSC),然后由SMS中心向我发送消息。 我坐在二楼,手机已经打开,所以几秒钟后我会收到一条消息,但是如果手机关闭了怎么办? 当然,那么他不能接受消息,因此SMSC必须对文本进行处理。
如果SMSC找不到我的电话,那么来自我妻子的消息将仅在系统中跳转直到我的电话连接-然后SMS中心将立即发送文本。 我想像一下,SMSC如何不断检查网络上的每部电话,以检查它是否是我的电话:一只小狗在门口等着主人的小狗如何嗅到每位路人:这是我个人的味道吗? 不行 也许
这是我男人
的味道? 不行 这是我男人的味道吗? DADAPRIGUATURE !!!
有效期(VP)字节告诉系统小狗在无聊和找到新家之前要等待多长时间。 这要么是时间戳,要么是间隙,它的本质是:“如果在接下来的几天内找不到收件人的电话,那就不用担心发送消息了。” 默认情况下,SMS的有效期为10,080分钟,因此,如果电话在7天内未连接到网络,它将永远不会收到此SMS。
由于SMS经常有很多空白空间,因此需要使用一些位来确保电话和操作员确切知道未使用哪些字节。 妻子的SIM卡正在等待176字节的短信,但她写了一条很短的消息,因此,如果SIM卡仅收到45字节,则可能会感到困惑并提示某种故障。 用户数据长度字节(UDL)解决了此问题:它准确指示文本消息中有多少个字节。
在“我爱你”的情况下,UDL将指示该消息包含9个字节。 您可能期望该值为10个字节,十个字符中的每个字符一个字节:
I-spacebar-love-spacebar-you
但是由于每个字符都由7位而不是8位(完整字节)组成,因此您可以在翻译时丢弃多余的字节:7位* 10个字符= 70位,除以8(字节中的位数)= 8.75字节,四舍五入最多9个字节。
我们来到SMS的最后一部分:这是消息本身或UD(用户数据)。 一条消息最多可以占用140个字节,尽管正如我刚才提到的那样,“爱你”将占用9个字节。令人惊讶的是,这9个字节中包含了多少字节:不仅是一条消息(我妻子对我的所谓爱,已经很难压缩为零了)和单位),还有含义本身(您需要下楼,祝她晚安)。 这些字节是:
49 10 FB 6D 2F 83 F2 EF 3A
通常,此消息保存在我妻子的SIM卡中:
SCA [1-10] -PDU [1] -MR [1] -DA [1-12] -DCS [1] -VP [0、1或7] -UDL [1] -UD [0-140]
00 - 11 - 00 - 07 31 25 35 87 73 F6 - ?? 00 ?? - ?? - 09 - 49 10 FB 6D 2F 83 F2 EF 3A
(注意:要获得完整的消息,您需要多挖一点。A,由于未显示字符,问号,因此在此处仅可见消息的
一部分 )
空气中的波浪
现在,SMS应该以某种方式开始其从SIM卡到最近基站的艰难旅程。 为此,妻子的电话必须将字符串从176字节转换为279字节以用于SS7信令协议,将这些数字字节转换为模拟无线电信号,然后以800至2000 MHz之间的频率将信号发送到空中。 这意味着在波峰之间的距离为15到37厘米。
图 6.波长为了有效地发送和接收信号,天线必须至少是波长的一半。 如果蜂窝通信的波长是15到37厘米,则天线的尺寸应为7-19厘米左右,现在停下来思考一下手机的平均高度,以及为什么手机永远不会减小。
经过某种数字体操的解释,这需要花费太多时间,我妻子的电话突然以四面八方的光速拍摄了一个279字节的信息包,上面写着“我爱你”,最终消失了约50公里,并逐渐变成无线电噪声。
在此之前很久,信号就到达了AT&T HSPA ID199694204 LAC21767基站。 这个基站收发器(BTS)距我最喜欢的Hazelwood La Gourmandine面包店约有五个街区,尽管我使用OpenSignal Android应用找到了它的坐标,但天线却被撬开了。
这里最令人惊讶的是,BTS通常会在考虑其他所有因素的情况下接收此信号。 我的妻子不仅在电磁频谱范围的千分之一中发送“爱你”,而且此时半径50公里以内的数以万计的其他人正在打电话或写消息。 此外,许多广播和电视信号正在争夺我们对空中的关注,以及在不同方向反射的可见光,这只是电磁波的一小部分,似乎应该干扰BTS。
正如理查德·费曼(Richard Feynman)在1983年雄辩地指出的那样,一座细胞塔就像是一只小型的甲虫,躺在池边的水中:只有通过波浪的高度和方向,才可以确定游泳的人和地点。
费曼讨论浪潮部分由于信号的复杂干扰,收发器的每个基站通常不能同时处理200个以上的活动用户(语音或数据)。 因此,“ Love You”会在距离此处约半英里处对本地基站执行ping操作,然后在各个方向尖叫到空白处,直到它消失为一般的噪音为止。
换向
在所有情况下,我都很幸运。 如果我和妻子分别由不同的移动运营商服务或在不同的城市服务,则她与她沟通的路径将变得更长。
277字节的SS7消息到达面包店旁边的本地BTS。 它从那里进入基站控制器(BSC),它不仅是我们的大脑,也是其他几个本地天线的大脑。 BSC将文本传输到匹兹堡AT&T移动交换中心(MSC),后者依靠文本消息SCA(记住每个SMS中嵌入的服务中心地址吗?在您需要的地方吗)在相应的SMS中心(SMSC)中接收消息。
使用图7中的图表更容易理解这种胡言乱语。 我只是描述了步骤1和3。如果妻子与另一个话务员在一起,我们将继续执行步骤4-7,因为这是移动话务员互相交谈的地方。 SMS必须从SMSC到全球交换机,然后可能在世界范围内跳来跳去,找到通往我手机的途径。
图 7. GSM路由但是她也坐在AT&T上,我们的电话连接到同一单元,因此,在第三步之后,只需部署279字节的爱包,并通过同一SMS中心,同一基站将其返回,但现在返回我的电话她。 立即行驶数十公里。
发送到模拟
Bzzzzz。 口袋震动了。 该通知清楚地表明,该SMS到达了nano-SIM卡,这是一个小手指般小的芯片。 像比尔博·巴金斯(Bilbo Baggins)或其他出色的冒险家一样,往返的方式也有所改变。
图 8.收到的消息与发送的消息不同(图3)图8显示了收到的消息“我爱你”的结构。 比较图3和图8,我们看到了一些差异。 SCA(SMS中心号码),PDU(一些机械整理),PID(“从电话到电话”,而不是“电话到传真”),DCS(编码方案),UDL(消息长度)和UD(自身)消息)保持不变,但缺少VP(有效期),MR(消息识别号码)和DA(我的电话号码)。
相反,电话上出现了两个新的信息块:OA(妻子的原始电话号码)和SCTS(SMS中心时间戳记,即妻子发送消息的时间)。
我妻子的电话号码以相同的烦人的反向符号(例如诵读困难,仅在计算机上)存储,我的电话号码存储在她的手机中,时间戳的格式与她手机上存储的到期日期相同。这两个替换是完全合乎逻辑的。她的电话应该在特定时间在特定地址与我联系,现在我需要知道谁发送了消息以及何时发送消息。如果没有寄信人地址,我将无法确切地了解谁发送了此消息,因此其解释可能会发生很大变化。屏幕亮灯
当任何计算机将字节流转换为特定颜色像素的一系列坐标(x,y)时,手机会收到显示命令,49 10 FB 6D 2F 83 F2 EF 3A
以便我在屏幕上以黑白发光点看到文本“ I Love You”。这是一个有趣的过程,但是对于智能手机而言并不是唯一的过程,因此您必须将目光投向其他地方。我们专注于这些说明如何变成亮点。三星的友好营销人员将我的屏幕称为Super AMOLED(有源矩阵有机发光二极管)-一种有机LED上的有源矩阵,它在某种程度上是多余的,并不是特别有用。屏幕的83平方厘米中的每一个上都装有50,000个小像素。为了适合这样的数量,每个像素应大约为45微米宽(微米):比人的头发还要细。在手掌大小的区域中有四百万个轻元素。但是您已经知道屏幕的工作方式。您知道,世界上的每个地方,例如基督教上帝或火枪手(Artartnan负)总是“三合一”。红色,绿色和蓝色形成一个像素的白光。如果更改每个通道的亮度,则可以获得任何RGB颜色。由于4×3 = 12,所以有1200万个微小的光源,无辜地在我的黑镜后面打do睡,等待我按下电源按钮阅读妻子的信息。
图9.三星OLED显示器的子像素阵列缩写表示,每个像素都是有机LED。这是一个简单的电动三明治难以理解的专业术语:
图。 10.电夹层不必研究每一层的目的,重要的是要知道阴极(带负电的板)位于一层有机分子(只有一些带有碳的分子)的下面,并被顶部的阳极(带正电的板)覆盖。当手机要打开屏幕时,它将电子从阴极发送到阳极。中间的分子接受电荷并开始发出可见光-光子,穿过透明阳极,进入我的睁开眼睛的屏幕。由于每个像素都是三个亮点(红色,绿色和蓝色),因此每个像素实际上有三个三明治。它们基本上是相同的,除了有机分子:用于蓝光的聚对亚苯基,用于红色的聚噻吩和用于绿色的聚对亚苯基-亚乙烯基。由于它们各自略有不同,因此在通过电流时它们会发出不同的颜色。(有趣的事实:由于称为激子极化子an灭的过程,蓝色亚像素的燃烧速度更快,这听起来真的很刺激,不是吗?)所有四百万个像素都位于索引矩阵上。索引在计算机上的工作方式与书中的目录几乎相同:当电话希望特定像素发出特定颜色时,它会在索引中搜索该像素,然后向找到的地址发送信号。有了光,光就变成了。(另一个有趣的事实:现在您知道“有机LED上的有源矩阵”对AMOLED的含义,尽管您没有问过)。手机的操作系统会解释妻子的短信,确定每个字母的形状,然后将这些数字与索引矩阵进行比较。她向Super AMOLED屏幕发送正确的电脉冲,以显示这三个单词,这些单词到目前为止已经传播并击败了他们路径上的所有敌人。在这里,我的眼睛从未看到过明亮的LED字母,这是很奇怪的:文本以黑白显示。手机会通过负向空间产生文本错觉,用白色填充屏幕,将所有红色,绿色和蓝色像素设置为最大亮度,然后关闭字母应该位于的位置。它的复杂性非常普通。
图11.消极空间电话点亮了我妻子发来的短信之外的所有东西,并允许我在灯之间阅读,电话简短地奠定了现代信息时代的基础:交流很容易。速度和明显的简单性掩盖了许多中介。这些不仅是技术中介。如果我不按时支付电话账单,或者不是给在幕后为金融系统服务的一小群工人,我妻子的信息就不会到达我。技术人员保持手机信号塔正常运行,并通过一部分由50个州的亿万美国人收取的联邦税补贴的道路网络来达到这些目的。由于仍然通过邮件进行许多事务,因此如果明天邮件系统崩溃,电话服务也将受到损害。我们两部手机的详细信息都是由南美和亚洲工厂的精疲力尽的工人收集的,而精疲力尽的程序员在硅谷租用了昂贵的房间,他们编写的代码保证了我们手机的持续通信。所有这些都隐藏在10个字母中。坦白讲,该文本的含义远不止其内容。我的大脑下意识地分析了与妻子沟通以解密电话上的消息的岁月,但是在她和我之间仍然存在着整个社会技术调解的灌木丛-一群人,事件和细节永远无法解开。后果
在这里,我在周日傍晚在办公室里。妻子在下面的卧室里写道:“我爱你。”几秒钟后,一条短信传到了我十米外的手机上。我理解这意味着什么:是时候祝她晚安,并可能完成本文。我正在写最后一句话,现在更多地了解公里,信号,数十年的历史和人类汗水的复杂层次,这是我所需要的,这样我的妻子才不会向我尖叫那该死的该休息了。