浏览器输入url到网页展示过程
总图:

1.解析URL
 浏览器的第一步工作是解析url,从而生成发送给web服务器的请求信息。
 URL组成如图:

如果上图中表示数据的源的路径名为空呢?这时浏览器会默认访问根目录下的/index.html或者/default.html文件,当对URL解析完成后,浏览器就会开始构造HTTP请求消息

2.DNS查询
 当浏览器解析URL并生成请求消息后就需要借助操作系统将这个请求发给web服务器,但在发送之前,还有一项工作需要完成那就是查询服务器域名对应的IP地址,因为操作系统发送消息时,必须提供对方的IP地址,相关域名的知识自行百度。
 域名解析流程:
 以www.server.com举例:
 (1) 客户端首先向本地域名服务器发送DNS请求查询www.server.com的IP是啥,本地DNS如果缓存里的表格能找到,则直接返回查到的IP,如果没有则向根域名服务器查询;
 (2)根DNS收到本地DNS的请求后,发现是.com结尾的,会将.com域名的顶级域名服务器地址返回;
 (3)本地DNS收到地址后,发起请求查询,顶级域名服务器发回负责www.server.com的权威域名地址DNS地址;
 (4)本地DNS转向权威DNS服务器查询,权威服务器返回www.server.com对应的IP地址;
 (5)本地DNS再将IP返回给客户端,客户端和目标建立连接。
至此,完成DNS的解析过程。

 注意:不是每次查询都要从头开始查询,因为有缓存这个东西,浏览器首先会看自己的缓存有没有这个域名对应的IP,如果没有再去问操作系统,操作系统也没有,再去hosts文件看,最后才会去本地DNS查询,然后执行以上过程。
3.协议栈
 在获取到目标IP后,就可以把HTTP的传输工作交给操作系统中的协议栈。
 协议栈位置及组成如图:
	
 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
	此外 IP 中还包括 ICMP 协议和 ARP 协议。
ICMP用于告知网络包传送过程中产生的错误以及各种控制信息。ARP用于根据 IP 地址查询相应的以太网 MAC 地址。
 IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。
TCP:
 关于TCP的相关知识这里不在详细介绍,自行百度。
 在HTTP传输数据之前,需要先建立连接,而TCP的连接,通常称之为三次握手。
	
- 
一开始,客户端和服务端都处于
CLOSED状态。先是服务端主动监听某个端口,处于LISTEN状态。 - 
然后客户端主动发起连接
SYN,之后处于SYN-SENT状态。 - 
服务端收到发起的连接,返回
SYN,并且ACK客户端的SYN,之后处于SYN-RCVD状态。 - 
客户端收到服务端发送的
SYN和ACK之后,发送对SYN确认的ACK,之后处于ESTABLISHED状态,因为它一发一收成功了。 - 
服务端收到
ACK的ACK之后,处于ESTABLISHED状态,因为它也一发一收了。TCP封装端口
 
 三次握手的目的是保证双方都有发送和接收的能力。
 经过TCP层的封装后结果如图:

IP:
 IP层大概作用是确定封装IP
 封装完成后数据包如图:

MAC:
	紧接着是封装MAC地址,自己的MAC地址容易获取(网卡生产时就已经确定),那么怎么获取对方的MAC地址呢?此时就需要 ARP 协议帮我们找到路由器的 MAC 地址。ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。
 得到对方MAC地址后封装到MAC头部里结果如图:

4.网卡
 网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。
 网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。

5.交换机
 交换机的 MAC 地址表主要包含两个信息:
- 
一个是设备的 MAC 地址,
 - 
另一个是该设备连接在交换机的哪个端口上。

 
	举个例子,如果收到的包的接收方 MAC 地址为 00-02-B3-1C-9C-F9,则与图中表中的第 3 行匹配,根据端口列的信息,可知这个地址位于 3 号端口上,然后就可以通过交换电路将包发送到相应的端口了。
所以,交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。
 当然了如果找不到的话对应的端口的话,交换机就会以广播的形式向所有端口发送。
6.路由器
 路由器的基本原理:
 路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。
 当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
 路由器的包接收操作:
	首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。
 如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。
 总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。
 查询路由表确定输出端口:
 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。
 MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
	接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。
 转发操作分为几个阶段,首先是查询路由表判断转发目标。
	
在互联网中经过多层路由器转发,终于到了目标地址......
7.到达服务器端
 解析数据包:

当初怎么封装包的,现在就怎么解封包,像拿快递一样。
最后服务器端拿到客户端请求的资源,然后构造响应消息,再发回去,浏览器解析渲染展示网页,然后客户端断开连接,TCP四次挥手,结束。

                
            
        
浙公网安备 33010602011771号