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

论坛 期权论坛 期权     
李德华   2018-9-24 01:04   37708   8
或者说那么多数据为什么能通过电磁波电流传递而不会行程干扰,能自由准确的传输到指定的主机。
分享到 :
0 人收藏

8 个回复

倒序浏览
2#
车小胖  4级常客 | 2018-9-24 01:04:03 发帖IP地址来自
这个问题让我仿佛看到自己年轻时候的影子,所以我想郑重地回答这个问题。


时间追溯到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使得互联网成为可能。

车小胖望着组长儒雅而淡然的面孔,内心有一个想法,如果有一天有人问我同样的问题,我会把组长的答案原封不动地分享给他!
3#
Ivony  6级职业 | 2018-9-24 01:04:04 发帖IP地址来自

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

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

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

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

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

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

这是解决干扰的问题。


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

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

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

后面就是软件层,比较灵活,我了解的也不多了。浅的知道internet都是收到后回信号,没信号就是丢包。握手分好几次,将数据丢失做到最低,同时效率降低。
基本上数据传输都是全程可控,只要错了就能发现,然后要求重新发一遍。
5#
Yriuns  4级常客 | 2018-9-24 01:04:08 发帖IP地址来自

n个月前写的:

你到底是如何上网的

应该算把原理性的东西都讲清楚了。

6#
路过的人  4级常客 | 2018-9-24 01:04:09 发帖IP地址来自

看了日报,然后强迫症就上来了。第一次答题。这些东西都是很久以前学的了,而且不是我的主专业,欢迎指正和补充。

解答问题之前,先介绍一下OSI model - Wikipedia [1]。打不开链接没关系,下面会有解释。OSI Model定义了网络的七层结构。每一层分工不同,七层加在一起保证了数据传输的准确。每一层都有包装来保证那一层的协议的运行。另外,除了包装以外,每一层还有发现、协商、维护的数据流来保障那一层的协议的运行。

七层定义如下:

  1. Physical Layer
  2. Data Link Layer
  3. Network Layer
  4. Transport Layer
  5. Session Layer
  6. Presentation Layer
  7. Application Layer

Physical Layer
这一层是专门传0和1的。定义是:Transmission and reception of raw bit streams over a physical medium [1]。介质有电话线、网线、电线、空气等。这一层提供一些抗干扰能力,努力保证0不被改成1、1不被改成0。这一层的错误率还挺高的。

“电磁波电流传递而不会行程干扰”的能力是这一层提供的。在铜线电流里,很简单,一条铜线传一条电流,靠物理和电磁屏障来避免不同导线内的电流互相干扰,提高铜线截面积和纯度来降低传导过程当中产生的噪声,电流整形滤波来消除噪声。在无线电里,有不同机制。有的用分时机制,约好不同节点在不同时间说话。有的用分频机制,不同节点用不同无线电波频率说话。还有更高明的靠编码,同时同频跟不同节点一起说话。像WiFi这种拥挤、没有条款制约的就靠吼。。。反正每个包都有标签,谁嗓门大,谁耳朵尖,谁传的数据快。

至于“自由。。。传输到指定的主机”的能力,请继续往下看。

Data Link Layer
这一层是传“Frame”的,把0和1组织起来,加入针对线路传输中的错误的校验。定义是:Reliable transmission of data frames between two nodes connected by a physical layer [1]。这一层的介质有Ethernet、WiFi等。如果信号不好导致数据传输错误,比如说传的0变成1了,或者1变成0了,这一层能查出来,然后把包丢掉。这一层一旦发现错误就丢包。这一层的寻址用MAC,用来“包装”这一层的数据。

Network Layer
这一层提供了知道数据是谁传给谁的能力,可以利用中转来实现远距离传输了。大名鼎鼎的IP协议就是这一层的。定义是:Structuring and managing a multi-node network, including addressing, routing and traffic control [1]。每个包都表了目的地的IP地址,用来“包装”这一层的数据。

讲到这一层就讲讲routing。Routing是网络里每台设备维护自己的routing table来实现的。Routing table定义了去哪里的数据发给谁。Routing table基本长这样:(注:不是真的长这样,只解释一下原理。并不想解释所有参数以及如何利用整个表推演得到最优的下一站以及如何防止数据“迷路”)
目的地->网关
10.0.0.1-10.0.0.255->10.0.0.1
10.0.1.1-10.0.1.100->10.0.1.1
意思是,如果我要发数据给10.0.0.1到10.0.0.255之间的地址,把数据发给10.0.0.1就行了。然后把数据重新打包发给10.0.0.1的MAC地址。数据的IP地址是不变的,把目的地的MAC换成了10.0.0.1的MAC。(注:还请较真儿的同学们别跟我提NAT,本题不需要解释。)当10.0.0.1收到这个包裹的时候,同样会看自己的routing table。这样一站一站直到发到目的地为止。至于全世界所有的routing table是怎么建立起来的,怎么维护的,就不在这个问题里细说了。


写半天才写了三层。。。其实讲到这里已经基本解答了这个问题。有人提到握手什么的,再多写一层。

Transport Layer
这一层开始进入软件层。这一层开始负责数据的完整性、维护顺序之类的了。这一层还加入了端口的概念,用来标明哪个包是给哪个程序的。TCP和UDP协议是这一层的。定义是:Reliable transmission of data segments between points on a network, including segmentation, acknowledgement and multiplexing。IP协议只负责谁的数据送给谁。这一层加入了握手,保证对方真实存在。这一层还提供了把大量数据分成下面三层所支持的小包从而实现连续的数据传输功能。另外,TCP协议还加入了数据包排序和掉包重发的功能。在routing的过程中,一些包能早到,一些包能晚到,一些包能被丢失。TCP在接受端能重新排序。接受端还需要向发送端确认收到。但是代价是降低了数据的吞吐,增高了延迟。而UDP就完全不管这些,收完了事。大多数应用都需要数据的准确性,所以大多数应用都使用TCP。而少数应用场景则使用UDP。比如说早期腾讯在网络条件还很差的时候,用UDP来传视频数据。效果差很多,但最起码在网卡的时候还能看个影儿。占领了很大的市场。心机啊。


至于“准确”的部分,在每一层都有机制来保障。最常见的就是靠校验码来“包装”那一层的数据。一旦发现错误就丢包,然后进行补救。软件层会超时重试,TCP会通知重发,再底层就不补救了但是会降频来增加信噪比、降低错误率。校验码的原理是用一个协议制定的算法来对数据部分进行计算,得到一个很短的固定长度的校验码。算法的特点是,一旦有一个0或1被传输错误,计算出来的校验码一定会不同。而一个以上的0或1被传输错误的时候,计算出来的校验码会有很高的几率会不同。其实理论上还是不能完全的避免传输错误的。


到这里,已经有了自由、准确、稳定和连续的数据流了。再往上走就是纯软件了。跟本题无关了。

最后,中心思想就是,网络分了很多层,每一层的分工不同,每一层都有额外的数据来给每个包打标签。最后把包发到目的地。

写完了,吃饭去了~

7#
ZFChenEV  4级常客 | 2018-9-24 01:04:10 发帖IP地址来自
以太网的物理层协议可以帮助题主理解这个问题
8#
小怪兽  4级常客 | 2018-9-24 01:04:11 发帖IP地址来自
因为在构建数据包的时候 已经加了很多冗余 纠错 重传等机制 层层把关 但是因为处理的快 你感受不到而已
9#
三城地区老司机  1级新秀 | 2018-9-24 01:04:12 发帖IP地址来自
嗯,我的领路人给我传了几个g的教学视频,七八本书讲这个问题。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP