输入URL到网页显示中间经历了哪些过程?

1. 解析URL

浏览器先对URL进行解析,从而生成发送给web服务器的信息

image-20240718084355076

2. DNS查询

对URL解析之后可以拿到域名,然后通过DNS查询域名对应的IP地址

DNS的域名用 . 来分割的,越靠右的位置层级越高

比如www.server.com.

.根域在最顶层,下一层是.com顶级域,在下面是server.com

image-20240718084624523

域名解析流程也是一级一级进行的。

每次查询前,浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

image-20240718084659115

3. 建立Socket对象

客户端会通过调用Socket库,生成一个Socket对象,然后使用该对象向目标IP地址和端口发送一个连接请求。

4. TCP可靠传输

上面Socket对象发起一个连接请求后,就需要再TCP这里进行连接建立

三次握手建立连接

三次握手目的是保证双方都有发送和接收数据的能力

1

我们可以在了解一下TCP其他的知识

TCP报文头部格式

image-20240718091218052

  • 源端口和目的端口是为了让数据知道从哪里来到哪里去
  • 序号是为了 确定数据分割后,能按正确顺序进行重组
  • 确认序号 是为了确定数据发出去对方能正确收到。如果没有收到就重新发送,直到收到
  • 状态位 SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接
  • 窗口大小 TCP要做流量控制,通信双方各声明一个窗口,标识自己的处理能力
  • 校验和 用于检测数据在传输中是否发生了错误
  • 紧急指针 用于指示数据流中的紧急数据,让接收端优先处理

TCP分割数据

HTTP请求消息如果过长,超过了MSS长度,TCP就需要把HTTP的数据拆解为一块块的数据发送

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

image-20240718092320808

TCP报文生成

上面展示的TCP报文头部图中的数据部分,其实就是 HTTP头部+数据

image-20240718092623177

5. IP定位

TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。

IP报文生成

  • 源地址IP:客户端输出的IP地址
  • 目标地址:通过DNS域名解析得到的Web服务器的IP

IP 层报文

6. MAC两点传输

生成了 IP 头部之后,接下来网络包还需要在 IP 头部的前面加上 MAC 头部

MAC包头格式

发送方MAC地址接收方MAC地址 用于实现 两点之间的传输

在TCP/IP通信中,MAC包头的协议只使用

  • 0800:IP协议
  • 0806:ARP协议

image-20240718102837090

MAC地址怎么获取?

发送方 的MAC地址获取就比较简单了,存放在网卡生产时的ROM中

接收方的MAC地址怎么获取?

一般通过ARP协议找到对方路由器的MAC地址,ARP协议通过广播的形式在以太网中寻找MAC地址

查询后会将MAC地址缓存到ARP协议中,方便以后使用

ARP 广播

最终生成网络包

MAC 层报文

7. 网卡出口

网卡拿到数据报后,会在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

最终网卡将包转换为电信号,通过网线发出去

8. 交换机送别

  1. 电信号到达网线接口,交换机中的模块会进行接收

  2. 通过末尾的FCS进行错误校验,没问题就放在缓冲区中。有问题就丢弃或请求重新发送

  3. 交换机端口不具有MAC地址,所以直接将接收到的包放到缓冲区

  4. 交换机查询这个包的接收方MAC地址,查看自己的MAC表中是否有该信息,如果有就将包转发走,如果没有就以广播形式寻找

  5. 最终数据报通过交换机到达路由器

9. 路由器转发

  1. 电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验
  2. 检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包
  3. 完成包接收操作之后,路由器就会去掉包开头的 MAC 头部(MAC头部的作用就是将包送到路由器)
  4. 路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作
  5. 旧的MAC地址删除后,这里也需要重新封装一个新的MAC地址

10. 数据抵达服务器

数据抵达后,会将封装的数据包一层层拆开,然后将客户端需要的东西在返回回去

  • 服务器先开MAC头部,判断和自己是否符合
  • 开数据包的IP地址是否和自己符合
  • 查看TCP的头部,判断序列号是否是自己要的,如果是返回一个ACK;还有端口号, HTTP 的服务器正在监听这个端口号
  • 将包发给HTTP进程
  • HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里
  • HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址
  • 接着从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器,一直跳…
  • 到达最后一级路由器,看IP确认是自己的,就将包发给交换机,最后给到路由器
  • 客户端最终就收到了数据

网络分层模型

11. TCP挥手断开连接

断开连接的时候,不能像建立连接的那样,将ACK+FIN同时返回。

因为断开连接需要处理的问题多,就比如服务端消息没发送完,还没得到ACK;或者是服务端自己的资源要释放等。

所以服务端要经过一个等待,确定可以关闭连接了,重新发送一个FIN给客户端

image-20240718111026863

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
URL到页面显示中间经历以下过程: 1. 解析URL:浏览器首先会解析输入URL,包括协议(例如HTTP或HTTPS)、域名、端口号和路径等信息。 2. 域名解析:浏览器将域名发送给DNS(域名系统)服务器进行解析,以获取对应的IP地址。DNS服务器将返回一个或多个IP地址,浏览器将使用其中一个IP地址来建立与服务器的连接。 3. 建立连接:浏览器使用HTTP或HTTPS协议与服务器建立连接。对于HTTP,浏览器将发送一个包含请求的报文给服务器;对于HTTPS,还需要进行SSL/TLS握手过程来建立加密通信。 4. 发送请求:浏览器向服务器发送HTTP请求,请求可以包含HTTP方法(如GET、POST等)、请求头、请求体信息。请求头中包含了一些元数据,例如用户代理、Accept-Language等。 5. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,开始处理请求。这可能涉及动态生成页面内容、从数据库中获取数据、处理业务逻辑等。 6. 返回响应:服务器生成HTTP响应,并将其发送回浏览器。响应包含状态码、响应头和响应体等信息。状态码表示请求的处理结果,如200表示成功,404表示未找到页面等。 7. 浏览器渲染:浏览器收到服务器返回的响应后,开始解析响应。它会根据响应头中的内容类型确定如何处理响应体,例如渲染HTML页面、执行JavaScript脚本、加载CSS样式等。 8. 页面显示:浏览器根据解析和渲染的结果,将页面显示给用户。这包括显示文本、图片、视频、表单等内容,并且可能触发一些交互行为,如点击链接、提交表单等。 总结起来,URL到页面显示过程包括解析URL、域名解析、建立连接、发送请求、服务器处理请求、返回响应、浏览器渲染和页面显示等步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值