文章目录
在浏览里输入URL后回车会发生什么
1. 查找DNS缓存
- 先查找浏览器DNS缓存,看是否存放目标网络的IP地址;
- 如果不在浏览器缓存,则浏览器将对操作系统发起系统调用,查询操作系统本地缓存;
- 如果不在操作系统本地缓存,则浏览器会查询与之相连的路由器缓存;
- 如果不在路由器缓存,则浏览器会检查ISP【本地通信服务商】缓存;
若以上四步均没有查询到目标网络的IP地址,则发起DNS查询。
2. 发起DNS查询
- 判断DNS服务器和我们的主机是否在同一子网内:
浏览器通常使用本地操作系统配置的默认 DNS 服务器来进行 DNS 查询。- 在同一子网,则采用 ARP 地址解析协议对 DNS 服务器进行 ARP 查询(ARP协议在这里是为了找到DNS服务器的MAC地址用于发起请求)
- 不在同一子网,则采用 ARP 地址解析协议对默认网关进行查询(跨网段通信过程中使用的MAC首先是网关的MAC,网关收到后会进行替换源MAC为自己的,目的MAC为目标主机的或者是下一个网关MAC)
若此时还是查询不到 IP 地址,则根据拿到 DNS 服务器或者默认网关的 IP 地址,继续进行 DNS 请求
使用53端口先向本地 DNS 服务器发送 UDP 请求包,此处一般使用 UDP 协议(如果响应包太大,则使用 TCP 协
议) 。(客户端发送递归查询)
- 如果本地DNS服务器没有查询到 IP 地址:
则本地DNS服务器会发送一个迭代查询请求,一层一层向高层DNS服务器查询,直到查询到 IP 地址,则将结果返回。【解释:DNS 是分布式域名服务器,每台服务器只维护一部分 IP 地址到网络地址的映射,没有任何一台服务器能够维持全部的映射关系】。- 本地域名服务器先向根域名服务器发起请求,根域名服务器将顶级域名服务的地址返回给本地域名服务器
- 本地域名服务器根据顶级域名服务器地址向顶级域名服务器发起请求,然后得到权限域名服务器地址
- 本地域名服务器通过权限域名服务器地址向权限域名服务器发起请求,然后得到该域名的ip地址
3. 封装TCP数据包
拿到 IP 地址后,根据 URL 中的端口可知端口号【HTTP:80;HTTPS:443】,一般先会先尝试建立 HTTP 连接;
准备 TCP 数据包:
步骤:
- 将应用层传递下来的实际数据,在传输层添加TCP首部;
- 将传输层传下来的数据在网络层添加IP首部;
- 将网络层传输下来的数据,在数据链路层添加以太网首部,并在传输介质中进行传输。
4. 浏览器与目标服务器建立TCP连接
经过上述DNS和ARP查询流程后,浏览器会收到目标服务器的IP和MAC地址,然后经过三次握手后建立TCP连接;
- 使用HTTP协议:浏览器发送请求到服务器,如果使用的是HTTP协议,则服务器直接返回结果;
- 使用HTTPS协议:
- 如果不是 HTTP 协议(因为先尝试HTTP连接),则服务器会返回一个以 3 开头的重定向消息,告诉浏览器使用的 HTTPS,IP 没变,只是端口号变成 443;完成四次挥手断开TCP连接;
- 重新建立 TCP 连接,将端口号修改为 443,同时沟通好双方的使用的认证算法、加密和解密算法,在此过程中也会检查对方的 CA 安全证书,采用 SSL 加密技术进行传输数据。
5. 浏览器发送HTTP/HTTPS请求到web服务器
主要使用两种请求方式:
- 浏览器发送get请求,要求目标服务器提供输入的网页;
- 浏览器发送post请求,表示填写的是表单。
- 还有put, delete等
6. 服务器处理请求
服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理。这可能涉及到查询数据库、处理业务逻辑等操作。
7. 服务器发送HTTP响应
服务器处理完请求后,会生成一个HTTP响应。这个响应包含了请求的资源以及其他相关的信息,如响应状态码、响应头部、响应体等。
8. 客户端接收HTTP响应
浏览器接收到服务器发送的HTTP响应后,会对响应进行解析。它会检查响应的状态码,以确定请求是否成功,并根据响应的内容类型来决定如何处理。
9. 渲染页面
- 如果响应的内容类型是HTML页面,浏览器会解析HTML代码,并根据CSS样式和JavaScript脚本来渲染页面。它会将页面的结构、样式和交互行为展示给用户。
- 检查HTML标记并发送GET请求以获取网页上的其他元素【图像、CSS样式、JS文件等】,该静态文件一般由浏览器缓存,再次访问,不用重新请求;
10. 关闭TCP连接
一旦页面渲染完成,浏览器会关闭与服务器之间的TCP连接。这是通过四次挥手来完成的,即浏览器发送一个关闭连接的请求,服务器回复一个确认关闭连接的响应,最后浏览器再次发送一个确认关闭连接的响应。
ARP 地址解析协议
OSI模型把网络工作分为七层(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的包头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
1. ARP协议的定义
地址解析协议(Address Resolution Protocol,ARP):ARP协议可以将IPv4地址(逻辑地址)转换为各种网络所需的硬件地址(物理地址)。地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv4协议,IPv6使用邻居发现协议(NDP)替代。
ARP协议目前最广泛应用于寻找32位IPv4地址与以太网的48位MAC地址之间的映射。
ARP协议是网络层协议。
2. ARP缓存
ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址–>MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
为使广播量最小,ARP维护IP地址到MAC地址映射的缓存以便将来使用。ARP缓存可以包含动态和静态项目。动态项目随时间推移自动添加和删除。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。
3. 工作过程
3.1 同一子网
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
- 第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
- 第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
- 第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
- 第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
3.2 不同子网
当通过上一步无法获取到主机B的MAC地址时,主机A会向子网内的已知的某个可以转发到主机B的网关或默认网关发起 ARP Request,该网关作为代理会向子网外的区域进行广播,主机B收到后就会发出响应,响应会顺着转发出去的路径回到主机A所在子网并被主机A收到ARP响应,此时,主机A和主机B都有了对方的IP和MAC地址,可以进行通信。
ARP协议参考自百度百科。