总图:
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四次挥手,结束。
标签:网页,url,IP,端口,地址,网卡,MAC,浏览器,路由器 From: https://www.cnblogs.com/dwinternet/p/17779145.html