计算机网络自顶向下-web页面请求历程

1. 准备: DHCP、 UDP、 IP 和以太网
假定 Bob 启动他的便携机,然后将其用一根以太网电缆连接到学校的以太网交换机 , 交换机与学校的路由器相连。学校的路由器与一个 ISP 连接, 本例中 ISP 为 comcast.net ,为学校提供了 DNS 服务 ; 所以,DNS 服务器驻留在 comcast.net 网络中而不是学校网络中。 我们将假设 DHCP 服务器运行在路由器中。
当 Bob 首先将其便携机与网络连接时,没有 IP 地址他就不能做任何事情。所以,Bob 的便携机所采取的一个网络相关的动作是运行 DHCP 协议, 以从本地 DRHP 服务器获得一个 IP 地址以及其他信息。
Bob 便携机上的操作系统生成一个 DHCP 请求报文 ,并将这个报文放入具有目的地端口 67 (DHCP 服务器)和源端口 68 的 UDP 报文段,该 UDP 报文段则被放置在一个具有广播 IP 目的地地址 (255.255.255.255 ) 和源 IP 地址 0. 0. 0.0 的 IP 数据报中,因为 Bob 的便携机还不具有一个 IP 地址。
包含 DHCP 请求报文的 lP 数据报则被放置在以太网帧中。该以太网帧具有目的 MAC 地址 FF: FF: FF: FF: FF: FF,使该帧将广播到与交换机连接的所有设备 (如果顺利的话也包括 DHCP 服务器) ,该帧的源 MAC 地址是 Bob 便携机的 MAC 地址
包含 DHCP 请求的广播以太网帧是第一个由 Bob 便携机发送到以太网交换机的帧。 该交换机在所有的出端口广播入帧,包括连接到路由器的端口
路由器在它的具有 MAC 地址 00: 22: 6B: 45: 1F 的接口接收到该广播以太网帧,该帧包含 DHCP 请求,并且从该帧中抽取出 IP 数据报,该数据报的载荷被分解向上到达 UDP, DHCP 请求报文从此 UDP 报文段中抽取出来。 此时 DHCP 服务器有了 DHCP 请求报文。
假设运行在路由器中的 DHCP 服务器能够以 CIDR 块 68.85.2.0/24 分配 IP 地址。 所以本例,在学校内使用的所有 IP 地址都在 Comcast 的地址块中。 假设 DHCP 服务器分配地址 68.85.2.101 给 Bob 的便携机。 DHCP 服务器生成包含这个 IP 地址 以及 DNS 服务器的 IP 地址 (68.87.71. 226) 、默认网关路由器的 IP 地址 (68. 85. 2. 1 )和 子网块 (68. 85. 2. 0/24) (等价为"网络掩码" )的一个 DHCP ACK 报文 。该 DHCP 报文被放入一个 UDP 报文段、 IP 数据报中、以太网帧中。 这个以太网帧的源 MAC 地址是路由器连到归属网络时接口的 MAC 地址 (00:22:6B:45: 1F: 1B) 时,目的 MAC 地址是 Bob 便携机的 MAC 地址 (00: 16: D3 : 23: 68: 8A) 。
包含 DHCP ACK 的以太网帧由路由器发送给交换机。 因为交换机是自学习的,并且先前从 Bob 便携机收到(包含 DHCP 请求的)以太网帧,所以该交换机知道寻址到 00:16: D3:23:68:8A 的帧仅从通向 Bob 便携机的输出端口转发
Bob 便携机接收到包含 DHCP ACK 的以太网帧,从该以太网帧中抽逐层最终抽取 DHCP ACK 报文。 Bob 的 DHCP 客户 则记录下它的 IP 地址和它的 DNS 服务器的 IP 地址。 它还在其 IP 转发表中安装默认网关的地址。Bob 便携机将向该默认网关发送目的地址为其子网 68.85.2.0/24 以外 的所有数据报。
2. 仍在准备: DNS 和 ARP
当 Bob 将 www.google.com 的 URL 键入其 Web 浏览器时,Bob 的 Web 浏览器通过生成一个 TCP 套接字开始了该过程,套接字用于向 www. google. com 发送 HTTP 请求 。 为了 生成该套接字, Bob 便携机将需要知道 www.google.com 的 IP 地址,使用 DNS 协议提供这种名字到 IP 地址的转换服务。
Bob 便携机上的操作系统因此生成一个 DNS 查询报文,将字符串附 www. google. com 放入 DNS 报文的问题段中。该 DNS 报文则放置在一个具有 53 号 (DNS 服务器)目的端口的 UDP 报文段中,再被放入具有 IP 目的地址 68.87.71. 226 (在 第 5 步中 DHCP ACK 返回的 DNS 服务器地址)和源 IP 地址 68.85.2.101 的 IP 数据报中
Bob 便携机将该数据报放入一个以太网帧。 该帧将发送 (在链路层寻址)到学校网络中的网关路由器。 然而,即使 Bob 便携机经过上述第 5 步中的 DHCP ACK 报文知道了学校网关路由器的 IP 地址(68. 85. 2. 1) ,但仍不知道该网关路由器的 MAC 地址。 为了获得该网关路由器的 MAC 地址, Bob 便携机将需要使用 ARP 协议
Bob 便携机生成一个具有目的 IP 地址 68.85.2.1 (默认网关)的 ARP 查询报文,放置在一个具有广播目的地址的以太网帧,并向交换机发送,交换机将原帧交付给所有连接的设备,包括网关路由器。
网关路由器在通往学校网络的接口上接收到包含读 ARP 查询报文的帧,发现在 ARP 报文中目标 IP 地址匹配其接口的 IP 地址。因此准备一个 ARP 回答,指示它的 MAC 地址 00:22:6B:45:1F:1B 对应 IP 地址 68.85.2. 1。 它将 ARP 回答放 在一个以太网帧,其目的地址为 (Bob 便携机) ,并向交换机发送该帧,交换机将帧交付给 Bob 便携机。
Bob 便携机接收包含 ARP 回答报文的帧,从 ARP 回答报文中抽取网关路由器的 MAC 地址
Bob 便携机现在能够使包含 DNS 查询的以太网帧寻址到网关路由器的 MAC 地址。 注意到在该帧中的 IP 数据报具有 IP 目的地址 68.87.71. 226 (DNS 服务器) , 而该帧具有目的地 00: 22: 6B: 45: 1F: 1B (网关路由器) 。Bob 便携机向交换机发送该帧, 交换机将该帧交付给网关路由器。
3. 仍在准备:域内路由选择到 DNS 服务器
网关路由器接收该帧并抽取包含 DNS 查询的 IP 数据报。 路由器查找该数据报的目的地址 (68.87.7 1. 226). 并根据其转发表决定该数据报应当发送到 Comcast 网络中最左边的路由器。 lP数据报放置在链路层帧,该链路适合将学校路由器连接到最 左边 Comcast 路由器,并且该帧经这条链路发送。
在 Comcast 网络中最左边的路由器接收到该帧,抽取 IP 数据报,检查该数据报的目的地址,根据其转发表确定出接口,经过该接口朝着 DNS 服务器转发数据报,而转发表已根据 Comcast 的域内协议(RIP、 OSPF)以及因特网的域间协议 BGP 所填写
最终包含 DNS 查询的 IP 数据报到达了 DNS 服务器,DNS 服务器抽取出 DNS 查询报文,在它的 DNS 数据库中查找名字 www. google. com ,找到包含对应 www.google.com 的 IP 地址 (64.233.169.105)的 DNS 源记录 , (假设它当前缓存在 DNS 服务器中)这种缓存数据源于 google. com 的权威 DNS 服务器。该 DNS 服务器形成了一 个包含这种主机名到 IP 地址映射的 DNS 回答报文,将该 DNS 回答报文放入 UDP 报文段中,该报文段放入寻址到 Boh 便携机 (68.85.2. 101 )的 IP 数据报中。该数据报将通过 Comcast 网络反向转发到学校的路由器,并从这里经过以太网交换机到 Bob 便携机。
Bob 便携机从 DNS 报文抽取出服务器 www. google. com 的 IP 地址。 最终,Bob 便携机此时准备接触 www.google.com 服务器!
4. Web 客户-服务器交互: TCP 和 HTTP
Bob 便携机有了 www.google.com 的 IP 地址,它能够生成 TCP 套接字 ,该套接字将用于向 www.google.com 发送 HTTP GET 报文 。Bob 生成 TCP 套接字时,在 Bob 便携机中的 TCP 必须首先与 www.google.com 中的 TCP 执行三次握手。Bob 便携机因此首先生成一个具有目的端口 80 (针对 HTTP 的)的 TCP SYN 报文段,将该 TCP 报文段放置在具有目的 IP 地址 64.233. 169. 105 (www. google. com) 的 IP 数据报中,将该数据报放置在 MAC 地址为 00:22:6B:45:1F: 1B (网关路由器)的帧中, 并向交换机发送该帧。
在学校网络、 Comcast 网络和谷歌网络中的路由器朝着 www. google. com 转发包含 TCP SYN 的数据报,使用每台路由器中的转发表。 前面讲过支配分组经 Comcast 和谷歌网络之间域间链路转发的路由器转发表项,是由 BGP 协议定的
最终,包含 TCP SYN 的数据报到达 www. googole. com。 从数据报抽取出 TCP SYN 报文并分解到与端口 80 相联系的欢迎套接字。 对于谷歌 HTTP 服务器和 Bob 便携机之间的 TCP 连接生成一个连接套接字。 产生一个 TCP SYNACK 报文段, 将其放入向 Bob 便携机寻址的一个数据报中,最后放人链路层帧,该链路适合将 www.google.com 连接到其第一跳路由器。
包含 TCP SYNACK 报文段的数据报通过谷歌、 Comcast 和学校网络,最终到达 Bob 便携机的以太网卡。 数据报在操作系统中分解到步骤 18 生成的 TCP 套接字,从而进入连接状态
借助于 Bob 便携机上的套接字,现在准备向 www. google. com 发送字节 了, Bob 的浏览器生成包含要获取的 URL 的 HTTP GET 报文。 HTTP GET 报文则写入套接字,其中 GET 报文成为一个 TCP 报文段的载荷。 该 TCP 报文段放置进一个数据报,交付到 www.google.com ,如前面步骤 18 -20 所述。
在 www.google.com 的 HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一 个 HTTP 响应报文,将请求的 Web 页内容放入 HTTP 响应体中,并将报文发送进 TCP 套接字中
包含 HTTP 回答报文的数据报通过谷歌、 Comcast 和学校网络转发,到达 Bob 便携机。 Bob 的 Web 浏览器程序从套接字读取 HTTP 响应,从 HTTP 响应体中抽取 Web 网页 的 html,终于显示了 Web 网页。
上述例子看起来是尽可能详尽 ,但是我们已经忽略了一些可能的附加协议(例如,运行在学校网关路由器中的 NAT,到学校网络的无线接入,接入学校网络或对报文段或数据报加密的安全协议, 网络管理协议) ,以及人们将会在公共因特网中遇到的一些考虑 (Web 缓存, DNS 等级体系) 。
相关文章:
计算机网络自顶向下-web页面请求历程
1. 准备: DHCP、 UDP、 IP 和以太网 假定 Bob 启动他的便携机,然后将其用一根以太网电缆连接到学校的以太网交换机 , 交换机与学校的路由器相连。学校的路由器与一个 ISP 连接, 本例中 ISP 为 comcast.net ,为学校提供了 DNS 服务…...
打造西南交通感知新范式,闪马智能携手首讯科技落地创新中心
9月4日,2023年中国国际智能产业博览会(以下简称“智博会”)在重庆拉开帷幕。大会期间,由上海闪马智能科技有限公司(以下简称“闪马智能”)与重庆首讯科技股份有限公司(以下简称“首讯科技”&…...
Android11去掉Settings中的网络和互联网一级菜单
碰到一个不要wifi不要蓝牙的项目,客户要求去掉Settings中的网络和互联网一级菜单,因为硬件都不贴,所以软件对应也要去掉。 我们可以根据packages/apps/Settings/res/xml/top_level_settings.xml的布局文件找到TopLevelNetworkEntryPreferenc…...
基于Python开发的五子棋小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python开发的五子棋小游戏,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&a…...
JDBC入门到精通-10w总结
JDBC核心技术 笔记是以尚硅谷讲师宋红康JDBC课程为基础,加入自身学习体会,略有修改 第1章:JDBC概述 JDBC是java应用程序和数据库之间的桥梁。JDBC提供一组规范(接口)。向上是面向应用API,共应用程序使用。向…...
Linux之查看so/bin依赖(三十一)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
day-45 代码随想录算法训练营(19)动态规划 part 07
70.爬楼梯(进阶) 分析:基本动态规划转换为完全背包,因为1、2 两种上楼梯方式是无限选择的 思路: 1. j 表示 容量为 j 时,装满有dp[j]种方法2. dp[j]dp[j-nums[i]]3. 初始化 dp[0]1,dp[1]14. 遍历顺序&am…...
static关键字和final关键字
在java的关键字中,static关键字和final关键字是两个必须掌握的关键字。static关键字和final关键字用法多样,且在一定环境下使用,可以提高程序的运行性能,优化程序的结构。下面将依次介绍static关键字和final关键字。注意ÿ…...
使用Postman如何在接口测试前将请求的参数进行自定义处理
1、前言 当我们使用 Postman 进行接口测试时,对于简单的不需要处理的接口,直接请求即可,但是对于需要处理的接口,如需要转码、替换值等,则就麻烦一些,一般我们都是先手动把修改好的值拷贝到请求里再进行请…...
QT第二天
1.优化登陆界面,当点击登录按钮后,在该按钮对应的槽函数中,判断账户和密码框内的数据是否为admin和123456,如果账户密码匹配成功,则提示登陆成功并关闭登录界面,如果账户密码匹配失败,则提示登录…...
鸿蒙应用程序入口UIAbility详解
一、UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。每一个UIAbility实例,都对应于一个最近任务列表中的任务。一个应用可以有一个UIAbility&am…...
扫地僧站群·静态养站王:自动万站智能LOGO功能说明
扫地僧站群静态养站王:自动万站智能LOGO功能说明,无需配置,自动根据网站状态生成对应LOGO,高质量LOGO万站不重样.说明:模板调用智能LOGO方式:{当前域名}/logo.png 自动识别HTTP/HTTPS 只需在模板需要展示LOGO的地方放上如上标签即可。以下为L…...
【Day-32慢就是快】代码随想录-二叉树-合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接…...
接口测试系列 —— 什么是接口测试?
接口测试系列 为什么要做这个事情? 对自己过往在接口测试上的经验,写一个小结的系列文章,是一个系统性的思考和知识构建。发布的同时,也是希望获得更多感兴趣的同学的意见和反馈,可以把这个部分做的更好。 接口测试概…...
qt作业day2
//widget.cpp#include "widget.h" #include "ui_widget.h"void Widget::usr_login() {if("admin" this->edit_acc->text()){if("123456" this->edit_psd->text()){speech->say("登录成功");emit jump_sig1…...
JWT一篇通
JWT 是什么? JWT(JSON Web Token)是一种开放的标准,标准的编号是RFC7591。用于在不同实体之间安全地传输信息。它是基于 JSON 编码的令牌。 JWT 的组成 JWT由三个部分组成:头部(Header)、载荷…...
【2023-09-01】vue中自定义按钮设置disabled属性后,异常触发click事件
vue中自定义按钮设置disabled属性后,异常触发click事件 项目中自定义按钮,使用a标签实现。设置disabled属性后,点击可以触发click事件。 由于各种原因,项目中并未使用成熟的第三方组件库,例如element-ui,a…...
nginx报错file not found解决
文章目录 一、nginx配置文件修改1.1 配置文件位置1.2 php fastcgi配置1.3 测试 二、nginxphp运行原理三、外网访问内网设置 采用nginxphp作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如…...
【力扣】96. 不同的二叉搜索树 <动态规划>
【力扣】96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5 示例 2: 输入&am…...
Win11搭建 Elasticsearch 7 集群(一)
一: ES与JDK版本匹配一览表 elasticsearch从7.0开始默认安装了java运行环境,以便在没有安装java运行环境的机器上运行。如果配置了环境变量JAVA_HOME,则elasticsearh启动时会使用JAVA_HOME作为java路径,否则使用elasticsearch根目…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
