美文网首页
上了这么多年网,终于弄明白来。

上了这么多年网,终于弄明白来。

作者: 路耀广的前端微博 | 来源:发表于2018-04-16 21:48 被阅读0次

作为一名搬砖的网络民工,一直在做网页,但是一直没有去仔细想过到底一台电脑是怎么上的网。最近看了一篇阮一峰的互联网协议入门的文章,如醍醐灌顶,终于弄懂了互联网是个神马东西。下面我将用白话文来说下我的理解,尽量做到像我这样的小白也能看懂的程度。

互联网模型

互联网的实现要分为好几层,就像一栋大楼也要分层是一样的,上一层总是建立在下一层的基础上。。网上有七层模型或者四层模型,这里我就用阮一峰总结的五层模型来论述。

  • 应用层Application Layer
  • 传输层Transport Layer
  • 网络层Network Layer
  • 链接层Link Layer
  • 实体层Physical Layer
    不要被这些看着很专业的名词弄的有点蒙,其实是很好理解的。从上至下,应用层=>实体层,所以越往下就是越接近硬件,越往上就是越接近用户(上网的人)。它们的名字并不重要,你只需要知道互联网分成若干层就可以了。
    互联网分成了这么多层,其实每一层就是去实现某一个功能。而为了实现这些功能,就需要大家一起遵守共同的规则。如同大大小小的汽车在马路上跑,大家都遵循交通规则,才能让交通有条不紊的进行。而这种大家都遵循的规则,称之为协议(protocol)。
    互联网的每一层都定义了很多协议,这些协议共同组成了互联网协议,它是互联网的核心。
    下面我从最底层向上来讲解网络的形成。

实体层

电脑要上网,肯定是要把所有的电脑连接起来,大家才能进行通信。连接的材料有很多(光缆,电缆,双绞线甚至无线电波等),这就叫做实体层。一句话概括就是它就是把电脑连接起来的物理手段。作用是负责传送0/1的电信号。

实体层

链接层

单纯的0/1的电信号没有任何意义,必须对这个电信号进行解读才能发挥作用。这就是链接层对作用,它在实体层对基础上,确定0/1电信号的分组方式。

以太网

早期的时候,每家公司都有自己的电信号分组方式。后来一种叫做以太网(Ethernet)的协议,占据了主导地位。

以太网规定,一组电信号构成一个数据包,叫做。每一帧分成两个部分:标头数据


"标头"包含数据包的一些说明项,比如发送者、接收者、数据类型等等;"数据"则是数据包的具体内容。
"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

MAC地址

每台电脑想要上网就必须要有网卡。以太网规定连入网络的所有设备都必须要有"网卡接口"。网络传输归根结底就是从一块网卡发送到另一块网卡。
每块网卡都有全世界独一无二的地址,这个地址是48个二进制位,就是MAC地址。
简单的概括就是,想上网就要有网卡,而每块网卡都有自己的MAC地址。

广播的概念

知道了网卡和MAC地址的概念,我们也说了,网络传输就是从从一块网卡发送到另一块网卡。我们只知道自己网卡的MAC地址,怎么去获取别人的MAC地址发送数据呢?ARP协议可以做到这一点(下面会详细说明)。
下面我们假设我们已经知道了对方的MAC地址了,但是系统怎么才能把数据发送给对方呢?

回答可能让你有点大惊失色,其实这种方法就是给这个网络中的所有计算机都发送消息,这个消息包含了发送者和接收者的MAC地址。然后所有的计算机将自己的MAC地址与消息中接收者的MAC地址进行比对,如果不是就抛弃,剩下那个是的计算机就接收到了数据。 如图,只有接收者3符合,其余两个接收后会自动抛弃。

网络层

以太网和MAC地址已经使得数据可以在网络中传输了,但是想一想全世界有多少电脑,如果依靠这种每次传输都全部发送一遍的情况,是多么的恐怖。其实互联网归根结底是由无数个子网络共同组成的庞然大物。

互联网
每一台电脑如果要上网,都会存在于一个子网络中。因此,必须要找到一种方法,能够区分哪些MAC地址的电脑同属于一个子网络中,哪些不是一个子网络。如果是同一个子网络就用搞上面提到的广播的方式,否则就采用路由的方式。
这就导致了“网络层”的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于一个子网络,这种地址就叫做"网址"。
网络层的出现使得每台上网的计算机有了两个地址:MAC地址网址。两种地址没有任何联系,MAC地址绑定给网卡,网址由管理员分配,随机组合。
网址帮助我们确定计算子所在的子网络,MAC地址则是确定数据传给该子网络中的哪一台计算机。因此从逻辑上来推断,必定是先处理网址再处理MAC地址。

IP协议

规定网址的协议就叫做IP协议。它所定义的地址就是鼎鼎大名的IP地址。
目前广泛采用的是IPv4版本的规定,网络地址由32个二进制位组成。习惯上,使用4断十进制数表示IP地址。从0.0.0.0到255.255.255.255。
互联网上的每一台计算机都会被分配到一个IP地址,这个地址由两部分组成。前一部分代表网络,后一部分代表主机。处于同一个子网络中的计算机,它们的网络部分是相同的,只是再主机部分由区别。
但是单单的从IP地址上来看,是无法判断两台地址是否处于一个子网络中的。因为网络部分可以是16位或者是24位,28位。172.11.255.1和172.11.255.2这两个IP看似很相似,但是网络部分是多少位的根本看不出来。
于是子网掩码(subnetmask)出现了,他就是表示子网络特征的一个参数。它的形式上也是一个32位二进制数字,它将IP的网络部分定位1,主机部分定位0.比如172.11.255.1这个IP。如果网络部分是24位的话,子网掩码就是这样的:11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道了子网掩码,我们就可以很容易的判断两个IP是否在一个子网络中了。就是将两个IP和各自的子网掩码就行AND运算(两个数位都为1,运算结果位1,否则为0)。如果结果相同就表明它们是在同一个子网络中。
比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

IP数据包

根据IP协议发送的数据,就叫做IP数据包。不难想象,其中肯定包含了IP地址信息。
之前说过,以太网数据包只包含了MAC地址,并没有包含IP地址。那么是否需要修改之前的数据定义呢?

答案是否定的。我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。 demo
IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。前面说过,以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

ARP协议

之前我们提到,找到目标MAC地址要使用ARP协议,现在就来聊聊它。
因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的(后文会解释),但是我们不知道它的MAC地址。
这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理。
第二种情况,如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。

传输层

传输层的由来

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。
一台电脑会安装很多程序,比如聊天的QQ,看网页的浏览器,下载的游戏等等都需要网络。当一个数据进入了你的电脑,这个数据给谁用呢?QQ,网页,游戏都有可能。
这时候,我们电脑的"端口"(port)就显得至关重要了,它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。
"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。

UDP协议

有了端口的概念了,我们必须在数据包中加入端口的信息了。这就需要新的协议,有一种最简单的协议就是UDP协议。它的格式几乎就是在数据前,加了一个端口号而已。

UDP数据包同样分为头部和数据两个部分 demo
TCP协议

UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
为了解决这个问题,提高网络可靠性,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
TCP数据包和UDP数据包一样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

应用层

应用程序收到"传输层"的数据,接下来就要进行解读。由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则根本无法解读。
"应用层"的作用,就是规定应用程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了"应用层"。
这是最高的一层,直接面对用户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太网的数据包就变成下面这样。

demo
五层结构讲完了,下面我们从用户的角度,看看到底是怎么上网的。

网络数据传输

我们已经知道,网络通信就是交换数据包。电脑A向电脑B发送一个数据包,后者收到了,回复一个数据包,从而实现两台电脑之间的通信。发送这个包,就需要两个地址:MAC地址和IP地址。

但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发。 网关
上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。

1号电脑把数据包发到网关A,必须知道网关A的MAC地址。所以,数据包的目标地址,实际上分成两种情况:

  1. 同一个子网络:对方的MAC地址,对方的IP地址。
  2. 不同的子网络:网关的MAC地址,对方的IP地址。
    发送数据包之前,电脑必须判断对方是否在同一个子网络,然后选择相应的MAC地址。接下来,我们就来看,实际使用中,这个过程是怎么完成的。

静态IP地址的配置

你买了一台新电脑,插上网线,开机,这时电脑能够上网吗?

懂电脑的童鞋应该知道,要上网就要先配置IP如图: IP配置
需要配置的有:1.本机IP地址,2.子网掩码,3.网关的IP地址,4.DNS的IP地址。

由于它们是给定的,计算机每次开机,都会分到同样的IP地址,所以这种情况被称作"静态IP地址上网"。
但是,这样的设置很专业,普通用户望而生畏,而且如果一台电脑的IP地址保持不变,其他电脑就不能使用这个地址,不够灵活。出于这两个原因,大多数用户使用"动态IP地址上网"。

动态IP地址

所谓"动态IP地址",指计算机开机后,会自动分配到一个IP地址,不用人为设定。它使用的协议叫做DHCP协议。
这个协议规定,每一个子网络中,有一台计算机负责管理本网络的所有IP地址,它叫做"DHCP服务器"。新的计算机加入网络,必须向"DHCP服务器"发送一个"DHCP请求"数据包,申请IP地址和相关的网络参数。
前面说过,如果两台计算机在同一个子网络,必须知道对方的MAC地址和IP地址,才能发送数据包。但是,新加入的计算机不知道这两个地址,怎么发送数据包呢?
DHCP协议做了一些巧妙的规定。

DHCP协议

相关文章

  • 上了这么多年网,终于弄明白来。

    作为一名搬砖的网络民工,一直在做网页,但是一直没有去仔细想过到底一台电脑是怎么上的网。最近看了一篇阮一峰的互联网协...

  • 活了这么多年,终于明白

    活了这么多年,终于明白,拥有一个懂你的人,比一个爱你的人更珍贵! 最好的感情是随意,却又彼此在意;是惬意,却又彼此...

  • 终于弄明白了

    早上醒来,小儿子拿着手机正看的入神,抖音上唱的什么来着,听着很是熟悉,却叫不出名字(穷穷竭力,胡写一气,句...

  • 9.0第5周检视 什么是真正的学习

    什么是真正的学习 上学上了很多年,考上了大学,还工作了很多年,感觉最近才弄明白什么是真正的学习。为什么有这样...

  • 今天终于弄明白“格物”

    《曾国藩家书》译注摘录: 1.格物,致知之事也。 译:格物,就是获取知识。 2.物者何?即所谓本末之物也。身、心、...

  • 我终于弄明白了

    我一直在想一个问题,我,是怎么一回事。 我不知道以前和未来我是否会存在于这个世界,只有这一次是真实的。 我带着心智...

  • 多年以后终于明白

    王菁满头大汗赶到凤凰大酒店的时候,婚礼现场已经来了很多人了,新郎新娘忙着在酒店门口迎宾。新娘王凤一看到王菁,不顾自...

  • 投资网贷这么久终于明白只赚不亏的硬道理

    投资网贷这么久终于明白只赚不亏的硬道理 入行网贷多年以来,开始总是在徘徊和挑选,似乎这种模式也适合我,似乎那种...

  • 多年以后我终于明白

    曾经妈妈同我讲过一句话:人的心都是斜着长的,永远只会疼自己生的,而对于生自己的就没有体贴入骨的感觉了!当时...

  • “让时间来证明”,多年后我终于明白

    昨天2020/5/20看到电脑屏保,感觉这句话好深刻。 以前就看到过“让时间来检验”“让时间来忘记”“让时间来证明...

网友评论

      本文标题:上了这么多年网,终于弄明白来。

      本文链接:https://www.haomeiwen.com/subject/ygkykftx.html