Skip to content

网址访问页面中间发生了哪些过程

2.2 键入网址到网页显示,期间发生了什么?

URL解析

URL组成信息

URL实际上就是访问 Web服务器里面的文件资源。

image.png

组装HTTP报文

根据 URL 解析得到的内容,进行报文组装。

HTTP 作为应用层规范的协议,规定了发往应用层的报文格式。

image.png

DNS域名解析

解析URL时,如果web服务器是域名,需要走DNS服务器进行域名解析,得到真实访问的IP地址。

域名组成

www.server.com. 类似树状结构,越右等级越高。

域名组成都代表了DNS服务器,里面保存了域名和IP的对应关系。

域名服务器就像是一个树状结构。

  • 根 DNS 服务器(.)
  • 顶级域 DNS 服务器(.com)
  • 权威 DNS 服务器(server.com)

image.png

域名解析的流程

域名解析的过程就是 只指路不带路,从顶级域一直向下找。

www.server.com. 最后的 . 代表着根域。

根域的服务器信息在所有的 DNS 服务器都存在,只要找到任意一台 DNS 服务器,都能找到根域,然后一路向下找。

image.png

本地DNS域名服务器

image.png

协议栈

获取真实IP地址之后,应用层通过调用Socket库,来委托协议栈工作。

协议栈包含传输层的 TCP 和 UDP 协议,还包含网络层的 IP 协议。

image.png

传输协议TCP

像HTTP协议就是基于TCP协议进行传输的。

通过 TCP 的三次握手,服务端和客户端进行连接。

应用层的 HTTP报文和 TCP头部封装在一起,形成网络包发给网络层进行网络传输。

TCP的功能

  • 确认客户端和服务端的收发能力,确认收消息的服务端。
  • 组装网络包,交给网络层发送数据。

image.png

远程定位IP

IP协议位于网络层,传输层的 TCP协议发送的数据,都需要委托给网络层的 IP 模块将数据包封装,并进行进一步处理传输。

IP报文头部

image.png

IP报文头部需要有源地址 IP 和目标地址 IP。

  • 源地址IP

  • 目标地址IP

    DNS域名解析得到的IP地址。

  • 协议

    由于HTTP是基于TCP的,IP报文头部的协议需要填 06 (16进制),表示 TCP。

源地址IP确认

假如客户端有多个网卡,就会有多个 IP 地址,那么如何选择源地址IP?

可以根据路由表来确认由哪一个网卡发送请求,使用网卡IP地址作为源地址 IP。

查看路由表

Plain Text route -n

image.png

通过路由表可以看到网卡的信息。

比如 eth0 和 eth1。

eth0 的网段是 192.168.3.0 , 子网掩码是 255.255.255.0。

其中第三条是默认网卡,网段 0.0.0.0,Gateway 对应 192.168.3.1,是路由器的地址。

在匹配不到网卡的时候,使用默认网卡,此时源地址IP 就是路由器地址。

匹配过程

  • 遍历路由表。
    • 将目的端地址与子网掩码进行与运算(求网段)。
    • 如果网段与网卡的网段一致,则源地址IP 使用该网卡的 IP。如果不匹配接着找下一个网卡。
    • 如果目的端地址没有匹配到网卡,使用默认网卡,源地址IP 就是路由器IP。

image.png

查看网卡的IP地址

Plain Text ifconfig

image.png

网络层报文格式

在传输层发给网络层的 TCP 段基础上,加上 IP 头部。

保证确认目的端的IP地址。

image.png

以太网传输MAC

数据通过网络层的 IP协议封装之后,确保了目的端地址。

通过网络层的 IP 寻址功能,能在互联网中找到对应的网络,但是访问的目标是属于一个局域网(以太网) ,而在以太网中要用 MAC 地址来标识机器。

有了IP地址为什么还需要MAC地址

  • IP地址在网络架构里面的网络层,主要是为了定位目的端所在位置。

    IP 地址是会变动的,比如上网选择自动获取 IP地址,那么 IP地址就会发生变化。

  • MAC地址在网络接口层,每台设备都有自己的 MAC地址,是固定不变的。

    两个设备之间需要通过 MAC 地址来确认身份。

MAC头部

image.png

  • 接收方和发送方MAC地址,保证两点传输。
  • 协议类型
    • 0800:IP协议
    • 0806:ARP协议

如何确认MAC地址

发送方

MAC地址在网卡生产时就设置好了,发送方只需要读取出来,写入MAC头部就好。

接收方

在以太网中,只要告诉以太网对方的MAC地址,以太网就会帮我们把数据包发送过去。

搞清楚要把包发给谁,通过查询路由表,找到匹配的路由。将包发给 Gateway 对应地址。

ARP协议 - 广播形式

ARP协议在以太网中,以广播的形式获取 接收方对应的 MAC地址。

image.png

ARP协议不需要每次都缓存获取,查询结果放到了 ARP 缓存中,不过缓存时间就几分钟。

在发包时,查询 ARP 缓存:

  • 包含 IP 对应的 MAC地址,使用缓存信息。
  • 缓存不包含,使用 ARP 协议广播查询。

查看 ARP 缓存内容

Plain Text arp -a

image.png

网络接口层报文格式

image.png

出口-网卡

浏览器的 URL 经过HTTP、TCP、IP、MAC层层封装,形成网络包格式。

但是还只是存放在内存的二进制信息,要通过网络访问的远程主机,要走网线就要转换为电信号。

负责执行电信号转换传输的部分是网卡,控制网卡还需要网卡驱动。

操作流程

网卡拿到网络包之后,会将复制到网卡缓冲区,并且在开头和结尾进行封装。

最后将包转换为电信号,通过网线传输出去。

image.png

  • 报头和起始帧分隔符

    标识包起始位置的标记。

  • FCS - 帧校验序列

    检查包传输过程是否损坏。

送别者-交换机

交换机的设计目的是将网络包转发到目的地。交换机在MAC层(数据链路层)工作.

在七层网络模型中,数据链路层是第二层,所以交换机称为二层网络设备。

交换机的包接受操作

网络包通过网卡发送电信号后,电信号通过网线接口,经交换机的模块进行接收。

然后交换机将电信号转换为数字信号

通过网络包的 FSC 校验错误,如果没问题放入缓冲区。

交换机和网卡的区别

  • 交换机的端口没有MAC地址,而网卡有MAC地址.
    • 网卡收到网络包时, 根据网络包对应的接收方 MAC地址,来判断网络包是不是自己的.
    • 交换机不会识别网络包,而是将所有网络包放到缓冲区.

包转发

交换机通过接收模块将以太网下所有网络包都放到了缓冲区.

在以太网中,每个设备有自己的MAC地址,连接在交换机上的时候,有自己的端口.

接下来要判断网络包发往哪里.

通过判断接收方MAC地址和端口的匹配关系,也就是交换机-MAC地址表:

  • 设备的MAC地址.
  • 设备连接在交换机哪个端口上.

image.png

对于网络包,交换机根据接收方MAC地址,从MAC地址表里面查,查到对应的端口,然后将信号发送到对应的端口上。

当MAC地址表找不到MAC地址?

当找不到对应的MAC地址时,交换即就会将网络包发给每个端口.

虽然每个设备都会收到网络包,但是只有真正的接收者才会接收,其它都会忽略.

而且只要接收方成功接收网络包,向交换机返回响应包后,交换机就会将接收方的MAC地址写入MAC地址表.

接收方广播

如果接收方的MAC地址是一个广播地址,就会向除了源端口以外的所有端口转发网络包.

以下两个属于广播地址:

  • MAC 地址中的 FF:FF:FF:FF:FF:FF
  • IP 地址中的 255.255.255.255

一个HTTP请求,经过计算机的层层封装,经过网卡转换电信号,发给交换机.目前整个过程都是在局域网中. 主要通过MAC地址进行寻址. 交换机再转发给路由器,路由器就会进入互联网,通过IP寻址.

路由器

网络包经过交换机转发,到达路由器.并由路由器在互联网中转发,转发到下一个路由器或者目标设备.

路由器和交换机的区别

  • 交换机基于以太网(局域网)设计的,称为二层网络设备.交换机的端口不具有MAC地址.
  • 路由器基于IP设计的,称为三层网络设备,路由器的各个端口都具有MAC地址和IP地址.

路由器原理

路由器的端口都具有MAC地址,这就表示它能够作为以太网的接收方和发送方.因为以太网就是基于MAC地址进行信息交互的.

而同时路由器还有iIP地址,保证在互联网中能通过IP地址进行交互.

网络包交互

路由器端口会接受发给自己的以太网包,然后根据路由表查询转发目标,再经相应的端口作为发送方将以太网包发送出去.

网络包接收过程

  • 电信号到达网线接口后,路由器的模块会将电信号转换为数字信号.通过末尾的FCS进行错误校验.

  • 校验MAC地址

    • 检查网络包中接收方的MAC地址,如果是发给自己的包,则放到缓冲区,否则就会丢弃.
    • 路由器的端口都具有MAC地址,只接受与自身匹配的包.
  • 去掉MAC头部

    完成接收操作之后,去掉MAC头部.因为MAC头部的作用就是将包送到路由器,网络包中的MAC头部地址对应路由器端口的MAC地址.

    接下来就不需要MAC头部了,需要的是MAC头部后方的IP头部,在互联网中进行包的转发操作.

查询路由表确认输出端口

  • 根据路由表判断转发目标

    image.png

  • 转发流程和网卡转发一致

    判断接收方地址是否属于某个路由的网段,如果属于,则该路由就属于转发目标.

    如果找不到路由,则使用默认路由,默认路由就作为转发目标

路由器的发送操作

  1. 根据路由表确认转发目标的路由.
  2. 根据路由确认归属路由器.
    • 如果路由的网关是一个IP地址,说明还没到达终点,还需要经过路由器继续转发到下一个网关路由器.

      此时会将该路由网关地址作为接收方地址继续转发.

    • 如果网关为空,则接收方的IP地址就是目标地址,说明找到了该网络包归属的路由器.

  3. 找到路由器之后,通过ARP协议根据IP地址查询MAC地址,将查询结果作为接收方MAC地址.

路由器的层层转发

发送的网络包通过交换机到达下一个路由器.由于接收方的MAC地址就是下一个路由器的地址,经过层层转发,网络包最终到达目的地.

在整个转发的过程中,源IP和目的IP始终不会变,一直变化的是MAC地址.

在发送数据包时,如果目标主机不是本地局域网,填入的 MAC 地址是路由器,也就是把数据包转发给路由器,路由器一直转发下一个路由器,直到转发到目标主机的路由器,发现目标 IP 地址是自己局域网内的主机,就会 ARP 请求获取目标主机的 MAC 地址,从而转发到这个服务器主机。

比如在路由器查找路由时,有可能转发的还是路由器,此时接收方MAC地址为转发路由器的MAC地址.

在层层转发过程中,基本属于以下流程:

  • 通过路由器查找IP对应的路由.
  • 路由网关不为空,说明有下层路由,将网关ip作为接收者ip,和该路由对应的MAC地址.作为接收者MAC地址,经路由器端口转发给交换机.
  • 最终路由网关为空时,说明找到最终路由了.在该路由上根据ARP协议,找到IP地址对应的MAC地址.在通过交换机根据MAC地址转发网络包到对应设备.

服务端的数据处理

在发送端,计算机会将HTTP请求层层封装.

而在接收端则要层层拆开,获取最初的网络报文.

image.png

识别网络包内容

  • 拆开MAC头部,判断是否和服务器MAC地址符合.
  • 拆IP头部,确认IP地址是否符合,并且判断协议项,知道上层协议是TCP协议.
  • 拆开TCP协议.
    • 根据TCP头部的序列号,判断是否是需要的网络包,如果是的话放入缓存,并且返回ACK确认标识.如果不是丢弃.
    • 根据TCP头部的端口号,能找到对应的进程,将包发给HTTP进程.
  • 进程获取网络包后,根据HTTP数据发现访问的是一个页面,于是将网络页面封装在HTTP响应报文里面.

发送响应内容

  • HTTP进程将结果封装到HTTP响应报文.
  • 依次封装TCP头部,不过这次源地址是服务端的IP地址,目的地址是客户端的IP地址.
  • 封装IP头部.
  • 封装MAC头部.
  • 服务端将封装好的网络包从网卡转发给交换机,交换机转发给路由器,路由器层层转发到目的路由器.
  • 目的路由器转发给交换机.交换机转发给客户端.
  • 客户端收到服务端的响应网络包后,层层拆解.
  • 最终获取到HTTP响应报文.
  • 最后,客户端要断开连接,向服务端发起TCP四次挥手,至此双方连接断开.