登录 注册 发布

小蜜蜂

数据怎样在网络中传输的?要经过怎样的包装才能保证传输准确?



推荐
谢邀!

这个问题让我仿佛看到自己年轻时候的影子,所以我想郑重地回答这个问题。


时间追溯到2001年,做硬件的组长和我一起调试数字地图系统,控制系统与数字地图系统用一根电缆相连接,控制系统负责发送指令,地图系统负责接收指令,并根据指令的具体内容“放大、缩小、Zoom、加载航线、去除航线”等等,做具体的动作。

比如放大的 指令代码“0x85”,发出去之后,数字地图就会放大地图,有时放大指令发送了,可地图系统却没有动静,这时就需要排查了,最有效的排查工具就是组长的“ 示波器”,示波器的探针连在电路板接收、发送引脚,就会清晰地看到波形,组长把波形用二进制写下来:“ 10000101”,然后对我说,看来你的指令发送出来了,指令是十六进制的“0x85”,看来是地图系统没有处理,接下来进一步排查不表。

看组长娴熟的排查手法,内心充满着很多好奇,整天跟在组长屁股后头,看他怎么解决问题的。那时恰好在学OSI参考模型,我就问组长,

第一个问题:组长 ,为何我的指令数据“0x85”在线路上裸奔,没有一点数据链路层的协议头?

组长说:因为是点对点连接,这边发,对方接,无需华而不实的头部,对方接收到指令之后,只要明白指令的具体含义就OK!这样实现起来简单明了。

第二个问题:组长,那如果我发送指令数据很快,会不会造成指令信号的重叠,相互干扰?

组长:我们使用的 RS-232串行接口,默认有一个发送速率, 9.6Kbps,两端需要速率匹配才能正常工作,假如这里两端都是9.6Kbps,如果发送端的程序,比如这里的控制系统想发15Kbps 的数据,可以把这个RS-232接口模块看成一个小蓄水池,一根进水管,流入速率15Kbps,一根出水管,流出最大速率9.6Kbps,很显然有 5.4Kbps的水不能及时排出,留在蓄水池里(硬件缓冲内存),但这个蓄水池很小,总有盛满的时候,如果进水管不停、或者降速,则 多余的水会溢出蓄水池!(数据丢弃)

所以控制系统最终能发多快的数据,最终是由硬件的发送速率限制的,硬件在发送数据时,信号与信号之间,是有间隔的,否则接收方无法分辨是一个信号、还是多个信号,既然有间隔,信号在线缆上的传输速率完全相同,所以不会造成信号重叠、干扰!

还要补充一点,发送方硬件即使知道有很多数据在排队发送,但是一秒钟能发多少位的数据是有上限的。

突然想到了高速公路的车流,高速公路入口涌入过多的汽车,高速公路的流速就会显著下降。可信号却不是这样的,只要信号发送到线路上,它的流速是恒定的,接近光速。通俗的话来说,要么不发,要发就是光速,网络的拥堵不是发生在出水管,而是发生在蓄水池!而高速公路因为没有蓄水池,只有依靠降低流速来容纳更多的车辆。

第三个问题:组长,访问美国的网站,数据在线路上,是不是也是0、1组成的大段的波形?这些波形之间是否也有间隙?我听到一个新名词:路由器,那路由器如何处理这些波形?使得这些0、1波形最终到达终点?

组长:是的,其实互联网上的原理和我们这个系统很相似,用户的数据是以一串的0、1二进制波形发送到线路上,这些波形之间是有间隙的,比如我们实验室的以太网上的波形(以太帧),帧与帧之间是有分隔的,这样接收方就可以将两个分隔的帧独立处理。

说到路由器,你最近不是在看网络的书的吗?路由器是用来帮用户IP包寻找目的地在哪里的!

比如上文路由器接到一个以太帧,经过路由器网卡处理,路由器就会看到一串0、1组成的字符串,如果这个字符串只是指令代码“0x85”,没有其他的了,那路由器如何知道这指令代码“0x85”是去往何处的呢?

这里如果在“0x85”前有地址信息,类似信封上的收件人地址一样的信息,路由器就不会懵逼了,路由器根据收件人地址,查询地址就可以发给更靠近目的地的下一跳路由器了,下一跳也是采用类似的办法,直到最终找到收件人,然后就可以将指令代码“0x85”转交给收件人!

用来容纳收件人地址的就是 IP头,收件人地址对应的就是目的IP地址,那就是如下方式:

IP + “0x85”

看出来了没有,有了这个IP头,假设目的IP= “8.8.8.8”,我们就可以将这个指令代码,跨国太平洋光缆发往美国。如果愿意,可以将目的IP
修改成任何公网IP地址,可以将指令代码“0x85”发到互联网世界上的任何一个角落。

而没有这个神奇的IP头,我们只能将指令代码“0x85”在两台物理直连的设备之间传输,物理局限性太大。

补充一点,不要忘记, IPInternet Protocol的缩写,IP使得互联网成为可能。

车小胖望着组长儒雅而淡然的面孔,内心有一个想法,如果有一天有人问我同样的问题,我会把组长的答案原封不动地分享给他!
【其他评论】---------------------------------------------------------

首先,这并不是一个复杂的问题,可以简单的解答。

你首先搞混淆了两个概念,电磁波和数据。

首先说电磁波,电磁波显然会受到干扰,,解决干扰的思路有三个,屏蔽,适应和纠正。

屏蔽,用抗干扰更强的光纤代替导线,给导线套上接地的屏蔽层等

适应,例如差分信号传输,调频代替调幅等。

纠正,发送校验位,发现错误后重新发送。

这是解决干扰的问题。


然后是准确的传输到指定的主机,因为传输到指定的主机的不是电磁波,而是数据。数据是可以被解读的,可以描述自己需要被发送到什么主机,解读数据的方式就是网络协议,负责投递到指定主机的协议就是IP(网际协议)。所以答案很粗暴,每一级的网络设施把收到的数据解读一次,然后根据约定的方式把数据向目标传输,也就是说我们在互联网上发送的所有数据,事实上不停的被各种网络设备解读,这也是为什么我们需要把数据加密传输的原因之一,如,使用HTTPS协议。

【其他评论】---------------------------------------------------------
不是不形成干扰,干扰一直存在。外来的,自身的。
单纯如何保证数据准确,有很多措施。从底层硬件开始,首先是差分,既两条线里面走高低信号,共同走过漫长旅程,然后做差,可以去除共模干扰。
然后是时钟或者波特率,按组发送。有个特征标记什么时候通讯开始,之后第一秒一个数据,第二秒一个数据直到第8或32或64秒,取数据时只认为处于中心0.5的值是对的,这样每组内的偏差可控。下一组重新计时,消除累积误差。
然后是数据检验,比如奇偶校验,一次发9位数,最后一位是前8位是奇数还是偶数。有公式可以算出来误差率。

然后是通讯协议,协议只认可预存的指令和数据,比如ASCII码,指令和数据不对就做丢弃处理。各种通讯协议会严密检查收到的数据。

后面就是软件层,比较灵活,我了解的也不多了。浅的知道internet都是收到后回信号,没信号就是丢包。握手分好几次,将数据丢失做到最低,同时效率降低。
基本上数据传输都是全程可控,只要错了就能发现,然后要求重新发一遍。
【其他评论】---------------------------------------------------------
知乎日报观光团
实在是没忍住说一句
这个问题太大了
从软件架构上可以讲一整本计算机网络
从信号传输的角度可以讲dsp
然后还要有数模电
所以大家都是答个大概也不可能完全讲得清
每本书都是一两个学期的量
就这样
【其他评论】---------------------------------------------------------
两个月前写的:
yjyeee.github.io/2017/0

应该算把原理性的东西都讲清楚了。
【其他评论】---------------------------------------------------------

这个问题看上去很专业,其实通俗地讲也简单。

一般网络数据都是拆成很多小包来传的,单个包里存的数据一般不到 1.5KB 。每个包就像快递一样,上面写了发包地址和收包地址。

先说网线。网线扮演的是“邮递员”的工作,负责在设备之间传包。表面上,一根网线“同时”传了多个应用程序的包,实际上,网线是“一个一个”传数据的。任何时刻,一根网线上一个方向最多只有一个包在传。只不过电脑发包切换得快,发完 a 程序的几个包,马上发 b 程序的几个包,然后发 c 程序的几个包……因为是轮流发的,所以不同程序的包之间,不会互相干扰

再说路由器。路由器在网络上扮演了“快递分拣”的工作。路由器里存了一张叫做路由表的大地图,每个路由器连了其他好几个路由器。路由器收到一个包的时候,查一下包的收包地址,和路由表对一下,就通过网线把这个包扔到离收包地址更近一点的相邻路由器了。网络上好多好多路由器,照着路由表这个地图,在相邻的路由器之间接力扔包,数据包离目标越来越近,最后就能到达准确的收包地址了。这里深究起来,涉及到路由表扩散协议与收敛算法,选路策略,负载均衡,分片与还原分片等多种技术,就不详细说了。

【其他评论】---------------------------------------------------------
因为在构建数据包的时候 已经加了很多冗余 纠错 重传等机制 层层把关 但是因为处理的快 你感受不到而已
【其他评论】---------------------------------------------------------
嗯,我的领路人给我传了几个g的教学视频,七八本书讲这个问题。。
【其他评论】---------------------------------------------------------
日报观光团飘过^_^其实要说数据的包装形式,就是编码和调制啦,首先通过信道编码来增加检错和纠错的能力,然后通过调制把这些比特映射成符号(symbol),就能用电磁波把符号通过基带或者频带进行传输啦。接收端需要进行相反的操作,解调,解码。
【其他评论】---------------------------------------------------------

推荐你去看看数字电路中的二进制

39

评论