昨天我们发布了关于一文讲弄懂什么是vlan、三层交换机、网关、子网掩码,有很多朋友问到关于网络通信的原理,今天我们这一篇文章,算是对昨天文章进行一个补充。
首先我们要访问互联网,必须自己电脑上面有ip地址、子网掩码、网关、dns,这四样缺一不可。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>有了这四样,我们才具有访问网络的基本条件。
那么如何访问网络呢?完成网络通信呢?这里面我们举二个例子,就可以了解清楚了。
seline; word-break: break-word;">一、浏览器访问一个网页的通信过程
假设我们需要打开弱电行业网官方网站,域名为www.rdhyw.com。
seline; word-break: break-word;">第一步:域名解析,快速定位目标地址
互联网的通信是通过ip地址的,域名只是一个代号。
我们知道了域名,但是不知道ip地址,所以打开浏览器,输入弱电行业网域名www.rdhyw.com,浏览器会使用DNS协议。
DNS协议中,先向本地DNS服务器寻找,一般是路由器,希望从本地DNS服务器那里得到主机名对应的IP,能得到就得到,得不到还得向更高层次的DNS服务器求助,直到解析出主机名对应的IP。
找到后,就告诉我们弱电行业网的IP地址是172.194.72.104。于是,我们知道了IP地址。
seline; word-break: break-word;">第二步:打包报文,让对方了解你的请求
在获到ip地址后,浏览器将你访问弱电行业网的请求打包成http报文,然后将请求报文与弱电行业网的服务器ip地址发送给一个叫的tcp进程。
tcp是啥呢?我们常看到是TCP/IP协议,也就是传输控制协议,干的是相当于数据传输管理员的工作,有一套控制着数据的传输与接收的标准,过了他这关,你才能传输。
seline; word-break: break-word;">第三步:http触发tcp三次握手,建立基本信任
当tcp接收到发来的ip地址与服务器的访问请求时,就感觉很突然,这个请求安不安全?靠不靠谱,于是就需要验证下,怎么验证呢?建立三次握手。
于是tcp提供一条安全的通道,你俩先建立基本的熟悉与连接,互相勾引下。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>seline; word-break: break-word;">于是就:
seline; word-break: break-word;">第一次握手:用户——>服务器:弱电行业网,在吗,我想访问你,听到请回答。
seline; word-break: break-word;">第二次握手:服务器——>用户:老铁,在的,可以访问,你听得到我吗?
seline; word-break: break-word;">第三次握手:用户——>服务器:好的,我也听得到你,那我就访问你了。
其实过程就是相当于,你要登门拜访一个人,你得先在电话里至少要交流这三个回合,才能确定你可以去拜访他。
seline; word-break: break-word;">第四步:tcp传输http,正式建立连接
在经过了三次握手,tcp感受知道你俩的关系后,知道你是弱电行业网粉丝,于是就帮你们建立连接。
首先tcp正式将你请求打包一个ip包,里面包括你请求的ip地址与一个加密序列号,假设序列号为3567,发送给弱电行业网的服务器。
然后服务器收到请求的ip包后,也回复给用户一个ip包,告诉你,我收到了你的请求了,你请求访问的ip地址是对的,也收到序列号了。
最后,双方都确认后,就开始传输网页了。
seline; word-break: break-word;">第五步:网页传给用户
所有的都商量好了, 弱电行业网服务器开始把自己的主页内容,也就是网页内容传给用户,也就是下图内容,这个就是我们最终所看到的网页。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>seline; word-break: break-word;">二、vlan间的通信原理
vlan是我们网络中最常见,关于vlan的通信是如何实现的呢?了解vlan的通信原理,有助于我们更好使用vlan。
seline; word-break: break-word;">第一种:同一个vlan的通信
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>交换机通过对各端口所连计算机MAC地址的学习,生成如下的MAC地址列表。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>seline; word-break: break-word;">那么计算机A与同一VLAN内的计算机B之间通信如何进行通信呢?
计算机A发出ARP请求信息,请求解析B的MAC地址。
交换机收到数据帧后,检索MAC地址列表中与收信端口同属一个VLAN的表项。结果发现,计算机B连接在端口2上,于是交换机将数据帧转发给端口2,最终计算机B收到该帧。收发信双方同属一个VLAN之内的通信,一切处理均在交换机内完成,原理比较简单。
seline; word-break: break-word;">这里简单补充下,什么是arp?
ARP就是地址解析协议,可以利用ip地址找到网卡的物理地址。
seline; word-break: break-word;">第二种:不同vlan间如何完成通信
接下来是这一讲的核心内容,不同VLAN间的通信。不同vlan间的通信就需要有路由功能,一般我们是三层交换机。
让我们来看下一下计算机A与计算机C之间通信时的情况。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>红色是VLAN1,计算机A,网络地址为192.168.1.0/24。
蓝色是VLAN2,计算机B,网络地址为192.168.2.0/24。
seline; word-break: break-word;">第一步:判断计算机A与计算机B是否在同一个vlan中
计算机A将自己的子网掩码与计算机C的ip地址进行&运算后,发现这他们不在同一个vlan,那么如何实现通信呢?
seline; word-break: break-word;">第二步:获到路由器的mac地址后,封装数据包
在确定计算机A与计算机C不在同一个vlan后,计算机A因此会向设定的默认网关转发数据包。在发送数据帧之前,计算机A需要先用ARP获取路由器的MAC地址。
然后计算机A封装好自己的IP地址和MAC地址,同时也封装好目标主机B的IP地址和路由器的MAC地址,封装成数据包。如图数据①。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>seline; word-break: break-word;">第三步:数据包发送给路由模块,表明身份
接下来就是按图中发送往计算机C去的数据包。
交换机通过检索MAC地址列表后,经由内部汇聚链接,将数据包转发给路由模块。在通过内部汇聚链路时,数据包被附加了属于红色VLAN1的标识,如图中数据包②。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>也就是交换机的路由知道了,这是vlan1发来的数据,这步就是将主机A的身份进行识别,打个标签,他是vlan的主机。
seline; word-break: break-word;">第四步:告诉交换机路由模块自己意图
接着,根据路由器内部的路由表,判断该向哪里中继。
因为目标网络192.168.2.0/24是直连路由器的网络、且对应蓝色VLAN2;因此,接下来就会从蓝色VLAN接口经由内部汇聚链路转发回交换机。在通过汇聚链路时,这次数据包被附加上属于蓝色VLAN2的识别信息,这时,数据包的目标MAC地址被改写成计算机C的目标地址,如图数据包③。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>seline; word-break: break-word;">第五步:实现通信
交换机收到这个帧后,检索蓝色VLAN2的MAC地址列表,确认需要将它转发给端口3。由于端口3是通常的访问链接,因此转发前会先将VLAN识别信息去除(如图数据包④)。最终,计算机C成功地收到交换机转发来的数据。
seline; word-break: break-word; color: rgb(93, 93, 93); overflow-wrap: break-word; white-space: normal;">seline; word-break: break-word; display: block; max-width: 100%; border-radius: 4px;"/>