浏览器输入网址后,期间发生了什么?

浏览器输入网址后,期间发生了什么?

  1. 首先对URL进行解析,确定了Web服务器和文件名

  2. 发送前,根据服务器域名查询对应的IP地址,首先会检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。之后依次向路由器、ISP DNS查询是否存在【相应的对应关系】,在前面所有步骤没有缓存的情况下,本地 DNS 服务器会将请求转发到互联网上的根域,若最终依然找不到,返回目的主机不存在。

  3. 通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈。

  4. 协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。
    浏览器输入网址后,期间发生了什么?

  5. 协议栈上半部分的两块分别是负责收发数据的 TCP 和 UDP 协议,它们会接受应用层的委托执行收发数据的操作。

  6. 协议栈的下面一半是用 IP 协议控制网络包收发操作,上传数据时,数据被切分成一块块的网络包。

  7. 在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手。

  8. 如果 HTTP 请求消息比较长,超过了 MSS 的长度, TCP 就需要把 HTTP 的数据拆解一块块的数据发送,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

  9. 因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。

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

  11. 在 MAC 包头里需要发送方 MAC 地址和接收方目标 MAC 地址,用于两点之间的传输。

  12. IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号。 负责执行这一操作的是网卡。

  13. 网卡驱动从 IP 模块获取到包之后,会将其复制到网卡内的缓存区中,接着会其开头加上报头和【起始帧分界符】(用来表示包起始位置的标记),在末尾加上用于检测错误的【帧校验序列】(用来检查包传输过程是否有损坏)。

  14. 最后网卡会将包转为电信号,通过网线发送出去。