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

news2024/11/28 23:44:24

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 等级体系) 。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0010Java程序设计-springboot+vue影院售票系统设计与实现

摘 要目 录系统实现开发环境 摘 要 看电影已经成为了人们生活中不可缺少的一部分,电影院售票及管理系统是电影院的日常管理及售票任务的核心, 在电影院中, 工作人员并非只是放映电影, 还有诸如票房统计、影片放映、影片场次安排、…

TypeScrip第一课

前言 TypeScript是一个开源的、渐进式包含类型的JavaScript超集。 作用是让开发者增强js的能力并使应用的规模扩展变得更容易。 这两点是废话,至于什么是超集? S1是S2的子集。S2是S1的超集(类似于扩展extend) TS基于ES6为 …

0401hive入门-hadoop-大数据学习.md

文章目录 1 Hive概述2 Hive部署2.1 规划2.2 安装软件 3 Hive体验4 Hive客户端4.1 HiveServer2 服务4.2 DataGrip 5 问题集5.1 Could not open client transport with JDBC Uri 结语 1 Hive概述 Apache Hive是一个开源的数据仓库查询和分析工具,最初由Facebook开发&…

elasticsearch的搜索补全提示

当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项 拼音分词器 下载 要实现根据字母做补全,就必须对文档按照拼音分词,GitHub上有拼音分词插件 GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin…

儿童玩具音乐芯片方案,6通道midi播放语音芯片,WT588F02B-8S

随着科技的不断进步,儿童玩具行业也在不断演化。如今,儿童们期待的不仅仅是有趣的外观,还有令人惊叹的音乐和声音效果。为了满足这一需求,深圳唯创知音研发了WT588F02B-8S,一款创新的6通道MIDI播放语音芯片&#xff0c…

手写Mybatis:第18章-一级缓存

文章目录 一、目标:一级缓存二、设计:一级缓存三、实现:一级缓存3.1 工程结构3.2 一级缓存类图3.3 一级缓存实现3.3.1 定义缓存接口3.3.2 实现缓存接口3.3.3 创建缓存KEY3.3.4 NULL值缓存key 3.4 定义缓存机制、占位符和修改配置文件3.4.1 定…

Jrebel与Xrebel教学

简介 JRebel和XRebel是两个非常有用的工具,可以显著提升Java开发人员的生产力和应用程序性能。 JRebel是一个强大的Java开发工具,它允许开发人员在不重新启动应用程序的情况下进行代码修改和调试。传统上,每次修改Java代码都需要重新编译和重…

bat批处理——统计当前文件夹下的所有文件名

一、在当前文件夹下建立XX.txt文件,将指令dir *.* /b/s>test.txt写到XX.txt文件中 测试文件夹目录及文件结构图: 指令说明: dir *.* /b/s>test.txt /*** 此部分为注释内容* dir 获取当前目录下的目录及文件* *.* 对文件进行筛选&…

ShopXO商城系统文件上传0Day代审历程

Git仓库: https://github.com/gongfuxiang/shopxo简介: 两天攻防中,某政局内网横向发现多网段服务器,该服务器搭建了ShopXO商城系统(后来发现是开发临时搭建的,准备做二开用的)。结果花了30来秒审了个垃圾Day拿下该服…

应用于激光雷达、 激光测距、 脉冲测量的高精度时间测量(TDC)电路MS1205N

MS1205N 是一款高精度时间测量 (TDC) 电路,具有四通 道、多脉冲的采样能力、高速 SPI 通讯、多种测量模式,适合 于激光雷达和激光测距。 主要特点 ◼ 单精度模式 60ps ◼ 双精度模式 30ps ◼ 非校准测量范围 3.5ns(0ns) 至 25μs ◼ 单…

【LeetCode】202. 快乐数 - hash表 / 快慢指针

目录 2023-9-5 09:56:15 202. 快乐数 2023-9-5 09:56:15 关键是怎么去判断循环: hash表: 每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中。 如果它不在哈希集合中,我们应该添加它。如果它在哈希集合中&#x…

docker安装mysql、clickhouse、oracle等各种数据库汇总

1:docker 安装mongo数据库并使用 官网:https://www.mongodb.com/docs/manual/ 安装 :https://www.zhihu.com/question/54602953/answer/3047452434?utm_id0 安装2:https://www.duidaima.com/Group/Topic/ArchitecturedDesign/91…

MySQL 全局锁、表级锁、行锁详解

前言 MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类,全局锁和表级锁是在server层实现的。 全局锁 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状…

华为产业链爆发,这次是系统级的革命

华为Mate60手机爆火,让产业链随之振奋。我们看到,这种改变将是持久的、系统的。 可能在未来20年,这种影响会持续。 01 华为产业链有多长 客观而言,华为产业链可以看作是由多个领域的企业和组织组成的网络,其中包括半…

Linux内核源码分析 (B.1)内核内存布局和堆管理

Linux内核源码分析 (B.1)内核内存布局和堆管理 文章目录 Linux内核源码分析 (B.1)内核内存布局和堆管理一、Linux内核内存布局二、堆管理 一、Linux内核内存布局 64位Linux一般使用48位来表示虚拟地址空间,45位表示物理地址。通过命令:cat/proc/cpuinfo。…

HTML5-4-表单

文章目录 表单属性表单标签输入元素文本域(Text Fields)密码字段单选按钮(Radio Buttons)复选框(Checkboxes)按钮(button)提交按钮(Submit)label标签 文本框(textarea&am…

叉积方法,求点与线段的相对位置

叉积可以用来判断一个点在一条线段的哪个方向。 线段两个端点坐标为 A(x1, y1), B(x2, y2), 假设点 P 的坐标为 (px, py), 则向量 AP 和 BP 的坐标表示为: AP (px - x1, py - y1) BP (x2 - px, y2 - py) 叉积的计算公式为: (py…

基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 主要…

神仙级python入门教程(非常详细),从0到精通,从看这篇开始!

毫无疑问,Python 是当下最火的编程语言之一。对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事。其实,只要掌握了科学的学习方法并制定了合理的学习计划,Python 从 入门到精通只需要一个月…

骨传导和入耳式哪个危害大一点?入耳式和骨传导哪种好?

骨传导和入耳式这两种耳机虽然都存在一定的危害,但是入耳式耳机对人体的危害要更大一点。 入耳式耳机直接塞进耳朵这种佩戴方式,会阻塞外部声音的进入,长时间使用可能会导致耳道感染,还可能对听力造成损伤,而骨传导耳…