输入网址到网页显示的整个过程
一、根据HTTP协议,产生请求报文
首先浏览器做的第一步工作就是要对 URL 进行解析,生成发送给 Web 服务器的请求报文,该报文中包含请求方式、协议版本、Web服务器的域名、请求数据等。
请求报文并不能直接发送给Web服务器,因为仅仅通过域名,并不能定位Web服务器的网络地址,还需要将域名解析成IP地址,这个时候就需要用到DNS域名解析。
二、DNS解析服务器域名
浏览器生成 HTTP请求报文后, 会通过DNS服务器对Web服务器域名进行解析,获取域名对应的IP地址。
DNS缓存:每次解析域名,其实并不是都要经过这么多的步骤,因为存在DNS缓存。
浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。
三、协议栈
通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。
协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。
应用程序(浏览器)通过调用 Socket套接字,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输层协议,会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络层收发数据包。在网络中传输数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
此外 IP 协议中,还包括 ICMP协议和 ARP协议。
ICMP协议用于告知网络包传送过程中产生的错误以及各种控制信息。
ARP协议用于根据 IP 地址查询相应的以太网 MAC 地址。
IP 协议下面的网卡驱动程序负责控制网卡硬件,而网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。
四、TCP协议
TCP分割数据
- MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
- MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
HTTP 是基于 TCP 协议进行数据传输,如果 HTTP 请求消息比较长,超过了 MSS的长度,这时 TCP 就需要把 HTTP 的数据以 MSS的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。
TCP报文生成
TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。
在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据。
生成 TCP 报文之后,就需交给下面的网络层IP协议进行处理。
五、IP协议
TCP 协议在执行连接、收发、断开等各阶段操作时,都需要委托 IP 协议将数据封装成网络包发送给通信对象,所以需要按照IP协议生成报文。
在 IP 协议首部格式中的协议号:因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。
在 IP 协议的首部格式的源地址 IP 和 目标地址 IP:
源地址IP:客户端的 IP 地址;
目标地址IP:即通过 DNS 域名解析得到的 Web 服务器 IP。
接下来需要通过MAC地址,完成两点之间的传输。
六、通过MAC地址完成两点之间传输
生成IP协议报文后,还需要加上MAC头部,在 MAC 包头里需要发送方 MAC 地址和接收方目标 MAC 地址,用于两点之间的传输。
在 TCP/IP 通信协议中,MAC包头的协议类型使用:
- 0800 : IP 协议
- 0806 : ARP 协议
收发双方的MAC地址
发送方的 MAC 地址:由于MAC 地址是在网卡生产时写入到网卡 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了。
接收方的 MAC 地址:通过查询路由表,可以查找到接收方的IP地址,然后通过ARP协议以广播的形式,根据接收方的IP地址查找MAC地址。
七、网卡
网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。
网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
- 起始帧分界符是一个用来表示包起始位置的标记
- 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏
最后网卡会将包转为电信号,通过网线发送出去。
八、完整的协议处理流程
感谢你花时间读到这里~ 如果你觉得这篇内容对你有帮助,不妨点个赞让更多人看到;如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!😊😊