可靠数据传输的技术原理与实战

167 阅读4分钟

通信技术的变革是人类科技发展的缩影

  • 周幽王烽火戏诸侯

acaa-fyqrewh4788796.jpg

  • 无线电+密码机

WWII.png

Enigma.jpg

  • 证券交易

image.png

2009年夏天,交易员斯皮通过众筹耗费3亿美元,砸穿了美国坚硬无比的阿勒格尼山脉,将过去的网络线路缩减了100英里,将芝加哥南部的数据中心与新泽西北部的股票交易市场连接起来,最终让网络时延减少了1毫秒。仅这1毫秒就可以让华尔街金融机构们首先获取芝加哥和纽约交易所的差价,供其每年获得200亿美元利润。

  • 墨子号

W020210623364098142530.jpg

  • 引力波

image.png

两将军问题

两支军队由不同将军领导,准备进攻一座坚固的城市。军队在城市附近的两个山谷扎营。由于有另一个山谷将两山隔开,两名将军只能透过派信使穿越山谷通讯,但这山谷由城市护卫占领,有可能俘虏途径山谷传递讯息的任何信使。

虽然两军已约定要同时进攻,但尚未约定进攻时间。要顺利攻击,两军必须同时进攻。如果同一时间仅一支军队进攻就会战败,因此两名将军须约定攻击时间,并确保对方知道自己同意了进攻计划。但由于传递确认讯息的信使与传递原始讯息的信使一样,都可能被俘虏而丢失讯息,即使双方不断确认已收到对方的上一条讯息,也无法确保已与对方达成共识

83490be5-9498-4829-baf2-5a3f0a000be3.png

两将军问题无解

将军甲首先派信使向将军乙传递讯息“在8月4日9时进攻”。然而,派遣信使后,将军甲不知道信使是否成功穿过敌方领土。由于担心自己成为唯一的进攻军队,将军甲可能会犹豫要否按计划进攻。

为了消除不确定性,将军乙可以向将军甲发送确认讯息“我收到了您的讯息,并会在8月4日9时进攻”,但传递确认讯息的使者同样可能会被敌方俘虏。由于担心将军甲没有收到确认讯息而退缩,将军乙会犹豫要否按计划进攻。

再次发送确认讯息看来可以解决问题——将军甲再让新信使发送确认讯息:“我已收到您确认在8月4日9时进攻”。但是,将军甲的新信使也可能被俘虏。显然,无论确认几次都无法满足该问题的条件二,即两方都必须确保对方已同意计划,两名将军总会怀疑他们最后派遣的使者有否顺利穿过敌方领土。

不可靠信道

通信方式发展历程

电报

telegraph-1-1.jpg

电话

1600451129-1.jpg

16004555T-3.png

1600451592-4.png

人工转发

用户要打电话,先与话务员通话,告诉话务员要找谁,然后由话务员帮你接续

1600456096-5.jpg

16004545T-9.jpg

1600451J4-28.jpg

使用电路交换机实现全自动转发

1600455509-37.jpg

因特网的设计理念

六度分隔理论

世界上任何互不相识的两人,只需要很少的中间人就能够建立起联系

People_network.png

俄罗斯套娃

人类社会有很多种语言,通常情况下都需要借助各种翻译手段才能相互沟通。 网络“社会”也会存在类似问题,但是与人类的多语言情况稍有不同,由于通信的物理特性限制,数据都会分解成010101...形式的二进制数据(无论是物理线路还是无线通信都可以用高低电平或者类似的方式传递二进制数据)。然后在此之上因为有局域网、因特网,有数据链路层、网络层、应用层等多种多样的传输和表达方式,最原始的二进制语言会逐步“进化”成各种其他“语言”。

dDbwXtG1JC_small.jpg 因为所有消息都是从二进制“进化”而来的,所有在网络“社会”中我们需要的不是翻译,而是俄罗斯套娃。

数据链路

image.png

IP数据报

image.png

TCP数据报

image.png

UDP数据报

image.png

尽最大努力交付

640 (4).png

两将军问题的工程解

TCP三次握手

640 (1).png

Web世界的可靠通信

  • 万维网创始时期

蒂姆·伯纳斯·李于1989年在欧洲核子研究组织(CERN)正式提出万维网的设想,1990年12月他开发出了世界上第一个网页浏览器。 1676190328945.png

  • 门户网站时期

9a14-862b0f67e801091c64a643de4f6441e5 (1).jpg

  • 移动互联网时期

0 (2).jpg

0 (1).jpg

HTTP协议

HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。

62e061618977565c22c2cf09930e1d3c.png

b191c8760c8ad33acd9bb005b251a2df.png

物联网世界的可靠通信

  • 万物互联

1676207828078.png

1676207990731.png

image.png

image.png

1676208275696.png