输入网址到显示,期间经历哪些过程?

  1. HTTP:URL解析
  2. DNS:域名解析
  3. 操作系统协议栈
  4. 可靠传输TCP
  5. 远程定位IP
  6. 两点传输MAC
  7. 出口网卡
  8. 交换机
  9. 路由器
HTTP:URL解析

浏览器第一步工作就是要对输入的URL进行解析,从而确定发送给Web服务器的请求信息。

关于HTTP,可以看以下文章(由于无法给链接,关于以下文章可以私信我获取具体地址):

  1. HTTP基础知识
  2. HTTP/1.1优化
  3. TLS握手
  4. HTTPS优化
  5. HTTP/2
DNS:域名解析

在进行完URL解析以后,需要通过DNS域名解析获取服务器的IP。

关于DNS,可以看以下文章:

操作系统协议栈

通过DNS获取到IP以后,就可以将传输工作交给操作系统协议栈。

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(1)

应用程序(浏览器)通过调用Socket库来委托操作系统协议栈工作。协议栈大体分为两部分:

IP协议中还包含ICMP协议(告知网络传输过程中产生的错误和控制信息)和ARP协议(获取MAC地址)。

IP下面的网卡驱动程序负责控制网卡硬件,网卡负责实际的收发操作(对网线中的信号执行收发)。

可靠传输TCP

由于HTTP的传输层协议是TCP,因此我们还需要借助TCP的帮助,通信的双方需要建立TCP连接。

关于TCP,可以看以下文章(由于无法给链接,关于以下文章可以私信我获取具体地址):

  1. TCP三次握手
  2. TCP四次挥手
  3. TCP重传
  4. TCP滑动窗口
  5. TCP流量控制
  6. TCP拥塞控制
  7. 网络显形TCP三次握手
  8. TCP连接队列
  9. TCP性能优化
远程定位IP

TCP在执行数据传输的时候会委托IP模块将数据封装成网络包发送给通信对象。

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(2)

通过上图可以看出,IP协议里面需要有源IP地址和目的IP地址,由于HTTP是TCP传输,所以在IP首部中的协议后为0x06(表示TCP)。

客户端有多个网卡,源IP地址如何选择?

如果客户端有多个网卡(多个源IP地址),此时需要根据路由表规则来进行网卡(源IP地址)的选择。

# linux中查看路由表 route -n

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(3)

具体的选择步骤如下:

  1. 将目标地址与路由表中的子网掩码进行与运算,算出来的结果如果和路由中的Destination一致,就是该路由对应的网卡的IP地址作为源IP地址
  2. 在路由表中有一条特殊的路由,目标地址和子网掩码都是0.0.0.0(表示默认网关,Gateway即路由器的IP地址),如果其他路由都无法匹配,就会自动匹配。
两点传输MAC

在IP头部生成以后,需要在IP头部的前面加上MAC头部。

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(4)

MAC包头里需要发送方的MAC地址和接收方的MAC地址,在TCP/IP通信中,协议类型只有两种:

关于ARP如何获取接收方MAC地址,可以看以下文章:

如何查看MAC地址缓存

arp -a

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(5)

ARP缓存大体有三部分组成:

出口网卡

网络包只是内存中的一串二进制信息,无法直接发送给对方。需要网卡将数字信息转化为电路信号才能在网线上进行传输

控制网卡需要借助网卡驱动程序,网卡驱动程序从IP层获取到包以后,会将其复制到网卡内的缓冲区,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(6)

数据包封装好以后,网卡会将包转换成电信号通过网线发出去。

交换机

交换机是二层网络设备,目的是用来将数据包原样的转发至目的地。

交换机的端口没有MAC地址

交换机中有MAC地址表,MAC地址表主要包含两个信息:

网页弹框提示语句可以f12查看吗(输入网址到回显页面)(7)

交换机的包接收操作

  1. 网线中的电信号到达交换机的网线接口,交换机收到电信号以后,会将电信号转换成数字信号
  2. 通过包尾的FCS校验,如果校验通过则放入缓冲区
  3. 将包放入缓冲区后,需要查询一下包的接收方的MAC地址是否在交换机中的MAC地址表中
  4. 如果MAC地址表中有匹配的记录,就通过交换电路将包发送到记录上的端口中。

MAC地址表中没有如何处理?

MAC地址表中如果没有对应的MAC地址,交换机就无法判断将数据包转发至端口,此时交换机会将数据包发送至除源端口以外的所有端口上。端口上的设备收到数据包以后,如果自己的MAC地址与数据包中的相符,就会接收该数据包,并作出响应,只要返回了响应,交换机就可以将它写入MAC地址表,下次就不需要将包发送至所有端口了。

如果接收方是一个广播地址,交换机还是会把包发送至除源端口以外的所有端口

路由器

数据包在经历过交换机以后,顺利抵达了路由器,在路由器上会被转发到下一个路由器或目标设备。

路由器是三层网络设备的各个端口都有MAC地址和IP地址。

路由器的收发流程

  1. 路由器的端口收到电信号后,会将电信号转发给数字信号
  2. 路由器对包末尾的FCS进行错误校验
  3. 校验如果没有问题就检查MAC头部中的接收方MAC地址是否和自己的一致,如果是就放到接收缓冲区,否则就直接丢弃这个包
  4. 路由器接收到包以后,就会去掉包中的MAC头部
  5. 路由器会根据IP头部中的内容进行包的转发操作,路由器会根据路由表寻找下一跳的路由
  6. 找到匹配的路由以后,会根据路由表项中的Gateway列来判断对方的地址
  7. 如果网关是一个IP地址,则这个IP地址就是我们要转发的目标地址(此时还未到达终点,需要路由器继续转发)
  8. 如果网关为空,则IP头部中的接收方IP地址就是最终的目标地址

确定完目标IP地址以后,又会通过ARP确定MAC地址,最终将封装数据包(IP层的目标IP不会发生变化)发送出去。在整个数据包转发过程中可以看出源IP和目标IP始终不会变化,但MAC地址一直是在变化的

,