浏览器输入URL后,背后的技术?

浏览器输入URL后,背后的技术?

  • 浏览器对用户输入的网址做初步的格式化检查,只有格式化检查正确才会进去下一步。
  • 在没有告诉浏览器使用哪个协议的情况下,浏览器默认使用http协议。

接下来对url进行解析,根据这些信息生成HTTP请求消息:

2

2

  • 浏览器找到DNS服务器解析域名,将域名解析为IP地址
  1. DNS先查自己的缓存,有直接返回,没有找本地硬盘里的host文件,也没有,找8.8.8.8服务器。

那么我们的本机的DNS服务器地址在哪呢?

打开win10的cmd窗口,输入ipconfig/all,以我的电脑为例会出现以下信息:

QQ截图20210902225346

关键点解释:

  1. 物理地址(网卡物理地址):网卡物理地址存储器中存储单元]对应实际地址称物理地址,与逻辑地址相对应。网卡的物理地址通常是由网卡生产厂家写入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),它存储的是传输数据时真正赖以标识发出数据的电脑和接收数据的主机的地址。也就是说,在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。如同我们身份证上的身份证号码。
  2. DHCP(动态主机配置协议):是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
  3. 自动配置已开启:是否自动配置ip地址
  4. IPv6和IPv4:IP协议中那就是给因特网上的每台计算机和其它设备都规定了一个唯一的地址,叫做“IP地址”。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。
  5. 子网掩码:子网掩码(subnet mask)又叫网络掩码地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址主机地址两部分。
  6. 默认网关:缺省网关(Default Gateway)是子网外网连接的设备,通常是一个路由器。当一台计算机发送信息时,根据发送信息的目标地址,通过子网掩码来判定目标主机是否在本地子网中,如果目标主机在本地子网中,则直接发送即可。如果目标不在本地子网中则将该信息送到缺省网关/路由器,由路由器将其转发到其他网络中,进一步寻找目标主机。
  7. DNS服务器:DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

以上只是对个别概念做了最基本的解释,其中的知识和原理还有很多。

到这里可以知道浏览器获取域名后,通过DNS服务器(59.70.159.10)将域名转化为相应的IP返回给浏览器。

此时浏览器知道自己的IP地址和目标IP地址,就可以交给TCP/UDP协议去处理了。

首先上张图:接下来我们研究的是数据包是如何到达服务器的?

1

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

协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。

应用程序网络应用程序(浏览器,Web服务器)Socket库
操作系统协议栈(TCP,UDP)IP
驱动程序网卡
硬件物理硬件网卡

应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。

协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据刽被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

此外 IP 中还包括 ICMP 协议和 ARP 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。

  • HTTP是基于TCP协议传输的,先了解下TCP协议

源端口号和目标端口号:数据包发送的客户端和服务器的端口号

序号:为了解决包乱序的问题

确认序列:目的是确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决不丢包的问题。

状态位:例如 SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。

窗口大小:TCP 要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力,别发送的太快,撑死我,也别发的太慢,饿死我。

为了更直观的了解,使用抓包工具抓包来查看TCP协议的具体内容:

QQ截图20210926171241

Frame:物理层

Ethernet:数据链路层

Internet:网络层

Transmission control :传输层

Hypertext:应用层

现已Source(10.64.116.167)到Destination(42.193.67.112)为例来进行抓包测试,该测试将从最底层的数据链路层到应用层来进行分析:

该传输过程中所有的字节如下所示:

QQ截图20210926173943

  1. 数据链路层协议:

11

通过抓包工具,来一一对照:

目的地址6个字节:

QQ截图20210926175337

通过工具可以看出,前六个字节表示的是目的地址。

QQ截图20210926175357

紧挨着六个字节表示源地址。

QQ截图20210926175425

紧挨着两个字节表示类型,即IPv4

后面的是IP数据包则在网络层来分析:

  1. 网络层,先上图,IP数据包的格式

QQ截图20210926175941

与数据链路层的分析方法一致:

4位版本与4位首部长度:

QQ截图20210926180309

对照上面的协议格式,直到最后一个32位目的IP地址如下:

QQ截图20210926180627

剩下的字节为数据,交给下一层的TCP协议去处理

  1. 传输层(TCP)协议:

4

对照字节数和协议可以继续分析,此处就不一一展开,如下则表示要发送的HTTP协议内容。

QQ截图20210926181924

  1. 应用层HTTP

就这样,从最初的数据链路层(MAC帧)到网络层(IP数据报)再到传输层(TCP报文)再到应用层(HTTP)所传输的字节数据就分析完毕了。

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

从源码角度看待三次握手,以我抓取的数据包为例子:

这是一次完整的三次握手:

QQ截图20210926184535

QQ截图20210926184700

第一次握手:客户端向服务器端发送数据:(同步序列编号)SYN=1,(序列号)Seq=X(327586052)

QQ截图20210926184937

第二次握手:服务器向客户端发送SYN=1,(确认号)ACK=X+1(327586052+1=327586053),Seq=Y(4093620439)

QQ截图20210926185120

第三次握手,客户端向服务器端发送ACK=Y+1(4093620439+1=4093620440),Seq=Z(327586053)

QQ截图20210926185154

过程如下:

  • 客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口(第一次握手,由浏览器发起,告诉服务器我要发送请求了)
  • 服务器发回一个带 SYN=1, ACK=X+1, Seq=Y 的响应包以示传达确认信息(第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧)
  • 客户端再回传一个带 ACK=Y+1, Seq=Z 的数据包,代表“握手结束”(第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧)

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

在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,组装好 TCP 报文之后,就需交给下面的网络层处理。

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

根据路由表规则,判断哪一个网卡作为源地址IP。

然后再将IP地址封装为MAC帧。最后再通过网卡将数字信号转为电信号,在通过一层一层的想上传输,找到目标服务器的端口。

接下来发送HTTP请求:

请求报文由请求头,请求行,请求体三个部分组成:

QQ截图20210926205528

  1. 请求行包含:请求方法,URL,协议版本
  • 请求方法包含 8 种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。
  • URL 即请求地址,由 <协议>://<主机>:<端口>/<路径>?<参数> 组成
  • 协议版本即 http 版本号
  1. 请求头包含请求的附加信息,由关键字/值对组成,每行一对,关键字和值用英文冒号:分割
  2. 请求体:承载了多个请求参数的数据。
  • 服务器处理请求并返回HTTP报文

  • 浏览器解析页面

  • 断开连接

当数据断开时,需要断开tcp连接,此时发起tcp四次挥手:

QQ截图20210926210227

  • 发起方向被动方发送报文,Fin、Ack、Seq,表示已经没有数据传输了。并进入 FIN_WAIT_1 状态。(第一次挥手:由浏览器发起的,发送给服务器,我请求报文发送完了,你准备关闭吧)
  • 被动方发送报文,Ack、Seq,表示同意关闭请求。此时主机发起方进入 FIN_WAIT_2 状态。(第二次挥手:由服务器发起的,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧)
  • 被动方向发起方发送报文段,Fin、Ack、Seq,请求关闭连接。并进入 LAST_ACK 状态。(第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧)
  • 发起方向被动方发送报文段,Ack、Seq。然后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段以后关闭连接。发起方等待一定时间未收到回复,则正常关闭。(第四次挥手:由浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧)。

总结来说分为以下几个过程:

  1. DNS解析:将域名解析为IP地址
  2. TCP连接:三次握手
  3. 发送HTTP请求
  4. 服务器处理请求返回HTTP报文
  5. 浏览器渲染页面
  6. 断开连接:TCP四次挥手
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值