今天看到一篇网络分层的通俗解释——网络信息怎么在网线中传播的,看完之后可以参考Android 网络(一) 概念 TCP/IP Socket Http Restful深入了解一下
题主的问题非常大。其实别人再跟你讲,你还是不会清楚,应该自己去看一套完整的网络基础教程。但是刚好我最近闲,我就给你梳理一下,当然每一步都很简略,因为说详细了就太长了。
首先要了解一点,网络是分层组织的,相邻的层之间暴露接口给对方使用。这是计算机世界典型的组织模式。
- 举个例子,我去寄邮件,首先我要对我要邮寄的东西进行打包,这就相当于货物的第一层处理;
- 之后我要叫快递小哥,我可以叫顺丰圆通韵达,交给他们就完了,这是对货物的第二层处理;
- 快递小哥拿到货物以后,他给你的快递上贴个地址,就交给自己的物流了,这就是第三层处理;
- 物流这时候就开始转运了啊,比如你寄给了上海,上海在哪里,这需要有人来定义好,你的货物需要从济南转运中心到苏州转运中心再到上海转运中心,最后到上海,这是对你货物的第四层处理,到了上海之后,就是把整个过程倒过来,物流把货物交给快递小哥,快递小哥交给收货人,收货人打开包装,收货。
我们为什么要分层,因为这样这样比较好组织,我打包的这一层不需要知道其它层怎么运作的,我小哥也不需要关心你到底怎么打包的,物流不需要知道小哥到底怎么安排自己的取货时间和路线。每个层相互独立,我只要专心干好打包一件事情,知道打包完了交给小哥就行了,剩下的我不管了。OK。这和网络传输是一样一样的。那么,上述的送快递的四个层,大概相当于网络传输的哪些层呢?
一、应用层
应用层就是产生货物的那一层,就相当于我想寄货,我只要准备好货物,打包好就OK了。这一层有HTTP协议,FTP协议,SMTP协议等。分别对应不同的应用。我们浏览网页,用的是HTTP,去FTP下载,是FTP,发邮件,是SMTP。就是产生货物,并将其打包。打包后的数据就是数据包了。然后我们开始叫快递小哥。
二、传输层
货物打包完了,我就叫快递小哥来。网络世界里运送货物的主要有两个快递公司,一个是TCP协议,一个是UDP协议。就像顺丰与韵达的关系吧,都是用来发送货物的。应用层产生的数据,交给传输层,传输层会再将数据进行一些处理,具体就是给数据套个传输层的头,头里面包含一些传输层自己需要用到的数据,比如说送到天都小区8号楼6层2号。就像快递小哥往你打包好的东西上贴个地址。之后小哥就带着你的货物去找自己的公司物流了。也就是数据包交付给了网络层。
三、网络层
网络层只有一个协议,就是IP协议。目前我们广泛使用的是IPv4。IPv4协议就要讲细致一点了,因为与你的问题息息相关。这个协议负责干嘛呢?
第一:他负责编址。就像上海到底是哪个上海,在什么地方。IPv4最重要的功能就是给网络上的主机编号,比如你发给百度的东西,IPv4负责给百度一个地址,然后通过某种方式,把这个地址广而告之整个网络。于是现在就知数据往哪里发了。这就是你的问题:“全世界的网络互通的,怎么确定我要发送的信息能准确到达目的地。”答案的第一部分,因为主机有独立的IP地址,这个IP地址不同于公网上的任何其他地址,因此你的数据知道往哪里发。
第二:他负责路由你的数据。路由这两个字读起来拗口,不如快递的“转运”两个字听起来好理解,其实就是规定你的数据包如何转运。显然你和目的主机之间没有直接连着一根网线,所以你的数据包得经过转运,比如说,你家里的路由上层只直接连接着小区的路由,你产生的流量他只能发到小区的路由,小区的路由说,我直接连着北京的机房呢,所以把数据发到北京的机房去,北京的机房(是超级大的路由)一看,这IP地址是南京的啊,我没直接相连,不过我用光缆连着上海的机房,上海的机房也告诉我他可以把我的数据发到南京,我就先发到上海的机房,上海的机房直接连着南京的机房,南京的机房连着跟你微信的小妹妹的小区的路由,小区的路由连着她家里的路由,她家里的路由连着她的手机。这样你的数据就发到目的地了。显然,你的数据不止有一条路,假如北京的机房和苏州的机房也相连,苏州也跟你的路由说送南京的数据我也能送啊,北京的路由就有可能选择把数据发到苏州机房转运。
路由之间通过某种协议来交换自己能到达的主机的信息。这样你的数据包有了地址以后,就可以在网络世界传送了。
这就是你的问题:“全世界的网络互通的,怎么确定我要发送的信息能准确到达目的地。”答案的第二部分,因为路由器之间可以相互交换自己能够连接的主机的信息,所以数据能够到达目的地,但到达和准确到达其实还有点距离。意思是传输中可能出现一些异常情况,导致数据无法到达或者传输出错。IP层也部分处理这种情况。
第三:他负责处理网络的一些异常情况。网络世界是一个松散的组织,你很难保证你数据包在传输中不出错,比如说光缆受到了干扰,这都可能使你的数据包出错,IPv4还提供了一个简单的校验功能,如果计算出来发现数据包在传输中出错了,他就丢掉,这是丢包的一个原因;另外,假如说一段互联网线路特别繁忙,就像一个高速公路,本来一小时只能传输1000吨货物,你现在发了1500吨的东西过来,路由器来不及发送,他就把多余的货物存在自己的存储空间里,但你还接着发,发了2000吨货物,把存储空间都撑满了,你再发送的数据,路由器就直接丢弃了,这是丢包的第二个原因。
发热发没了这种事情其实也不是不可能存在,就是传输中数据出错了呗,或者直接就在路上翻车了,永远没有到达下一个路由。那你可能会说,这怎么办呢?有很多办法,比如说目的地的快递小哥一直等不到包裹,就跟北京说,这哥们货物怕是丢了,这时候北京的小哥会再发一份包裹出去;或者北京的小哥一直等不到目的地的小哥说自己收到货了,他猜是弄丢了,于是就重发了一份(反正网络数据可以复制嘛),这是传输层纠错;也可以是你寄货的发现,我擦怎么都发出去500ms了怎么小姐姐还还没收到,我再发一份,这是应用层纠错。
四、物理层
网络搞清楚发到哪里、怎么转运以后,就交给物理层来具体发送数据。
还以上文的例子继续讲,北京的机房说我发到上海去,然后就把数据转换为光信号或者电信号,甚至说不定通过卫星中继的还可以是无线(电磁)信号,发出去了。到底怎么转的,你可以自己去查一下。这就相当于我发到南京的包裹,网络层负责告知要通过上海转运,但怎么发到上海去,可以像顺丰,有自己的飞机,也可以是陆运用车拉,总之这就是物理层的功能,负责最底层的货物运送。
所以,你的问题“咱们上网的各种信息转换为电信号或者光信号在网线里传播吗?”,基本上可以认为,是的。你可能会疑问,那光电信号怎么承载信息呢,这就是二进制如何编码为不同文件的问题,可以自行了解。
至此,你就知道网络数据到底是怎么从一个主机传送到另外一个主机了。送到目的地之后的事,不过是把上面的过程倒过来再走一次。
“既然全世界网络互通的,怎么实现的各种限制”。不知道你想说的限制是什么。限速?用户认证?问题不清楚就没有答案。
“理论上是不我有一根联网的网线是不就能截获各种信息,比如某人的密码,银行工作流水等等”。从上文你也看到了,网络数据可能并不路过你有掌控权的主机,因此这部分数据你是无法截获的。就像你在自己家门口的路上蹲着等快递,从纽约发往华盛顿的东西你是不可能截获的一样。但是你是否就一定不能获取从纽约发往华盛顿的东西呢?也不尽然,你可以安排一个眼线,蹲在纽约到华盛顿的高速公路上,把货物劫了再发到你家门口,这也是截获的一种,或者说你在网上扯着嗓子喊,说我这里是华盛顿,万一有哪个路由信了,就把数据发给你了。但是显然网络工程师不是傻子,他们也设计了很多方法来保证你截获不了数据,比如你能掌握联通北京机房的控制权吗?当然很难,防火墙什么的都是白弄得吗?就算你截获了,打开一看,货物是本天书,都是加密过的,你不知道密码,也看不懂;你在门口高喊我是华盛顿,快递小哥听到后心想,就你还有资格把这里定义成华盛顿?直接不理你,你的声音都传不出你家门口那条路。
网友评论