web页面请求过程

前言:整体过程

一句话描述这个过程:打开浏览器,输入 URL,连接服务器,渲染服务器返回的结果。

  • 本地主机与服务器间的通信是两个进程间相互发送报文,而进程是通过 socket 套接字发送和接收报文的。想要收发 socket ,首先主机与服务器需要通过 TCP 三次握手建立 TCP 连接,连接建立之后,把请求报文放入套接字,然后经过 传输层、网络层、数据链路层,层层封装,最终经过以太网路由转发给目的服务器
  • 服务器收到请求后,返回响应报文,本地主机收到响应报文后,经由浏览器渲染展示。

那么在这个过程中,首先我们需要建立连接,也就是 TCP 三次握手,先开始第一次握手,也就是主机向服务器发送请求报文段,这就需要知道 源IP目的IP,一开始,我们没有 源IP ,现在开始申请 IP

一、为主机申请 IP:DHCP 动态主机配置协议

我需要一个 IP 地址,告诉网络我是谁,这就需要 DHCP 动态主机配置协议。

  • 主机生成一个 DHCP请求报文(应用层)

  • 放入 UDP报文段(传输层),UDP 报文段主要包含:

    1. 源端口68(DHCP客户端 的固定端口)
    2. 目的端口67(DHCP服务器 的固定端口)
  • 网络层添加头部封装成 IP数据报 ,主要包含:

    1. 源 IP:0.0.0.0
    2. 目的 IP:255.255.255.255(广播IP)
  • 数据链路层添加头部封装成 以太网帧,主要包含:

    1. 源 MAC:自己的 MAC
    2. 目的 MAC:FF:FF:FF:FF:FF:FF(广播帧)
  • 以太网帧被发送到交换机(它是怎么找到交换机的呢?你的网线连着呢),交换机修改转发表记录 我的 MAC (自学习:每接收到一个帧都记录该帧的 MAC 和到达的接口),然后在它的所有出口广播这个帧

  • 与交换机相连的默认网关路由器接收到了这个广播帧,进行解析,提取出 IP 数据报,发现 目的IP广播IP,就交给传输层,传输层又提取出 DHCP 请求 交给应用层,DHCP 服务器 就接收到了该 DHCP 请求。(路由器?服务器?这里路由器怎么就成服务器了呢?其实路由器的路由功能只是它众多功能的一种,它还可以支持别的协议,比如 DHCP协议

  • DHCP 服务器 为此生成一个 DHCP ACK 报文 ,主要包含:

    1. 分配给 DHCP 请求的 IP
    2. DNS 服务器的 IP
    3. 默认网关路由器的 IP
    4. 子网掩码

    这个报文在被 传输层、网络层、数据链路层一路封装成帧,该帧的 目的 MAC我的 MAC源 MAC 是接收 DHCP 请求帧 的路由器端口的 MAC

  • DHCP ACK 以太网帧由默认网关路由器发送给交换机,交换机根据转发表转发回给我的主机

  • 主机收到该帧之后再从链路层到应用层,层层提取,最后得到 自己的 IPDNS 服务器 IP默认网关路由器 IP ,进行配置,我就有了 IP

二、查找默认网关路由器的 MAC 地址:ARP 地址转换协议

现在我有了 源IP,要开始找 目的IP,现在我们已知什么呢?已知目的域名,根据域名找 IP ,找 DNS域名服务系统 去查就好。在前面 DHCP 过程中,我们已经得到了 DNS 服务器的 IP 地址,现在只要去访问该 IP 就好。但是在这之前我们需要先 走出我们所处的局域网 ,这就需要局域网默认网关路由器的 MAC 地址,这是为什么呢?又要怎么找呢?继续往下看。

先解释一下 默认网关路由器 ,每一个主机都在一个局域网内,要访问局域网以外的主机,就需要先离开这个局域网,那我们要怎么离开呢?我们把这个局域网比作一个院子,网关路由器就是这个院子的门,我们要离开这个院子的话就要从门出去,那一个院子可以有很多个门,我们从哪个门出去呢?我们自己也不知道啊,但一般都会有一个默认的,不知道该从哪出去的时候,就走默认的。

为什么需要局域网的 MAC 地址呢? 因为局域网内是通过 MAC 进行识别的,为什么要用 MAC地址识别呢?是这样的,以前没这么多主机的时候,IP 都是固定的,我们就不需要 MAC ,但现在主机越来越多,这就导致局域网内的 IP 不是十分充足,管理起来也不是很好管理,所以 IP 每隔一段时间就会被回收,需要的时候才会被分配,这也就是为什么前面提到的 DHCP 动态主机配置协议 会存在。所以这个 IP 是会变的,对于主机来说,唯一不变的就是 MAC 地址,所以,在局域网内我们是用 MAC 定位的。

那又要怎么找到 MAC 地址呢?通过 IP 地址找 MAC ,这就用到了 ARP 地址转换协议

  • 主机生成一个 ARP 查询报文,目的 IP 是默认网关路由器,这个报文最终被封装成以太网帧,帧的 目的MAC 是:FF:FF:FF:FF:FF:FF(广播地址),然后把帧发给交换机,交换机看到是广播地址就给广播出去
  • 默认网关路由器接收到了这个帧,经过层层提取得到了 ARP 报文,发现其中的 目的IP 跟它自己的某个接口的 IP 匹配,就发送回去一个 ARP 应答报文给主机,这里包含它自己的 MAC 地址。

三、查找目的域名的 IP :DNS 域名系统

现在我们拿到了默认网关路由器的 MAC ,就可以离开局域网去 DNS 服务器查目的域名的 IP 了。

  • 主机生成 DNS查询报文,包含:
    1. 目的域名
    2. DNS服务器目的端口:53

层层封装成以太网帧,帧的 目的MAC 是默认网关路由器的 MAC。

  • 默认网关路由器接收到该帧之后,提取出 IP数据报,并根据路由表进行转发,因为路由器具有内部网关协议(RIP 路由信息协议、OSPF 开放最短路径优先协议)和外部网关协议(BGP 边界网关协议),因此路由表中已经配置了可以从路由器到达 DNS服务器 的路由表项
  • DNS服务器 接收到帧之后,层层提取出 DNS查询报文 ,并在 DNS 数据库中查找待解析域名对应的 IP ,找到之后发送 DNS应答报文,封装成 UPD报文段,再放入 IP数据报,最后通过路由器转回给源主机的默认网关路由器,在经由交换机转发给源主机

四、TCP 三次握手

这样我们就拿到了目的域名的 IP ,就可以进行 TCP 的三次握手了。

  • (第一次握手)主机向目的服务器发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 x。
  • (第二次握手)目的服务器收到连接请求报文段后,如果同意建立连接,则向主机发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
  • (第三次握手)主机收到目的服务器的连接确认报文段后,还要向目的服务器发出确认,确认号为 y+1,序号为 x+1
  • 目的服务器收到主机的确认后,连接就建立了。

为什么要进行第三次握手呢?

三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

  • 连接建立完成了,现在我们就可以继续前言中连接建立之后的过程进行访问了

猜你喜欢

转载自blog.csdn.net/MIC10086/article/details/113740515