文/阿敏其人
本文出自“阿敏其人”简书博客,转载须取得同意。
首先,我们平时访问的网站,比如www.baidu.com,这个叫做域名。
一个域名,一般都对应这一个ip地址(也可能对应好几个ip)。
![](https://img.haomeiwen.com/i1083096/50fd3a3c2f5aa9a7.png)
我们知道,通过ip肯定也能访问网站的。
![](https://img.haomeiwen.com/i1083096/4ba4ccd18e47a8fc.png)
一、简洁版流程
我们通过域名访问网站的服务器。简单来说经过了如下几步:
1、通过DNS服务器把域名转成对应的ip
2、通过tcp协议,浏览器跟服务器通过 3次握手 建立连接。
3、建立连接后,浏览器通过http协议 正式发送一个request,比如get请求
4、服务器收到request,返回一个response
5、浏览器通过 4次挥手 ,关闭连接。
把域名转成对应的ip的过程,有一套缓存机制。
先找本地缓存,后找网络。如下流程中,1如果找到了,就不会执行2了。
1、浏览器本地缓存:浏览器会在本地的缓存中查找是否存在当前访问域名的缓存
2、host文件:当前操作系统的hosts文件是否写有IP和域名对应的关系
3、本地的Local:DNS Local查找是否写有IP和域名对应的关系(DNS其实就是我们的交换机或者路由器配置的DNS)
4、网络上的DNS
从tcp协议的角度看
从tcp协议的角度看,关心的事情只有3个步骤
连接连接 (3次握手)
request和response
关闭连接 (4次挥手)
二、相对复杂版
本节点会涉及到一些铺垫知识,当然不感兴趣可以直接略过查看二.2。
二.1、知识点铺垫
涉及到简单的:
- 集线器
- 交换器
- 路由器
- arp协议
- 默认网关
- 子网掩码
- mac地址
二.1.1 集线器和交换机
二.1.1.1 两台电脑直接通过网线传输数据
![](https://img.haomeiwen.com/i1083096/58f07c2014612d03.png)
如果两台电脑之间通过网线连接是可以直接通信的。需要设置三个东西:
- 1、
ip
- 2、
网络掩码 (子网掩码)
- 3、
ip地址需要控制在同一网段内
- 同一网段举例: 一台为192.168.1.1另一台为192.168.1.2则可以进行通信
- ip地址本来是是0-256,但是我们
只能用2-254
三者缺一不可。
二.1.1.2 多台电脑内部通信
多台电脑组成一个网络的时候,可以用集线器或者交换机。
集线器,是旧时代的产物。
二.1.2 集线器
集线器,一般叫做 hub。
- 接口较少情况下,可以用集线器
- 集线器通过广播的方式发送数据,每一次发送所有关联的电脑谁都会收到数据,
- 集线器有个缺点,它以广播的方式进行发送任何数据,即如果集线器接收到来自A电脑的数据本来是想转发给B电脑,如果此时它还连接着另外两台电脑C、D,那么它会把这个数据给每个电脑都发送一份,因此会导致网络拥堵
![](https://img.haomeiwen.com/i1083096/92bda835bc0cacab.png)
如果用一句话来总结集线器的话:通过广播的方式全局收发数据,容易造成堵塞。
二.1.3 交换机
交换器一般叫做 switch。
- 克服了集线器以广播发送数据的缺点,当需要广播的时候发送广播,当需要单播的时候又能够以单播的方式进行发送
- 它已经替代了之前的集线器
- 企业中就是用交换机来完成多态电脑设备的链接成网络的
![](https://img.haomeiwen.com/i1083096/3b6fae9f5449c68d.png)
比如192.168.1.1(记为A) 想给通过 192.168.1.2(记为B)发消息。
直接通过交换机不行,中间还会用到==arp==协议。
1、A先看看自己的arp缓存里面有没有B的mac地址。如果没有,执行第2步如果有,执行第4步。
-
2、 以
广播的方式跟交换器说自己 想跟B通信。交换器通过arp协议通知到全部网卡
3、一番查找之后,B机器知道别人要跟自己通信,就把自己的mac地址通过 **单播** 的方式通过交换机告诉A。
4、A拿到B的mac地址之后,(会缓存起来)就可以通过指定ip和B通信了。
注:可以通过 arp -a
命令查看当前的电脑缓存的其他机器的网卡上的mac地址。
关于mac地址补充
1、mac地址前3部分表示网卡的生产厂商,后六位在这个厂商对这个网卡的唯一标志
2、每个网卡除了有一个自己身为的mac地址,还有一个为FF:FF:FF:FF:FF:FF
的地址。(利用这个FF:FF:FF:FF:FF:FF
可以实现一点网络攻击,比如arp攻击)
如果用一句话来总结交换机的话:可以广播,可以单播,在数据收发的过程,目的ip和源ip不变,一直变化的是mac地址。可以通过arp协议寻找到目标ip的mac地址。
二.1.3 路由器
我们把具有转发数据能力的设备,称之为网关。默认网关一般是路由器,路由器至少有两个网卡。
同一个网段下,多台电脑通过交换机来通信是没问题的,但是两个网段下想要通信,就需要路由器了。
比如192.169.1.1和192.168.2.1 就是两个不同的网段。
比如192.168.1.1,其中第三部分就是网段。
![](https://img.haomeiwen.com/i1083096/6eeb01208f7121a8.png)
按照上图,比如PC1的ip是192.168.1.1,PC3的ip是192.168.2.1,他们在不同的网段下。
那么PC1发消息时,发现对方跟自己不在同一个网段。
1、192.168.1.1会通过switch0先发给192.168.2.1,但是mac地址必须是路由器的192.168.1.4的mac地址。不然路由器是根本就不收。
2、switch0 发给Router0的192.168.1.4,发现数据不是给自己的,但是自己又具有网关的转发能力,所以转给192.168.2.4
3、到了192.168.2.4时,该消息的mac地址在路由器上会被改成192.168.2.1的mac地址。(不然PC3根本就不收)
一句话总结简介总结路由器:路由器扮演者默认网关的角色(具有转发数据能力的设备,称之为网关),路由器至少有两个网卡,两个网卡就可以连接不同的两个网段,这样不同网段下的ip就可以互相收发数据了。
二.2、浏览器访问服务器
![](https://img.haomeiwen.com/i1083096/142733ff196c89ba.png)
大致流程
-
1、PC1要访问 www.baidu.com 这个地址,首要要到到DNS服务器把域名转成ip
DNS : Domain Name System(域名服务器)- PC1首先会通过switch0,利用arp得到默认网关的192.168.1.254的mac地址,然后消息再转到默认网关的另一端,这个另一端通过互联网发送到DNS服务器
-
2、
NDS服务器把域名解析成ip之后就会把域名对应的ip发给PC1
-
3、
PC1拿到ip之后,那么就浏览器要访问服务器,会通过tcp协议跟服务器进行3次握手 (3次握手是为了 建立连接)
-
4、
握手建立完成之后,PC1会通过http协议向服务器发送request数据包。(请求方式、cookie之类的),然后得到服务器的response,没其他意外通过response的数据进行渲染页面就展示出来了。
-
5、
PC1得到服务器的相应之后,就要关闭连接了,这时候通过tcp协议向服务器发送4次挥手。(4次挥手是为了断开连接)
当前阶段就到这里了。
如有空闲,再做完善。
文中多少有一些不谨慎的地方,请网络专业的小伙伴见谅。
对于非网络方向的开发来说,建一个小小的框架比死磕分支要来得实际。
先把大致框架搭建起来,真正需要时,再系统补充,方为常道。
不妥之处,还望指点。
本文完。
参考:
输入网址后,浏览器从访问服务器到呈现网页的过程
其他相关图片,侵删。
网友评论