分类:IT

科技日报:除了那些核心技术,我们还缺什么?

2018 年 6 月 21 日下午, “是什么卡了我们的脖子 ·亟待攻克的核心技术” 科学传播沙龙在中国科技会堂召开。科技日报总编辑刘亚东做了主题演讲,在详细介绍《科技日报》“亟待攻克的核心技术”系列报道的出台背景和意义之外,还详细说明了在那些核心技术之外,我们还缺的到底是什么?全文如下。

————————————

各位嘉宾、各位朋友、各位同事,下午好!

2018 年 4 月 16 日,中兴事件的新闻在网上爆棚。三天以后,4 月 19 日,《科技日报》一版头条强势推出新专栏“亟待攻克的核心技术”,开篇以“是什么卡了我们的脖子”为引题,报道了中国在高端芯片制造所需要的顶级光刻机方面的落后状况。

我在新媒体上推介了这个栏目和这篇报道,很多朋友和新闻同行都评论说,《科技日报》这组报道策划得很及时。我很“谦虚”地回复人家:不是很及时,是很超前!

事实上,今年三月“两会”一过,《科技日报》就开始策划和组织这组报道,当时的舆论氛围还是“厉害了我的国”。《科技日报》认为,公众有必要了解更多的东西,尤其应该知道,“我的国”也有不“厉害”的地方,甚至还受制于人!

由于想把开栏篇打造成“样板间”,我们毙了好几篇稿子,有些稿子还在反复修改和打磨,以至于这个栏目迟迟没有推出,直到中兴事件爆发。到今天为止,这个栏目已经推出 29 期。换句话说,我们已经对各个行业的29项卡脖子技术做了报道。社会反响之强烈超出了我们的预期。

作为《科技日报》总编辑,我感到很自豪。因为《科技日报》没有人云亦云,而是以个性化声音和党中央保持高度一致,正确引导了社会舆论,体现了《科技日报》的使命和担当。

改革开放 40 年来,中国的科学技术取得了长足进步,这些举世瞩目的成绩当然值得肯定,但是我们更应该看到差距和不足。我们今天一些喜大普奔的科技成就,比如大飞机,人家半个多世纪前就有了。我们今天一些正在苦苦攻关的重大项目,比如载人登月,美国 1969 年就已大功告成,明年整整 50 年。这些都是看得见、摸得着的差距。

中国的科学技术与美国及其他西方发达国家相比有很大差距,这本来是常识,不是问题。可是,国内偏偏有一些人,一会儿说“新四大发明”,一会儿说“全面赶超”、“主体超越”,“中国现在的经济实力、科技实力、综合国力都分别超越美国,成为世界第一”,还算得有整有零,说得有鼻子有眼儿。明明是在别人的地基上盖了房子,非说自己有完全、永久产权。如果只是鼓舞士气也就罢了,可麻烦的是,发出这些论调的人忽悠了领导,忽悠了公众,甚至忽悠了自己,这就成了问题。

上周我访问日本,和日本科技振兴机构(JST)签了一个合作协议。我在 JST 见到了一个人,叫冲村宪树,他是前文部省次官,现任 JST 首席研究员。冲村对中国非常友好。他说中国的经济实力、科技实力很快就可以和美国平起平坐,甚至超越美国,所以日本应该和中国搞好关系。我说,你的结论正确,但前面说得不符合实际。我告诉他,中国要建成现代化强国,还有很漫长的道路要走。冲村不同意我这个说法。由于他不会说英语,我们的交流是通过日语翻译,效率比较低,所以到最后我也没能说服他。

冲村的观点在日本很有代表性。无论左翼还是右翼,他们都是这样看待中国的。我们的舆论无疑对此起了推波助澜的作用。不可否认,这些为国际上的中国威胁论提供了口实。那些把中国建设成就夸大其词的與论,无论出于什么动机,都有百害而无一利,其结果是误国害民。

只有认识到差距,才有可能弥补差距,否则我们的中国梦将永远是中国梦。就像《礼记·中庸》所说,闻过而终礼,知耻而后勇。从这个意义上讲,中兴事件无论最终结果如何,都是一件大好事,好就好在它让更多的国人正视了中美科技实力的巨大差距,惊醒梦中人!

《科技日报》“亟待攻克的核心技术”栏目要长期办下去,因为有太多的卡脖子技术让我们在发展的道路上不能扬眉吐气。那么问题来了,为什么我们有那么多的核心技术亟待攻克?是否有一些共性原因阻碍了我们攻克这些核心技术?我想是的。今天我讲三个问题。

第一,缺乏科学武装

科学和技术是两个完全不同的概念,但它们之间有联系。正是由于缺乏科学的指引,才阻碍了我们的技术发展和进步。

中国自古以来只有技术传统,而没有科学传统。技术发明靠的是经验的积累,或许还有灵机一动;而科学发现则是建立在系统研究和专业训练的基础上。有人说我们有四大发明。我告诉你,四大发明属于技术范畴,它不是在科学理论指导下的技术创新和突破,跟科学没有半毛钱关系。

比如指南针,我们的先人只知道它很有用,迷不了路,找得着家。没有去研究磁场、磁力线,也不懂得导体切割磁力线时会产生电流,更推导不出麦克斯韦方程。比如火药,我们的先人只满足于它能爆炸的事实,只知道一硝二磺三木炭,而没有深入探讨它的化学和物理机理,所以才止步于黑色火药,没能研发出黄色炸药。有人说,我们祖先发明了火药,所以才有了后来工业和军事上用的炸药。这种说法是错误的,黄色炸药和黑色火药没什么关系。

只知其然不知其所以然,不求甚解,这些倾向今天也在严重影响我们的技术发展和进步。离开科学的指引,技术的发展注定不会走得久远。

第二,缺乏工匠精神。

去年中央电视台播了一档节目《大国工匠》,我几乎每集都看了。拍得很好,下了功夫。问题是相对于我们13亿人口,这些大国工匠实在太少了,太稀缺了。

中国的传统文化里是瞧不起匠人的。从我们对很多职业的称谓上就能看出这一点,什么剃头匠,泥瓦匠,小炉匠,很多教师自嘲,管自己叫教书匠……

轻视操作,轻视实践。孟子就说过,劳心者治人,劳力者治于人。6 月 20 日,科技日报头版头条报道了“海洋调查一线难觅学科带头人身影”,讲的是海洋调查的某个航次上,16 名科研人员中有副高以上职称的只有一人。学科带头人都说,学生去了,我就不去了。这种现象在中国很普遍。

不久前我访问德国,在萨克森州首府德累斯顿参观了中德轨道交通联合研发中心的创新工厂。我在工厂里看到,很多人穿着工装在一丝不苟、非常专注地工作。我本来以为他们都是工人,后来一打听,原来都是工程师!我想,正是凭藉这种务实严谨、精益求精的精神,德国人生产出了莱卡相机、奔驰汽车、克虏伯大炮等,创造了“德国制造”的品牌价值。

第三,缺乏持之以恒的情怀。

浮躁和浮夸是中国科技界流行的瘟疫,而且至少已经持续了 20 年。我们很多科技工作者耐不住寂寞,坐不了冷板凳,总想走捷径,弯道超车。

我不喜欢“弯道超车”这个词儿。除非你车里有毒品,警察追你,要不干嘛弯道超车呢?总结别人的经验,吸取别人的教训,少走弯路,这是对的,也是应该做的。但在更多情形下,“弯道超车”是个伪命题,往往成了投机取巧的代名词。弯道超车走直线,就意味着别人走曲线,别人都比你傻,这可能吗?很多实践已经证明,弯道超车行不通。

比如说研发航空发动机,要通过大量实验数据的积累,不断总结、完善、调整、提高,最终才能生产出一款好的产品。要弯道超车的话,我们可以搞到一台别人的不那么先进的航空发动机,照葫芦画瓢,山寨出“八九不离十”的产品。可今后要改进提高,增强性能,你还能做得到吗?

“三跑并存”的提法是对的,但它不是现在的事情。1965 年,我们的科学家就实现了人工合成牛胰岛素,这在当时绝对是世界领先。1964 年中国爆炸了原子弹,1966 年我们有了核导弹,1967 年爆炸了氢弹,1970 年发射了人造地球卫星。半个世纪前,我们就“三跑并存”。所以,不谈比例和构成,“三跑并存”的说法就失去了意义。最近在“三跑并存”后面又加了一句“跟跑为主”,这就实事求是了。

此外,目前在某些关键技术领域,我们与西方发达国家的差距不但没有缩小,反而呈现出扩大的趋势。上个月我看到美国媒体的一篇报道,美国的F135型航空发动机经过改进,其推力竟然达到 22 吨。稍微有一点航空发动机知识的人都知道,这是一个匪夷所思的数字。听了这个消息,大家都很着急,但着急也没有用。我们寄望于从事航空发动机研发的科技工作者能持之以恒,锲而不舍,百折不挠,尽快把高性能国产航空发动机搞出来。

谢谢大家!

————————————

来源:科技日报

windows 10 WSL安装linux子系统报错0x8007019e解决办法

想在虚拟机中捣鼓Linux,直接在Windows中搞Ubuntu,Debian,Kali等(目前不支持CentOS),安装了Windows创意者最新版本1803。但是在win10应用商店中安装遇到报错:

Installing, this may take a few minutes…
Installation Failed!
Error: 0x8007019e
Press any key to continue…
原因:未安装Windows子系统支持
1.win+x,选择Windows PowerShell(管理员)
2.输入:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
3.回车,输入Y,重启!
4.重新打开已经安装的子系统,等几分钟,输入账户和密码,大功告成。

 

原文地址:https://www.cnblogs.com/mhzhou-whyj/p/9113879.html

http://developer.baidu.com/forum/topic/show/263267

王之浮屠

[墙外的世界 请自备工具观看视频]

“遥想山寺古,看倒影金轮,溯光朱户。暝烟带树,有投林鹭宿。凭楼僧语,可异流年,付与朝钟暮鼓。谩凝伫,步长桥,月明归去。”

一座千年的古老佛塔,在绚烂的晚霞之下,默默地伫立在碧波荡漾的西子湖畔,像一位沧桑的老人,慢慢地诉说着一个古老的故事——

公元前907年,一个意气风发的临安人来到了山水秀丽、景色迷人的江南,创立了一个属于自己的国家——吴越。这个人就是吴越国的第一个统治者、雷峰塔建造者的(祖父)钱镠。

钱镠平定了战乱后,以“保境安民”为治国之本,定都杭州,并且三次扩建,发展经济,让杭州成为了当时江南最繁盛的城市。

这位信奉佛教的临安天子还给自己王权的继承人和子孙后代留下了“尊奉中原,永不称帝”的遗训。放弃称霸中原的机会,在一般人眼中是一件非常愚蠢的事情,因为以当时钱镠的兵力,完全可以与刚登上皇位的梁王抗衡,但为了吴越百姓的安危,钱镠放弃了这个绝好的机会。这条看上去十分愚蠢的遗训,却让治下那些无辜的百姓免除了战乱之苦,为杭州,甚至整个吴越,争取到了难能可贵的和平。

别说是在天下老子最大的封建王朝,就算现在,也未必有人蠢到眼睁睁地看着嘴边的美味溜掉。谁不想贵为天子?谁不想号令天下?谁不想当公司的总经理?谁不想一夜暴富?你不想?鬼才信!

如果不是中央台的纪录片,打死你我也不相信世上竟有那么“笨”的人!

钱镠去世十六年后,他的孙子钱俶被拥立为吴越国王,这位年轻的君王依旧延续、尊守着祖父的治国之本和遗训,勤勤恳恳地工作。钱家信奉佛教,在杭州兴建寺庙、殿宇、佛塔,所以杭州又有“东南佛国”的美誉。钱俶为了保护珍贵的佛祖真身舍利免遭战火毁坏,计划修一座千尺十三层的通天佛塔,用来保护舍利,这座佛塔就是雷锋塔。

但就在钱俶满怀信心准备建造佛塔时,大宋赵匡胤的诏书也已经抵达杭州,邀请钱俶一同联手攻打南唐,与此同时,南唐后主李煜也写信劝说钱俶与南唐结盟,抵抗大宋。南唐,地处北宋和吴越之间,一旦南唐被消灭,吴越国将会处在北宋出鞘的宝剑之下。“今日无我,明日岂有君?”,李煜在信中言辞悲切又直指要害,钱俶也深知唇亡齿寒的道理,但如若不肯与北宋联手,那么北宋充满杀气的矛头将会立马指向吴越。为了吴越国的百姓和江山,无奈之下,钱俶亲自率兵,协助北宋攻打南唐。

975年,南唐灭。

钱俶终于明白,赵匡胤要的不是他的臣服,不是他的进贡,而是要他纳土归宋。最后的一丝希望终究还是破灭了,自己最不愿意的事情发生了。钱俶寝食不安,直到有一天,他在祖父的书房里,见到了一幅西湖山水图,图上的一首诗吸引了他:“牙城旧址扩篱藩,留得西湖翠浪翻。有国百年心愿足,祚无千载是名言。”

原来,吴越国创国不久,钱镠要建新宫殿,一位风水先生告诉他,如只在旧址凤凰山上建造宫殿的话,吴越的基业只能维持一百年,但如果填平西湖建造新的宫殿,就可以延续上千年。钱镠拒绝了:这世上本没有千年的王朝,中国历史上最长的王朝周朝,也只延续了八百年,即使有,我也不愿为了千年王朝毁掉美丽的西子湖,吴越国能够延续百年我已知足了。

祖父宽宏的胸襟让钱俶明白:有民才有国,有民才有吴越,有民才有钱家。如果没有百姓,那自然就没有钱家,也没有吴越。

他改变了雷峰塔原来的设计,佛塔只建到五层就停止。

因为就算修再高的佛塔,如果无法让百姓过上和平的生活,也是徒劳。

978年,五层雷峰塔建成。吴越国王钱俶前往开封,纳土归宋。

纳土归宋,不是因为恐惧,不是因为怕死,不是因为懦弱,也不是因为害怕江山社稷不保,而是因为不想让无辜的百姓受战乱之苦。

吴越,一个小小的国家,没有周的长久,没有唐的繁盛,没有明的强大;治理它的君主,虽没有尧舜禹的仁德,没有周武王卓越的才能,也没有唐太宗的公正英明。但,他们都是伟大的,因为他们可以因为百姓而放弃千年的王朝,放弃原属于自己的秀丽的山河社稷,放弃自己的政权。

“有国百年心愿足,祚无千载是名言。”

火球一般的夕阳将天空染成了橘红色,悠扬而沉雄的钟声在波光粼粼、浮光若金的西湖湖面上回荡着,整座雷峰塔都沉浸在这钟声之中。今天我们所看到的雷峰塔已不是千年前钱俶煞费苦心建造的雷锋塔了,历经千年沧桑的古塔已经倒塌了,直到公元2000年,杭州市政府才重建了一座新塔。“长城万里今尚在,安见当年秦始皇”,浪花淘尽英雄,但钱王宽大、无私的胸怀,将如夕阳下的雷峰塔一般闪闪发光,如高耸的佛塔一般永远矗立在我们的心中。

静夜,仰望寥廓的星空,那当中任意的一点星辉,可能就是万倍亿倍于地球的一个星体,而无言的夜空,却轻松地将他们统统囊括……面对辽阔的星空,我们那些个人的荣誉得失,分数高低、排名先后……什么都不值一提了。

华为荣耀总裁刘江峰着实文艺

华为荣耀总裁刘江峰正式宣告离职,文艺范儿辞别信一起笔就是引用绿妖与米兰·昆德拉

下面是刘江峰的告别信。全信处处皆见大小作家、哈佛校长名言、电影台词……刘江峰着实文艺呀。请调整好心情观看。

liujiangfeng (1).jpg

当你在浏览器中输入 google.com 并且按下回车之后发生了什么?

这个仓库试图回答一个古老的面试问题:当你在浏览器中输入google.com并且按下回车之后发生了什么?

不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任何细节。

这将是一个协作的过程,所以深入挖掘吧,并且帮助我们一起完善它。仍然有大量的细节等待着你来添加,欢迎向我们发送Pull Requset!

这些内容使用 Creative Commons Zero 协议发布。

目录

按下”g”键

接下来的内容介绍了物理键盘和系统中断的工作原理,但是有一部分内容却没有涉及。当你按下“g”键,浏览器接收到这个消息之后,会触发自动完成机制。浏览器根据自己的算法,以及你是否处于隐私浏览模式,会在浏览器的地址框下方给出输入建议。大部分算法会优先考虑根据你的搜索历史和书签等内容给出建议。一些浏览器,例如 Rockmelt ,甚至会根据你的 Facebook 好友给出建议。你打算输入 “google.com”,因此给出的建议并不匹配。但是输入过程中仍然有大量的代码在后台运行,你的每一次按键都会使得给出的建议更加准确。甚至有可能在你输入之前,浏览器就将 “google.com” 建议给你。

回车键按下

为了从零开始,我们选择键盘上的回车键被按到最低处作为起点。在这个时刻,一个专用于回车键的电流回路被直接地或者通过电容器间接地闭合了,使得少量的电流进入了键盘的逻辑电路系统。这个系统会扫描每个键的状态,对于按键开关的电位弹跳变化进行噪音消除(debounce),并将其转化为键盘码值。在这里,回车的码值是13。键盘控制器在得到码值之后,将其编码,用于之后的传输。现在这个传输过程几乎都是通过通用串行总线(USB)或者蓝牙(Bluetooth)来进行的,以前是通过PS/2或者ADB连接进行。

USB键盘:

  • 键盘的USB元件通过计算机上的USB接口与USB控制器相连接,USB接口中的第一号针为它提供了5V的电压
  • 键码值存储在键盘内部电路一个叫做”endpoint”的寄存器内
  • USB控制器大概每隔10ms便查询一次”endpoint”以得到存储的键码值数据,这个最短时间间隔由键盘提供
  • 键值码值通过USB串行接口引擎被转换成一个或者多个遵循低层USB协议的USB数据包
  • 这些数据包通过D+针或者D-针(中间的两个针),以最高1.5Mb/s的速度从键盘传输至计算机。速度限制是因为人机交互设备总是被声明成”低速设备”(USB 2.0 compliance)
  • 这个串行信号在计算机的USB控制器处被解码,然后被人机交互设备通用键盘驱动进行进一步解释。之后按键的码值被传输到操作系统的硬件抽象层

虚拟键盘(触屏设备):

  • 在现代电容屏上,当用户把手指放在屏幕上时,一小部分电流从传导层的静电域经过手指传导,形成了一个回路,使得屏幕上触控的那一点电压下降,屏幕控制器产生一个中断,报告这次“点击”的坐标
  • 然后移动操作系统通知当前活跃的应用,有一个点击事件发生在它的某个GUI部件上了,现在这个部件是虚拟键盘的按钮
  • 虚拟键盘引发一个软中断,返回给OS一个“按键按下”消息
  • 这个消息又返回来向当前活跃的应用通知一个“按键按下”事件

产生中断[非USB键盘]

键盘在它的中断请求线(IRQ)上发送信号,信号会被中断控制器映射到一个中断向量,实际上就是一个整型数 。CPU使用中断描述符表(IDT)把中断向量映射到对应函数,这些函数被称为中断处理器,它们由操作系统内核提供。当一个中断到达时,CPU根据IDT和中断向量索引到对应的中端处理器,然后操作系统内核出场了。

(Windows)一个 WM_KEYDOWN 消息被发往应用程序

HID把键盘按下的事件传送给 KBDHID.sys 驱动,把HID的信号转换成一个扫描码(Scancode),这里回车的扫描码是 VK_RETURN(0x0d)KBDHID.sys 驱动和 KBDCLASS.sys (键盘类驱动,keyboard class driver)进行交互,这个驱动负责安全地处理所有键盘和小键盘的输入事件。之后它又去调用 Win32K.sys ,在这之前有可能把消息传递给安装的第三方键盘过滤器。这些都是发生在内核模式。

Win32K.sys 通过 GetForegroundWindow() API函数找到当前哪个窗口是活跃的。这个API函数提供了当前浏览器的地址栏的句柄。Windows系统的”message pump”机制调用 SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, lParam) 函数, lParam 是一个用来指示这个按键的更多信息的掩码,这些信息包括按键重复次数(这里是0),实际扫描码(可能依赖于OEM厂商,不过通常不会是 VK_RETURN ),功能键(alt, shift, ctrl)是否被按下(在这里没有),以及一些其他状态。

Windows的 SendMessage API直接将消息添加到特定窗口句柄 hWnd 的消息队列中,之后赋给 hWnd 的主要消息处理函数 WindowProc 将会被调用,用于处理队列中的消息。

当前活跃的句柄 hWnd 实际上是一个edit control控件,这种情况下,WindowProc 有一个用于处理WM_KEYDOWN 消息的处理器,这段代码会查看 SendMessage 传入的第三个参数 wParam ,因为这个参数是 VK_RETURN ,于是它知道用户按下了回车键。

(Mac OS X)一个 KeyDown NSEvent被发往应用程序

中断信号引发了I/O Kit Kext键盘驱动的中断处理事件,驱动把信号翻译成键码值,然后传给OS X的WindowServer 进程。然后, WindowServer 将这个事件通过Mach端口分发给合适的(活跃的,或者正在监听的)应用程序,这个信号会被放到应用程序的消息队列里。队列中的消息可以被拥有足够高权限的线程使用 mach_ipc_dispatch 函数读取到。这个过程通常是由 NSApplication 主事件循环产生并且处理的,通过 NSEventTypeKeyDownNSEvent

(GNU/Linux)Xorg 服务器监听键码值

当使用图形化的 X Server 时,X Server会按照特定的规则把键码值再一次映射,映射成扫描码。当这个映射过程完成之后, X Server 把这个按键字符发送给窗口管理器(DWM,metacity, i3等等),窗口管理器再把字符发送给当前窗口。当前窗口使用有关图形API把文字打印在输入框内。

解析URL

  • 浏览器通过URL能够知道下面的信息:
    • Protocol “http”
      使用HTTP协议
    • Resource “/”
      请求的资源是主页(index)

输入的是URL还是搜索的关键字?

当协议或主机名不合法时,浏览器会将地址栏中输入的文字传给默认的搜索引擎。大部分情况下,在把文字传递给搜索引擎的时候,URL会带有特定的一串字符,用来告诉搜索引擎这次搜索来自这个特定浏览器。

检查HSTS列表···

  • 浏览器检查自带的“预加载HSTS(HTTP严格传输安全)”列表,这个列表里包含了那些请求浏览器只使用HTTPS进行连接的网站
  • 如果网站在这个列表里,浏览器会使用HTTPS而不是HTTP协议,否则,最初的请求会使用HTTP协议发送
  • 注意,一个网站哪怕不在HSTS列表里,也可以要求浏览器对自己使用HSTS政策进行访问。浏览器向网站发出第一个HTTP请求之后,网站会返回浏览器一个响应,请求浏览器只使用HTTPS发送请求。然而,就是这第一个HTTP请求,却可能会使用户收到 downgrade attack 的威胁,这也是为什么现代浏览器都预置了HSTS列表。

转换非ASCII的Unicode字符

  • 浏览器检查输入是否含有不是 a-zA-Z0-9- 或者 . 的字符
  • 这里主机名是 google.com ,所以没有非ASCII的字符,如果有的话,浏览器会对主机名部分使用Punycode 编码

DNS查询···

  • 浏览器检查域名是否在缓存当中
  • 如果缓存中没有,就去调用 gethostbynme 库函数(操作系统不同函数也不同)进行查询
  • gethostbyname 函数在试图进行DNS解析之前首先检查域名是否在本地Hosts里,Hosts的位置 不同的操作系统有所不同
  • 如果 gethostbyname 没有这个域名的缓存记录,也没有在 hosts 里找到,它将会向DNS 服务器发送一条DNS查询请求。DNS服务器是由网络通信栈提供的,通常是本地路由器或者ISP的缓存DNS服务器。
  • 查询本地 DNS 服务器
  • 如果DNS服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP查询
  • 如果DNS服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询

ARP

要想发送ARP广播,我们需要有一个目标IP地址,同时还需要知道用于发送ARP广播的接口的Mac地址。

  • 首先查询ARP缓存,如果缓存命中,我们返回结果:目标IP = MAC

如果缓存没有命中:

  • 查看路由表,看看目标IP地址是不是在本地路由表中的某个子网内。是的话,使用跟那个子网相连的接口,否则使用与默认网关相连的接口。
  • 查询选择的网络接口的MAC地址
  • 我们发送一个二层ARP请求:

ARP Request:

Sender MAC: interface:mac:address:here
Sender IP: interface.ip.goes.here
Target MAC: FF:FF:FF:FF:FF:FF (Broadcast)
Target IP: target.ip.goes.here

根据连接主机和路由器的硬件类型不同,可以分为以下几种情况:

直连:

  • 如果我们和路由器是直接连接的,路由器会返回一个 ARP Reply (见下面)。

集线器:

  • 如果我们连接到一个集线器,集线器会把ARP请求向所有其它端口广播,如果路由器也“连接”在其中,它会返回一个 ARP Reply

交换机:

  • 如果我们连接到了一个交换机,交换机会检查本地 CAM/MAC 表,看看哪个端口有我们要找的那个MAC地址,如果没有找到,交换机会向所有其它端口广播这个ARP请求。
  • 如果交换机的MAC/CAM表中有对应的条目,交换机会向有我们想要查询的MAC地址的那个端口发送ARP请求
  • 如果路由器也“连接”在其中,它会返回一个 ARP Reply

ARP Reply:

Sender MAC: target:mac:address:here
Sender IP: target.ip.goes.here
Target MAC: interface:mac:address:here
Target IP: interface.ip.goes.here

现在我们有了DNS服务器或者默认网关的IP地址,我们可以继续DNS请求了:

  • 使用53端口向DNS服务器发送UDP请求包,如果响应包太大,会使用TCP
  • 如果本地/ISP DNS服务器没有找到结果,它会发送一个递归查询请求,一层一层向高层DNS服务器做查询,直到查询到起始授权机构,如果找到会把结果返回

使用套接字

当浏览器得到了目标服务器的IP地址,以及URL中给出来端口号(http协议默认端口号是80, https默认端口号是443),它会调用系统库函数 socket ,请求一个 TCP流套接字,对应的参数是 AF_INETSOCK_STREAM

  • 这个请求首先被交给传输层,在传输层请求被封装成TCP segment。目标端口会会被加入头部,源端口会在系统内核的动态端口范围内选取(Linux下是ip_local_port_range)
  • TCP segment被送往网络层,网络层会在其中再加入一个IP头部,里面包含了目标服务器的IP地址以及本机的IP地址,把它封装成一个TCP packet。
  • 这个TCP packet接下来会进入链路层,链路层会在封包中加入frame头部,里面包含了本地内置网卡的MAC地址以及网关(本地路由器)的MAC地址。像前面说的一样,如果内核不知道网关的MAC地址,它必须进行ARP广播来查询其地址。

到了现在,TCP封包已经准备好了,可以使用下面的方式进行传输:

对于大部分家庭网络和小型企业网络来说,封包会从本地计算机出发,经过本地网络,再通过调制解调器把数字信号转换成模拟信号,使其适于在电话线路,有线电视光缆和无线电话线路上传输。在传输线路的另一端,是另外一个调制解调器,它把模拟信号转换回数字信号,交由下一个 网络节点 处理。节点的目标地址和源地址将在后面讨论。

大型企业和比较新的住宅通常使用光纤或直接以太网连接,这种情况下信号一直是数字的,会被直接传到下一个 网络节点 进行处理。

最终封包会到达管理本地子网的路由器。在那里出发,它会继续经过自治区域的边界路由器,其他自治区域,最终到达目标服务器。一路上经过的这些路由器会从IP数据报头部里提取出目标地址,并将封包正确地路由到下一个目的地。IP数据报头部TTL域的值每经过一个路由器就减1,如果封包的TTL变为0,或者路由器由于网络拥堵等原因封包队列满了,那么这个包会被路由器丢弃。

上面的发送和接受过程在TCP连接期间会发生很多次:

  • 客户端选择一个初始序列号(ISN),将设置了SYN位的封包发送给服务器端,表明自己要建立连接并设置了初始序列号
  • 服务器端接受到SYN包,如果它可以建立连接:
    • 服务器端选择它自己的初始序列号
    • 服务器端设置SYN位,表明自己选择了一个初始序列号
    • 服务器端把 (客户端ISN + 1) 复制到ACK域,并且设置ACK位,表明自己接收到了客户端的第一个封包
  • 客户端通过发送下面一个封包来确认这次连接:
    • 自己的序列号+1
    • 接收端ACK+1
    • 设置ACK位
  • 数据通过下面的方式传输:
    • 当一方发送了N个Bytes的数据之后,将自己的SEQ序列号也增加N
    • 另一方确认接收到这个数据包(或者一系列数据包)之后,它发送一个ACK包,ACK的值设置为接收到的数据包的最后一个序列号
  • 关闭连接时:
    • 要关闭连接的一方发送一个FIN包
    • 另一方确认这个FIN包,并且发送自己的FIN包
    • 要关闭的一方使用ACK包来确认接收到了FIN

UDP 数据包

TLS 握手

  • 客户端发送一个 Client hello 消息到服务器端,消息中同时包含了它的TLS版本,可用的加密算法和压缩算法。
  • 服务器端向客户端返回一个 Server hello 消息,消息中包含了服务器端的TLS版本,服务器选择了哪个加密和压缩算法,以及服务器的公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥
  • 客户端根据自己的信任CA列表,验证服务器端的证书是否有效。如果有效,客户端会生成一串伪随机数,使用服务器的公钥加密它。这串随机数会被用于生成新的对称密钥
  • 服务器端使用自己的私钥解密上面提到的随机数,然后使用这串随机数生成自己的对称主密钥
  • 客户端发送一个 Finished 消息给服务器端,使用对称密钥加密这次通讯的一个散列值
  • 服务器端生成自己的 hash 值,然后解密客户端发送来的信息,检查这两个值是否对应。如果对应,就向客户端发送一个 Finished 消息,也使用协商好的对称密钥加密
  • 从现在开始,接下来整个 TLS 会话都使用对称秘钥进行加密,传输应用层(HTTP)内容

TCP 数据包

HTTP 协议···

如果浏览器是Google出品的,它不会使用HTTP协议来获取页面信息,而是会与服务器端发送请求,商讨使用SPDY协议。

如果浏览器使用HTTP协议,它会向服务器发送这样的一个请求:

GET / HTTP/1.1
Host: google.com
[其他头部]

“其他头部”包含了一系列的由冒号分割开的键值对,它们的格式符合HTTP协议标准,它们之间由一个换行符分割开来。这里我们假设浏览器没有违反HTTP协议标准的bug,同时浏览器使用 HTTP/1.1 协议,不然的话头部可能不包含 Host 字段,同时 GET 请求中的版本号会变成 HTTP/1.0 或者 HTTP/0.9

HTTP/1.1 定义了“关闭连接”的选项 “close”,发送者使用这个选项指示这次连接在响应结束之后会断开:

Connection:close

不支持持久连接的 HTTP/1.1 必须在每条消息中都包含 “close” 选项。

在发送完这些请求和头部之后,浏览器发送一个换行符,表示要发送的内容已经结束了。

服务器端返回一个响应码,指示这次请求的状态,响应的形式是这样的:

200 OK
[response headers]

然后是一个换行,接下来有效载荷(payload),也就是 www.google.com 的HTML内容。服务器下面可能会关闭连接,如果客户端请求保持连接的话,服务器端会保持连接打开,以供以后的请求重用。

如果浏览器发送的HTTP头部包含了足够多的信息(例如包含了 Etag 头部,以至于服务器可以判断出,浏览器缓存的文件版本自从上次获取之后没有再更改过,服务器可能会返回这样的响应:

304 Not Modified
[response headers]

这个响应没有有效载荷,浏览器会从自己的缓存中取出想要的内容。

在解析完HTML之后,浏览器和客户端会重复上面的过程,直到HTML页面引入的所有资源(图片,CSS,favicon.ico等等)全部都获取完毕,区别只是头部的 GET / HTTP/1.1 会变成 GET /$(相对www.google.com的URL) HTTP/1.1

如果HTML引入了 www.google.com 域名之外的资源,浏览器会回到上面解析域名那一步,按照下面的步骤往下一步一步执行,请求中的 Host 头部会变成另外的域名。

HTTP服务器请求处理

HTTPD(HTTP Daemon)在服务器端处理请求/相应。最常见的 HTTPD 有 Linux 上常用的 Apache 和 nginx,与 Windows 上的 IIS。

  • HTTPD接收请求
  • 服务器把请求拆分为以下几个参数:
    • HTTP请求方法(GET, POST, HEAD, PUT 和 DELETE )。在访问Google这种情况下,使用的是GET方法
    • 域名:google.com
    • 请求路径/页面:/ (我们没有请求google.com下的指定的页面,因此 / 是默认的路径)
  • 服务器验证其上已经配置了google.com的虚拟主机
  • 服务器验证google.com接受GET方法
  • 服务器验证该用户可以使用GET方法(根据IP地址,身份信息等)
  • 如果服务器安装了 URL 重写模块(例如 Apache 的 mod_rewrite 和 IIS 的 URL Rewrite),服务器会尝试匹配重写规则,如果匹配上的话,服务器会按照规则重写这个请求
  • 服务器根据请求信息获取相应的响应内容,这种情况下由于访问路径是 “/” ,会访问首页文件。(你可以重写这个规则,但是这个是最常用的)
  • 服务器会使用指定的处理程序分析处理这个文件,比如假设Google使用PHP,服务器会使用PHP解析index文件,并捕获输出,把PHP的输出结果给请求者

浏览器背后的故事

当服务器提供了资源之后(HTML,CSS,JS,图片等),浏览器会执行下面的操作:

  • 解析 HTML,CSS,JS
  • 渲染——构建 DOM 树 -> 渲染 -> 布局 -> 绘制

浏览器

浏览器的功能是从服务器上取回你想要的资源,然后展示在浏览器窗口当中。资源通常是 HTML 文件,也可能是 PDF,图片,或者其他类型的内容。资源的位置通过用户提供的 URI(Uniform Resource Identifier) 来确定。

浏览器解释和展示 HTML 文件的方法,在 HTML 和 CSS 的标准中有详细介绍。这些标准由 Web 标准组织 W3C(World Wide Web Consortium) 维护。

不同浏览器的用户界面大都十分接近,有很多共同的 UI 元素:

  • 一个地址栏
  • 后退和前进按钮
  • 书签选项
  • 刷新和停止按钮
  • 主页按钮

浏览器高层架构

组成浏览器的组件有:

  • 用户界面 用户界面包含了地址栏,前进后退按钮,书签菜单等等,除了请求页面之外所有你看到的内容都是用户界面的一部分
  • 浏览器引擎 浏览器引擎负责让 UI 和渲染引擎协调工作
  • 渲染引擎 渲染引擎负责展示请求内容。如果请求的内容是 HTML,渲染引擎会解析 HTML 和 CSS,然后将内容展示在屏幕上
  • 网络组件 网络组件负责网络调用,例如 HTTP 请求等,使用一个平台无关接口,下层是针对不同平台的具体实现
  • UI后端 UI后端用于绘制基本 UI 组件,例如下拉列表框和窗口。UI 后端暴露一个统一的平台无关的接口,下层使用操作系统的 UI 方法实现
  • Javascript 解释器 Javascript 解释器用于解析和执行 Javascript 代码
  • 数据存储 数据存储组件是一个持久层。浏览器可能需要在本地存储各种各样的数据,例如 Cookie 等。浏览器也需要支持诸如 localStorage,IndexedDB,WebSQL 和 FileSystem 之类的存储机制

HTML 解析

浏览器渲染引擎从网络层取得请求的文档,一般情况下文档会分成8kB大小的分块传输。

HTML解析器的主要工作是对HTML文档进行解析,生成解析树。

解析树是以DOM元素以及属性为节点的树。DOM是文档对象模型(Document Object Model)的缩写,它是HTML文档的对象表示,同时也是HTML元素面向外部(如Javascript)的接口。树的根部是”Document”对象。整个DOM和HTML文档几乎是一对一的关系。

解析算法

HTML不能使用常见的自顶向下或自底向上方法来进行分析。主要原因有以下几点:

  • 语言本身的“宽容”特性
  • HTML本身可能是残缺的,对于常见的残缺,浏览器需要有传统的容错机制来支持它们
  • 解析过程需要反复。对于其他语言来说,源码不会在解析过程中发生变化,但是对于HTML来说,动态代码,例如脚本元素中包含的 document.write() 方法会在源码中添加内容,也就是说,解析过程实际上会改变输入的内容

由于不能使用常用的解析技术,浏览器创造了专门用于解析HTML的解析器。解析算法在 HTML5 标准规范中有详细介绍,算法主要包含了两个阶段:标记化(tokenization)和树的构建。

解析结束之后

浏览器开始加载网页的外部资源(CSS,图像,Javascript 文件等)。

此时浏览器把文档标记为“可交互的”,浏览器开始解析处于“推迟”模式的脚本,也就是那些需要在文档解析完毕之后再执行的脚本。之后文档的状态会变为“完成”,浏览器会进行“加载”事件。

注意解析 HTML 网页时永远不会出现“语法错误”,浏览器会修复所有错误,然后继续解析。

执行同步 Javascript 代码。

CSS 解析

  • 根据 CSS词法和句法 分析CSS文件和 <style> 标签包含的内容
  • 每个CSS文件都被解析成一个样式表对象,这个对象里包含了带有选择器的CSS规则,和对应CSS语法的对象
  • CSS解析器可能是自顶向下的,也可能是使用解析器生成器生成的自底向上的解析器

页面渲染

  • 通过遍历DOM节点树创建一个“Frame 树”或“渲染树”,并计算每个节点的各个CSS样式值
  • 通过累加子节点的宽度,该节点的水平内边距(padding)、边框(border)和外边距(margin),自底向上的计算”Frame 树”中每个节点首的选(preferred)宽度
  • 通过自顶向下的给每个节点的子节点分配可行宽度,计算每个节点的实际宽度
  • 通过应用文字折行、累加子节点的高度和此节点的内边距(padding)、边框(border)和外边距(margin),自底向上的计算每个节点的高度
  • 使用上面的计算结果构建每个节点的坐标
  • 当存在元素使用 floated,位置有 absolutelyrelatively 属性的时候,会有更多复杂的计算,详见http://dev.w3.org/csswg/css2/http://www.w3.org/Style/CSS/current-work
  • 创建layer(层)来表示页面中的哪些部分可以成组的被绘制,而不用被重新栅格化处理。每个帧对象都被分配给一个层
  • 页面上的每个层都被分配了纹理(?)
  • 每个层的帧对象都会被遍历,计算机执行绘图命令绘制各个层,此过程可能由CPU执行栅格化处理,或者直接通过D2D/SkiaGL在GPU上绘制
  • 上面所有步骤都可能利用到最近一次页面渲染时计算出来的各个值,这样可以减少不少计算量
  • 计算出各个层的最终位置,一组命令由 Direct3D/OpenGL发出,GPU命令缓冲区清空,命令传至GPU并异步渲染,帧被送到Window Server。

GPU 渲染

  • 在渲染过程中,图形处理层可能使用通用用途的CPU,也可能使用图形处理器GPU
  • 当使用GPU用于图形渲染时,图形驱动软件会把任务分成多个部分,这样可以充分利用GPU强大的并行计算能力,用于在渲染过程中进行大量的浮点计算。

Window Server

后期渲染与用户引发的处理

渲染结束后,浏览器根据某些时间机制运行JavaScript代码(比如Google Doodle动画)或与用户交互(在搜索栏输入关键字获得搜索建议)。类似Flash和Java的插件也会运行,尽管Google主页里没有。这些脚本可以触发网络请求,也可能改变网页的内容和布局,产生又一轮渲染与绘制。

 

 

https://github.com/skyline75489/what-happens-when-zh_CN

三大运营商2G/3G/4G频率分配和网络制式

经过二十多年长期的发展,我国的通信业逐渐形成了2G/3G/4G并存的局面,手机通讯信号传输都是通过一定频率传输的,而三大运营商所拥有的频率和网络制式不尽相同,这就造成同一部手机在三大运营商之间可能不通用,我们常常会碰到在联通或者移动买的手机,插上电信的卡无法使用,就是这种情况,为了帮大家全面了解三大运营商所拥有的频段和网络制式,小编整理了一下资料,通过下图您就能一目了然了:

11

对于4G网络,目前4G网络(LTE)分为TDD和FDD两种模式,这两种模式支持的频段是不一样的,他们是这样划分的。

FDD-LTE:12

TDD-LTE:

13

通过以上图片不难对比看出

中国移动TD-LTE:支持频段38、39、40

中国联通TD-LTE:支持频段40、41

中国电信TD-LTE:支持频段40、41

中国联通FDD-LTE:支持频段3

中国电信FDD-LTE支持频段3

大家在购买手机,特别是4G手机的时候,一定要看这款手机支持的频段,比如这次上市的iPhone6,在官网资料里面就会注明该款手机所支持的频段,如下图红色矩形框所示:14

上面写了支持FDD-LTE(频段1,2,3,4,5,7,8,13,17,18,19,20,25,26,28,29),而联通和电信的FDD-LTE频段恰恰是频段3,故这就说明这款手机是支持联通和电信的FDD-LTE 4G网络的。

另外由于CDMA的特殊性,一般的手机厂商会单独推出CDMA版本的手机,这种手机只能在中国电信的网络下使用,无法在中国移动和中国联通的网络下使用。

PS:什么叫CSFB。由于4G网络是纯数据网络,只能用来上网,如果是进行语音通话,在目前VOLTE还没有全面部署的情况下,一般是采用的CSFB方案,CSFB是LTE终端通过电路域使用语音业务的一种方案,终端平时驻留在LTE网络,使用LTE数据业务,当发起语音呼叫或者接收语音呼叫的时候,终端回落到2G/3G电路域进行语音呼叫,结束后再返回LTE

用Editplus配置JAVA编辑环境

一、实现编译Java程序功能

首先,从菜单“工具(Tools)”->“配置自定义工具…”进入自定义工具设置。在类别里展开“工具”树形菜单->“自定义工具”,选择“组和工具项目”中的“Group 1”,点击面板右边的“组名称…”按钮,将文本“Group1”修改成“编译JAVA程序”。然后选择修改的组“编译JAVA程序”,点击“添加新工具”按钮,选择程序,建立“新建程序”,选中它。

二、实现对编译Java程序功能

“菜单文字”里的内容修改为“JAVAC”;
“命令”选择安装JDK后的BIN目录中的编译程序JAVAC.EXE,路径为“%JAVA_HOME%\bin\javac.exe”;
“参数”选择“文件名”,即显示为“$(FileName)”;
“初始目录”选择“文件目录”,显示为“$(FileDir)”;
选择“捕获输出”复选框。

选择“捕获输出”后,程序编译的结果将显示在EditPlus的输出窗口中。

2014070402

三、实现对运行Java程序功能

“菜单文字”里的内容修改为“JAVA”;
“命令”选择安装JDK后的BIN目录中的编译程序JAVA.EXE,路径为“%JAVA_HOME%\bin\java.exe”;
“参数”选择“文件名(不含扩展名)”,即显示为“$(FileNameNoExt)”;
“初始目录”选择“文件目录”,显示为“$(FileDir)”;
“动作”选择“无”复选框。

 

2014070401

四、写个小程序测试一下:

做一个小程序试试。

我们可以点“工具”->javac 编译之,然后点“工具”->java运行看看。
也可以用快捷键Ctrl+1,Ctrl+2实现编译和运行。

JDK环境变量的设置

Windows7操作系统下如何配置环境变量?

假定已经安装了一个JDK,目录为:C:\Program Files\Java\jdk1.8.0    (这里的数字会随版本号变化,具体以安装后看到的文件夹为准)

配置环境变量的步骤:
①、计算机->高级系统设置->环境变量。
②、在环境变量里面找到Path变量进行编辑。
③、将目录C:\Program Files\Java\jdk1.8.0\bin拷贝到Path变量的最前面。
注意:目录与目录之间必须使用英文的分号隔开。
打开CMD (方法)  输入javac进行测试,如果能够输出javac命令的帮助信息,说明配置成功。
也可以输入java/java -version进行测试。

更通用的一种配置方式:
①、在环境变量里面新建一个JAVA_HOME的变量。配置的内容为:JAVA_HOME=C:\Program Files\Java\jdk1.8.0

20140715230707
②、在环境变量编辑 Path,里面添加Java的配置:%JAVA_HOME%\bin  用英文分号把之前系统路径隔开.

20140715230758

面向对象编程

 

传说中的”面向对象编程”

 

d7cce73c119006fea49c34e8de144c7d

iPhone在移动联通电信4G网络中语音回落技术的区别

大家都知道目前的LTE网络不支持语音业务,手机厂商采用CSFB语音回落和单卡双待两种方案解决的。CSFB语音回落方案是手机平常在LTE网络待机,有电话接打就让手机断开与LTE的网络的连接,信号回落到2G/3G完成语音通话,语音和4G数据业务不能同时进行。单卡双待手机同时在2G/3G和4G待机,语音和4G数据业务同时进行互不影响。
iPhone的LTE语音解决方案是CSFB技术,因为这种方案更省电,符合iPhone电池容量不高的特点。但在天朝的三家运营商的网络中,还是有着很大的区别的。

1.移动4G网络:
移动的3G网络就是移动的痛,TD-SCDMA技术落后WCDMA好几年的,这直接导致移动3G网络存在很多的问题。第一,下行理论速度只有2.8Mb/s;第二,网络延迟高,平均都在150ms,经常都能在2000-3000ms,联通和电信3G都在50ms内的,这会导致你的每次网络请求都会显得比联通和电信的3G网络反应慢半拍的。第三,移动3G网络脱网现象一直没有妥善解决的,这里的脱网就是手机会间歇性地在3G和E网间跳来跳去的,即便移动3G信号满格都不能避免的。本人在北京多个地点测试都发现手机会不自觉的跳到大E的,尤其在室内更常见的,大家可以度娘“移动3G 锁定”,你就会知道这是很普遍现象的。顺便吐槽一下很多商场内,移动都只有E网的,没有覆盖3G信号的。

由于上面的原因,iPhone的语音通话在移动的网络中都会选择回落到GSM网络的,极少回落3G网络的,因为移动很清楚自己的3G网络无论是覆盖范围还是信号稳定度都很渣的。大家都知道2G网络不能在打电话的同时连接数据业务,有些人可能对此并不介意的,我对象经常出差的,公司给配的联系客户的卡是移动的,由于话费全额公款,我对象的139金卡VIP在接打客户电话外,都用来做电脑的无线路由器的,每个月都会跑很多的流量用来做4G热点。我对象说用iPhone的移动4G做热点,他最怕的就是上传和下载文件的同时又电话打进来的,因为移动4G语音回落2G会导致电脑断网的。

为了防止有人说我黑移动,下面是我对象的卡登录移动营业厅的页面,大家看用户是北京的公司。

165954n0nwt2awmnzwutp7

2.联通4G网络:
联通3G的WCDMA网络速度快,信号稳定,大家可以去营业厅体验HTC 8160手机,语音电话时会回落到42Mb/s的3G网络,iPhone与HTC 8160同样都是CSFB手机的,WCDMA允许通话的同时连接数据业务,所以iPhone在联通的4G网络,语音通话的同时还能使用高速的HSPA+网络的。这样的用户体验无疑是很好的,3G与4G无缝连接的。

3.电信4G网络:
这里最重点的是电信版的A1533型号的iPhone,A1533用的既不是单卡双待,也不是CSFB语音回落技术,而是介于二者之间的方案,这点很多人恐怕都不清楚的吧?由于CDMA与LTE并不是一个体系中的技术,所以LTE语音通话要回落到CDMA,通话结束再返回LTE网络,电信就要在基站上做很大的改动,投入的资金较多的。全球的CDMA运营商都不会选择CSFB方案的,因为CDMA早就是运营商的拖油瓶,3G干不过WCDMA,4G没有自己的演进路线,所以C网运营商都不希望对CDMA网络进行较大的改造而投入资金的,他们希望新建的FDD LTE完全独立,这样在很多年后废掉CDMA,不会造成更多的损失。

由于C网运营商普遍选择单卡双待的方案,苹果又不想妥协,所以iPhone采取了中间策略,A1533会同时在CDMA 1x和LTE网络待机,这听起来有点像单卡双待,但CDMA 1x和LTE同时只能有一个进行数据的收发,这又很像是CSFB方案吧?

这就是说如果你正在用A1533的4G网络刷微博微信,手机依然保持和CDMA 1x的待机状态,此时如果有电话呼入,因为前面说过A1533只能有一个网络收发数据,A1533就会中断LTE数据业务,把电话接进来的。

我在说的明白点就是标准CSFB在语音回落时,基站要对手机发出通知,告诉手机你要回落到2G/3G,有电话来的。但苹果A1533的方案更多的是手机自己完成的,所以基站也就不需要做大的改造的。

苹果的这种奇葩的方案,能够让C网运营商稍加改动网络协议就能满足A1533的需求的。但由于CDMA 1x不支持语音和数据业务的并发,电信版iPhone在4G语音通话时和移动同样都是断网的。

大家注意作为有文化的网友,不要再说A1533用的是CSFB语音回落技术。谢谢!【转帖】

 

1 2 3 7