当前位置: 首页 > news >正文

分布式专题——26.5 一台新机器进行Web页面请求的历程

1 场景与网络拓扑说明

  • 用户场景:同学X入职成都新公司NewCompany,公司配发新笔记本电脑,他将电脑接入公司网络,准备访问百度网页;

  • ISP(互联网服务提供商):NewCompany的ISP由四川电信提供,百度公司的ISP由北京电信提供;

  • 网络设备与地址

    • 公司网络内有交换机、路由器等设备
    • 笔记本电脑的MAC地址(用于局域网内设备识别)为:11:22:33:44:55:66
    • 网关路由器:
      • 对内网关地址(公司局域网内的网关标识):192.168.5.1
      • 对内MAC地址(局域网内路由器的标识):22:33:44:55:66:11
      • 对外Internet地址(连接公网的地址):120.68.34.89,对外的MAC地址因主要用于局域网寻址,此处无关紧要
    • 百度的Web服务器地址:IP地址14.215.177.38,域名www.baidu.com
    • 路由器还承担DHCP服务器的职责(用于自动给公司网络内设备分配IP等网络配置信息)
    • 假设条件:百度所有数据内容都放在其公司内部服务器上,未使用CDN(内容分发网络)等机制

    在这里插入图片描述

  • Web页面请求的整体逻辑基础:当新PC接入公司网络并要访问百度网页时,需要经过一系列网络协议和设备的交互,包括从局域网内的通信,到通过ISP接入公网,再到与百度服务器所在网络建立连接、获取网页内容等过程,涉及MAC地址寻址、IP地址路由、DNS(域名系统)解析(将域名www.baidu.com转换为IP地址14.215.177.38)等关键网络技术环。

2 交换机

在这里插入图片描述

  • 工作层级:工作在数据链路层,负责接收链路层入帧并转发到链路层另一出口,自身对子网中的主机和路由器透明;
  • 交换表:内部存在交换表,每个表项至少包含一个MAC地址和通向该MAC地址的交换机接口;
  • 帧处理逻辑
    • 从接口X接收到链路层入帧,获取目的MAC地址后在交换表查找;
    • 若无目的地址表项,广播该帧;
    • 若表项中目的MAC地址与接口X关联,丢弃该帧;
    • 若表项中目的MAC地址与接口Y(Y≠X)关联,将帧放到接口Y前面的输出缓存完成转发;
  • 即插即用与自学习:交换机是即插即用设备,具备自学习能力。交换表初始为空,会存储每个接口接收到的入帧的MAC地址和接口的对应关系;
  • 特殊“交换机”说明:像“汇聚交换机”“核心交换机”,本质上是工作在网络层的路由器,而非链路层的交换机。

3 路由器

在这里插入图片描述

  • 工作层级:工作在网络层;
  • 数据包处理:在输入端口接收到数据包后,解析并根据IP地址,在内部路由表中查找,再经内部交换结构往输出端口输送,使数据包到达正确IP地址;
  • 路由寻址算法
    • 分为集中式和分散式两种;
    • 集中式最出名的是图论中的Dijkstra算法,该算法需知道整个网络情况;
    • 实际工作中两种算法结合使用,比如一个ISP内部使用基于Dijkstra算法的OSPF协议;多个ISP之间采用的BGP协议,算法思想接近分散式路由选择算法;
  • 实际应用示例:以网络拓扑图为例,四川电信和北京电信内部的路由器可能用OSPF协议进行路由规划,四川电信和北京电信之间的路径可能用BGP协议规划,路由表也可手工配置。

4 DHCP 获取 IP 地址

  • 动态主机配置协议(DHCP),用于为新接入的主机分配IP地址等网络配置信息,让主机能在网络中正常通信;

  • DHCP请求阶段(X同学笔记本发起请求)

    • 笔记本操作系统生成DHCP请求报文,放入UDP报文段,UDP报文段置于IP数据报中。IP数据报的目的IP为广播地址255.255.255.255,源IP为0.0.0.0(因笔记本还无IP地址);

    • IP数据报被放入以太网帧,目的MAC地址为FF:FF:FF:FF:FF:FF(广播MAC地址,使帧广播到交换机连接的所有设备),源MAC地址为笔记本的MAC地址11:22:33:44:55:66;

    • 包含DHCP请求的以太网帧由笔记本发送到以太网交换机,交换机从连接笔记本的端口接收后,向所有端口广播(因初始无对应MAC地址的转发记录);

    • 路由器在MAC地址为22:33:44:55:66:11的接口接收到广播以太网帧,从中抽取IP数据报。由于IP数据报目的是广播地址,其载荷(UDP报文段)被分解到UDP层,进而抽取DHCP请求报文,此时DHCP服务器得到该请求;

  • DHCP响应阶段(DHCP服务器回应)

    • DHCP服务器生成DHCP ACK报文,包含分配给笔记本的IP地址(假设为192.168.5.10)、DNS服务器IP地址(120.69.56.46)、默认网关路由器IP地址(192.168.5.1)和子网掩码(255.255.255.0);

    • DHCP ACK报文放入UDP报文段,UDP报文段置于IP数据报,IP数据报再放入以太网帧,目的MAC地址为笔记本的MAC地址11:22:33:44:55:66,源MAC地址为路由器接口的MAC地址22:33:44:55:66:11;

    • 包含DHCP ACK的以太网帧由路由器发送到交换机,交换机因之前自学习过笔记本MAC地址与端口的对应关系,直接从通向笔记本的输出端口转发该帧;

  • 笔记本接收与配置

    • 笔记本接收到包含DHCP ACK的以太网帧,依次抽取IP数据报、UDP报文段,最终获取DHCP ACK报文;

    • DHCP客户端记录分配的IP地址、DNS服务器IP地址;

    • 在IP转发表中安装默认网关地址,后续笔记本将向该默认网关发送目的地址为其子网(192.168.5.X)以外的所有数据报。

5 DNS、ARP、NAT

5.1 DNS

  • Domain Name System(域名系统),专门将主机名转换为对应的IP地址,DNS协议运行在UDP之上,使用53号端口;
  • DNS查询流程(以查询www.baidu.com的IP为例)
    • X同学在Web浏览器输入www.baidu.com后,笔记本需要知道该域名的IP地址,于是生成DNS查询报文,将www.baidu.com字符串放入其中;
    • DNS查询报文被置于UDP报文段,UDP报文段放入IP数据报,IP数据报的目的IP是DHCP ACK返回的DNS服务器地址120.69.56.46,源IP是笔记本通过DHCP获取的192.168.5.10。

5.2 ARP

  • Address Resolution Protocol(地址解析协议),用于在同一个子网内将网络层地址(如IP地址)和链路层地址(MAC地址)相互转换。每台主机或路由器内存中有ARP表,包含IP地址到MAC地址的映射关系;RARP(反向地址解析协议)则以相反方式工作,通过物理地址解析出对应的IP地址;
  • ARP查询流程(获取网关路由器MAC地址)
    • 笔记本虽知道默认网关的IP地址192.168.5.1,但不知道其MAC地址,所以生成ARP查询报文,目的IP为192.168.5.1,将该报文放入具有广播目的MAC地址(FF:FF:FF:FF:FF:FF)的以太网帧,发送给交换机,交换机将帧交付给所有连接设备(包括网关路由器);
    • 网关路由器在连接公司网络的接口收到ARP查询帧,发现ARP报文中目标IP(192.168.5.1)与自身接口IP匹配,于是准备ARP回答,在ARP回答中,将自己的MAC地址22:33:44:55:66:11与IP地址192.168.5.1关联,目的MAC地址设为笔记本的MAC地址11:22:33:44:55:66,发送该帧给交换机,再由交换机交付给笔记本;
    • 笔记本接收ARP回答帧,从中抽取网关路由器的MAC地址22:33:44:55:66:11,之后就能用该MAC地址将包含DNS查询的以太网帧寻址到网关路由器。

5.3 NAT

  • Network Address Translation(网络地址转换),用于将私有IP地址(如192.168.5.10,属于局域网内使用的、不能在Internet上直接路由的IP地址,私有IP地址范围包括10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255)转换为公有IP地址,使局域网内设备能通过公网IP与Internet通信;
  • NAT转换流程
    • 包含DNS查询的IP数据报源IP是笔记本的私有IP(192.168.5.10),网关路由器收到后进行NAT转换:为该数据报生成新的源端口号(假设为5002),将源IP替换为路由器广域网一侧接口的公有IP地址120.68.34.89,源端口也更换为新端口5002,并在路由器的NAT转换表中记录;
    • DNS服务器不知道请求数据报被NAT改装,发回的响应报文目的IP是NAT路由器的IP地址,目的端口是5002;
    • 响应报文到达NAT路由器后,路由器根据NAT转换表,检索出对应的笔记本私有IP(192.168.5.10)和发送DNS报文时的端口号,重写该数据报的目的IP地址与目的端口号,再转发给笔记本;
    • 后续经网关路由器在Internet和局域网内交换的报文,默认都进行了NAT。

6 域内路由到DNS

  • 网关路由器与四川电信R1路由器的转发

    • 网关路由器的操作

      • 网关路由器接收包含DNS查询的以太网帧,从中抽取IP数据报;
      • 查找IP数据报的目的地址(DNS服务器地址120.69.56.46),根据自身转发表,决定将该数据报发送到四川电信网络中的R1路由器;
      • 将IP数据报放置在链路层帧中,按照找到的链路进行发送;
    • 四川电信R1路由器的操作

      • 接收链路层帧,抽取IP数据报,检查其目的地址(120.69.56.46);
      • 根据自身转发表确定转发接口,通过该接口朝着DNS服务器转发数据报;
  • DNS服务器的解析与响应

    • DNS服务器解析

      • 包含DNS查询的IP数据报到达本地电信DNS服务器;
      • DNS服务器在其DNS数据库中查找域名www.baidu.com,找到对应的DNS源记录,其中包含www.baidu.com的IP地址14.215.177.38;
    • 生成DNS回答报文并转发

      • DNS服务器形成包含主机名到IP地址映射(www.baidu.com对应14.215.177.38)的DNS回答报文;
      • 将DNS回答报文放入UDP报文段,该数据报通过四川电信网络反向转发到公司的路由器,再经以太网交换机发送到X同学的笔记本PC;
  • 笔记本PC获取IP地址:X同学的笔记本PC从接收到的DNS报文中,抽取出百度服务器www.baidu.com的IP地址,至此,笔记本PC准备好访问百度服务器。

7 TCP与HTTP

  • TCP三次握手建立连接

    • 发起TCP SYN报文

      • X同学的笔记本PC有了www.baidu.com的IP地址(14.215.177.38)后,生成用于向百度发送HTTP GET报文的TCP套接字;
      • 笔记本中的TCP需与百度的TCP执行三次握手,首先生成目的端口为80(HTTP默认端口)的TCP SYN报文段,将其放置在目的IP为14.215.177.38的IP数据报中,该IP数据报又被放在目的MAC地址为22:33:44:55:66:11(网关路由器)的以太网帧中,发送给交换机;
    • 路由转发TCP SYN报文:包含TCP SYN的数据包在公司网络、四川电信网络、北京电信网络和百度网络中的路由器,依据各自转发表,朝着www.baidu.com转发,类似6 域内路由到DNS中的转发逻辑;

    • 百度服务器响应TCP SYNACK报文

      • 包含TCP SYN的数据包到达百度服务器后,从数据报中抽取出TCP SYN报文,并分解到与端口80关联的欢迎套接字;
      • 百度HTTP服务器为与笔记本PC的TCP连接生成连接套接字,产生TCP SYNACK报文段;
    • 笔记本PC接收SYNACK报文,完成三次握手

      • 包含TCP SYNACK报文段的数据包通过百度、北京电信、四川电信和公司网络转发,到达笔记本PC的以太网卡;
      • 数据包在操作系统中分解到步骤18生成的TCP套接字,从而进入连接状态,三次握手完成,TCP连接建立;
  • HTTP请求与响应

    • 生成HTTP GET报文并发送

      • 借助笔记本PC上的套接字socket,浏览器生成包含要获取URL的HTTP GET报文;
      • HTTP GET报文写入套接字,成为TCP报文段的载荷,该TCP报文段被放置进数据包,交付到www.baidu.com(基于已建立的TCP连接);
    • 百度服务器处理请求并返回响应:百度的HTTP服务器从TCP套接字读取HTTP GET报文,生成HTTP响应报文,将请求的Web页内容放入HTTP响应体中,发送进TCP套接字;

    • 笔记本PC接收并显示Web页

      • 包含HTTP回答报文的数据包通过百度网络、北京电信、四川电信和公司网络转发,到达笔记本PC;
      • 浏览器程序从套接字读取HTTP响应,从HTTP响应体中抽取Web网页的html,最终显示Web网页。
http://www.dtcms.com/a/442140.html

相关文章:

  • 怎么让别人看到自己做的网站万维网网站301重定向怎么做
  • css样式学习记录
  • 网站服务器关闭网站数据库地址是什么
  • 每日一个C语言知识:C程序结构
  • Amazon RDS:云端数据库管理的革新之路
  • wordpress登录可见站内seo是什么意思
  • STM32简单的串口Bootloader入门
  • 360网站怎么做2核4g做网站
  • 从 “手工作坊” 到 “智能工厂”:2025 年 AI 原生应用重构内容创作产业
  • 做网站平台难在哪里网页翻译不见了
  • Flutter技术栈深度解析:从架构设计到性能优化
  • 学做湘菜的视频网站中国建设企业银行登录网站
  • 【Python进阶】网络爬虫核心技能-第三方IP服务
  • CAS密钥管理系统在汽车行业的核心密钥管理实践——构建智能网联汽车的可信安全底座
  • 宝塔面板登录地址和账密都忘了怎么解决
  • 廊坊大城网站建设义乌创源网站建设
  • Spring-AI 接入(本地大模型 deepseek + 阿里云百炼 + 硅基流动)
  • 华为OD机试C卷 - 分苹果 - 二进制 - (Java C++ JavaScript Python)
  • 国内好的seo网站网站建设课程的感受
  • 用 Gradle 配置 Flink 从开发到打包的一条龙实践
  • gRPC从0到1系列【17】
  • 浅谈内存DDR——DDR4性能优化技术
  • 静态网页模板网站电商运营培训班
  • mysqldump导入备份数据到阿里云RDS会报错吗
  • QT肝8天16--加载动态菜单
  • Spring Boot整合缓存——Redis缓存!超详细!
  • 湘潭做网站品牌磐石网络wordpress 柚子皮
  • 前端实战开发(二):React + Canvas 网络拓扑图开发:6 大核心问题与完整解决方案
  • 【C语言数据结构】第2章:线性表(2)--线性表的顺序存储结构
  • 计算机操作系统--进程:共享内存和管道的差异