2、从输键入网址到显示网页,这期间发生了什么?
这期笔记主要还是参考了小林code的这边文章,讲解很详细很到位,有时间可以看看原文:
2.2 键入网址到网页显示,期间发生了什么? | 小林coding (xiaolincoding.com)
从你输入一个网址,到网页显示,这期间过程如下:
1、解析URL
浏览器做的第一步就是解析URL,将URL转变为HTTP或者HTTPS请求;
URL各部分的含义如下:
故URL的含义就是请求服务器端的文件资源。如果URL中只有协议和域名(把后面的目录和文件名省略掉了,http://www.server.com),则会进入到服务器端默认设置的资源中去。
2、产生Http请求
根据上一步解析URL后,产生对应的HTTP请求(如GET请求、POST请求等)
3、通过DNS协议,获得域名对应的ip地址
4、发送请求到服务端
4.1、应用程序通过socket库将请求数据发送给操作系统中的协议栈
4.2、协议栈中的上层部分(上层部分包含TCP和UDP)的TCP协议对数据进行处理
TCP在获取到应用程序的请求数据后,会和服务器进行三次握手建立连接,三次握手的目的是保证数据传输的可靠性。在建立连接之后才会进行数据的传输:
在传输数据前,TCP协议会将数据封装成一份份的TCP段,每一段中都包含一个TCP头部。TCP头部主要组成如下:
- 源ip地址和目标ip地址
- 确认号:确认是否对方是否收到
- 状态位:如ACK、SYN等,用于三次握手和四次挥手
- 窗口大小:进行流量控制
- 拥塞控制位:进行拥塞控制
数据封装好之后,会传输给协议栈下层部分
4.3、协议栈的下层部分(下层部分包括IP,ARP和ICMP)的IP协议对数据进行处理
将TCP段封装成IP包,每个IP包中头包含一个IP头部。IP头部主要组成如下:
- 源IP地址和目标IP地址:目标IP地址已经通过DNS获取到了
- 协议号:传输协议,Http是经过TCP传输的,所以协议号一般表示TCP
4.4、封装MAC头部
将MAC头部封装到IP包中,MAC头部主要组成如下:
- 源MAC地址和目标MAC地址
- 协议类型:MAC头部的协议类型只有IP和ARP两种,其中ARP协议更常用
其中源MAC地址容易获取,目标MAC地址则通过ARP协议获取。由于已经知道了服务器的ip地址,可以通过ip地址和掩码计算出目标子网(目标子网可能是路由器所在子网,也有可能是服务器所在子网)。然后ARP协议会在服务器对应的子网中广播寻找目标的MAC地址(可能是路由器的MAC地址,也可能时服务器的MAC地址),目标收到广播后回复自身的MAC地址,从而就得到了目标的MAC地址
4.5、通过网卡将二进制数据转换成电信号
通过网卡驱动程序控制网卡,网卡将最后封装好的请求数据(在计算机中由二进制的方式存储)转换成电信号
4.6、交换机
4.7、路由器
4.8、到达服务器端
5、请求到达服务器端
请求数据到达服务器端后,服务器端会进行层层解析:
- 链路层:拆开并解析MAC头部,若目标MAC地址与自身符合,则将该数据包向上层传输
- 网络层:拆开并解析IP头部,若目标IP地址和自身符合,且协议号是TCP,则将数据向上层传输
- 传输层:通过之前解析IP头部知道了传输协议是TCP,于是开始解析TCP头部。查看序列号,是当前需要的序列号则放入缓存中,并且返回给请求的发送方一个ACK;TCP头部里还有目标端口号,如果发现HTTP进程正在检测该端口号,则将数据传给HTTP进程
- 应用层:HTTP进程看到这个请求数据,发现这个请求数据是要访问一个页面,则将页面数据存到HTTP响应报文里,然后依次经过传输层(封装TCP头部)、网络层(封装IP头部)、链路层(封装MCA头部)然后经过相同的步骤发送到请求方那里去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了