简化版 http 请求全过程

当我们在浏览器中输入 http://www.caveshao.com 并回车,会依次发生以下过程:

  1. 首先我们会根据 DNS 协议将 www.caveshao.com 变为一个 IP 地址。 这个过程会分为两小步:首先查询本地的 host 文件,如果 host 文件中存储了这个网址对应的 IP,则不必进行第二步。如果 host 文件中没有存储该网址对应的 IP,计算机会通过 53 端口向 DNS 服务器发送一个 DNS 数据包,然后 DNS 服务器返回需要请求网址的 IP 地址。计算机此时会存储该网址的 IP 地址到 host 文件,这样下一次访问该网址时只需进行第一步就可以找到 IP 地址。至于 DNS 服务器的地址是什么,计算机可以遵循一套规则动态获取,也可以自己在计算机内设置一个静态的 DNS 服务器地址。

  2. 第二步,由于我们发送的是一个 http 网页请求,所以我们会根据 http 协议构造一个 http 数据包。数据包是逐渐向外扩充的,下方的每一个数据包都包含上一个数据包。

  3. 第三步,根据 TCP 协议,构造 TCP 数据包。 此过程中需要设置本机的端口与接收方的端口。由于是 http 请求,接收方的端口默认是 80。本机的端口是一个大于 1024 的合理整型数。TCP 数据包包含 http 数据包。端口代表着主机的一个运行程序的进程。

  4. 第四步,构造 IP 数据包,获取请求网址的 MAC 地址。构造 IP 数据包时,需要设置本机与所要请求的网址的 IP 地址,这两项此时都是已知的。获取 www.caveshao.com 的 MAC 地址前,需要通过本机的子网掩码对本机 IP 及接受方的 IP 分别进行二进制的 AND 运算。如果结果相等,证明两个 IP 在同一子网,根据 ARP 协议由本机向子网内所有主机机发送一个数据包。该数据包包括接受方的 IP,子网内所有主机在接到数据包后将本机 IP 与数据包内的 IP 比对。如果相等就会返回 MAC 地址给发送方。如果结果不相等,证明两个 IP 不在同一个子网,这是就会获取网关的的 MAC 地址。网关的 IP 地址是事先在本地设置好的。

  5. 第五步,构造以太网数据包,发送数据。根据以太网协议,设置发送方的 MAC 地址与接收方的 MAC 地址。如果发送方与接收方在同一网络内,发送方会向网络内所有主机发送数据包。各主机会将自己的 MAC 地址拿出来比对,如果与数据包的接收方的 MAC 地址一样,就会解析数据包主体。如果发送方与接收方不在同一子网内,数据包会发送至网关,由网关转发至接收方所在子网的网关,最后发送至接收方。

  6. 接收方,接收解析数据包。接收方在收到数据包后,用与发送数据相反的顺序,像剥洋葱一样取出 http 数据包,读出 http 请求,最后发送 http 响应。响应数据包的发送方式与请求的相同。

如果觉得文章有帮助,请点个喜欢支持一下。

《简化版 http 请求全过程》 Jf Brou 2017-09-01 03-41-52

    原文作者:牛鼻子老邵
    原文地址: https://www.jianshu.com/p/7eec25764afc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞