一、准备:DHCP、UDP、IP和以太网

我们假定Bob启动他的便携机,然后将其用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,如下图所示:

学校的这台路由器与一个ISP连接,本例中ISP为comcast.net。在本例中,comcast.net为学校提供了DNS服务;所以,DNS服务器驻留在Comcast网络中而不是学校网络中。我们将假设DHCP服务器运行在路由器中,就像常见情况那样。

当Bob首先将其便携机与网络相连时,没有IP地址他就不能做任何事情,所以,Bob的便携机所采取的一个网络相关的动作是运行DHCP协议,以从本地DHCP服务器获得一个IP地址以及其他信息。

  1. Bob便携机上的操作系统生成一个DHCP请求报文,并将这个报文放入具有目的端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段中,该UDP报文段则被放置在一个具有广播IP目的地地址(255.255.255.255)和源IP地址0.0.0.0的IP数据报中,因为Bob的便携机还不具有一个IP地址。
  2. 包含DHCP请求报文的IP数据报则被放置在以太网帧中。该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备(如果顺利的话也包括DHCP服务器)中;该帧的源MAC地址是Bob便携机的MAC地址00:16:D3:23:68:8A
  3. 包含DHCP请求的广播以太网帧是第一个由Bob便携机发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。
  4. 路由器在它的具有MAC地址00:22:6B:45:1F:1B的接口接收到该广播以太网帧,该帧中包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该数据报的广播IP目的地址指示了这个IP数据报应当由在该节点的高层协议处理,因此该数据报的载荷(一个UDP报文段)被分解向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了DHCP请求报文
  5. 我们假设运行在路由器中的DHCP服务器能够以CIDR块68.85.2.0/24分配IP地址,并且假设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报文段中,UDP报文段被放入一个IP数据报中,IP数据报再被放入一个以太网帧中。这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址(00:22:6B:45:1F:1B),目的MAC地址是Bob便携机的MAC地址(00:16:D3:23:68:8A)
  6. 包含DHCP ACK的以太网帧由路由器发送给交换机。因为交换机是自学习的,并且先前从Bob便携机收到(包含DHCP请求的)以太网帧,所以该交换机知道寻址到00:16:D3:23:68:8A的帧仅从通向Bob便携机的输出端口转发
  7. Bob便携机接收到包含DHCP ACK的以太网帧,从该以太网帧中抽取IP数据报、从IP数据报中抽取UDP报文段,从UDP报文段抽取DHCP ACK报文。Bob的DHCP客户则记录下它的IP地址和它的DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。Bob便携机将向该默认网关发送目的地址为其子网68.85.2.0/24以外的所有数据报。此时,Bob便携机已经初始化好它的网络组件,并准备开始处理Web网页获取。

二、仍在准备:DNS和ARP

当Bob将www.google.com的URL键入其Web浏览器时,他开启了一长串事件,这将导致谷歌主页最终显示在其Web浏览器上。Bob的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.google.com发送HTTP请求。为了生成该套接字,Bob便携机将需要知道www.google.com的IP地址。因此在这里用到了DNS协议。

  1. Bob便携机上的操作系统生成一个DNS查询报文,将字符串www.google.com放入DNS报文的问题段中。该DNS报文则放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址68.87.71.226(在第5步中DHCP ACK返回的DNS服务器地址)和源IP地址68.85.2.101的IP数据报中。
  2. Bob便携机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送(在链路层寻址)到Bob学校网络中的网关路由器。然而,即使Bob便携机经过上述第5步中的DHCP ACK报文知道了学校网关路由器的IP地址(68.85.2.1),但仍不知道该网关路由器的MAC地址。为了获得该网关路由器的MAC地址,Bob便携机将需要使用ARP协议
  3. Bob便携机生成一个具有目的IP地址68.85.2.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并将交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器
  4. 网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,发现在ARP报文中目标IP地址68.85.2.1匹配其接口的IP地址。网关路由器因此准备一个ARP回答,指示它的MAC地址 00:22:6B:45:1F:1B对应IP地址68.85.2.1。它将ARP回答放在一个以太网帧中,其目的地址为00:16:D3:23:68:8A(Bob便携机)。并向交换机发送该帧,再由交换机将该帧交付给Bob便携机。
  5. Bob便携机接收到包含ARP回答报文段帧,并从ARP回答报文中抽取网关路由器的MAC地址(00:22:6B:45:1F:1B)
  6. Bob便携机现在能够使包含DNS查询的以太网寻址到网关路由器的MAC地址。注意到在该帧中的IP数据报具有IP目的地址68.87.71.226(DNS服务器),而该帧具有目的地址00:22:6B:45:1F:1B(网关路由器)。Bob便携机向交换机发送该帧,交换机将该帧交付给网关路由器。

三、仍在准备:域内路由选择到DNS服务器

  1. 网关路由器接收到该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地址(68.87.71.226),并根据其转发表决定该数据报应当发送到上图中的Comcast网络中最左边的路由器。IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边Comcast路由器,并且该帧经这条链路发送
  2. 在Comcast网络中最左边的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址(68.87.71.226),并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,而转发表已根据Comcast的域内协议(如RIP、OSPF或IS-IS)以及因特网的域间协议BGP所填写
  3. 最终包含DNS查询的IP数据报到达了该DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS数据库中查找名字www.google.com,找到包含对应www.google.com的IP地址(64.223.169.105)的DNS源记录。前面说过这种缓存数据源于google.com的权威DNS服务器。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到Bob的便携机(68.85.2.101)的IP数据报中。该数据报将通过Comcast网络反向转发到学校的路由器,并从这里经过以太网交换机到Bob便携机。
  4. Bob便携机从DNS报文抽取出服务器www.google.com的IP地址。最终,在大量工作后,Bob便携机此时准备接触www.google.com服务器。

四、Web客户-服务器交互:TCP和HTTP

  1. 既然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(网关路由器)的帧中,并向交换机发送该帧
  2. 在学校网络、Comcast网络和谷歌网络中的路由器朝着www.google.com转发包含TCP SYN的数据报,使用每台路由器中的转发表,如前面步骤14-16那样。注意支配分组经Comcast和谷歌网络之间域间链路转发的路由器转发表项,是由BGP协议决定的
  3. 最终,包含TCP SYN的数据报到达www.google.com。从数据报抽取出TCP SYN报文并分解到与端口号80相联系的欢迎套接字。对于谷歌HTTP服务器和Bob便携机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段,将其放入向Bob便携机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.google.com连接到其第一跳路由器
  4. 包含TCP SYNACK报文段的数据报通过谷歌、Commast和学校网络,最终到达Bob便携机的以太网卡。数据报在操作系统中分解到步骤18生成的TCP套接字,从而进入连接状态。
  5. 借助于Bob便携机上的套接字,现在(最终!)准备向www.google.com发送字节了,Bob浏览器生成包含要获取的URL的HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷。该TCP报文段放置进一个数据报中,并交付到www.google.com,如前面步骤18-20所述。
  6. 在www.google.com的HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将请求的Web页内容放入HTTP响应体中,并将报文发送进TCP套接字中。
  7. 包含HTTP回答报文的数据报通过谷歌、Commast和学校网络转发,到达Bob便携机。Bob的Web浏览器程序从套接字读取HTTP响应,从HTTP响应体中抽取Web网页的html,并终于(最终!)显示了Web网页。

从web页面请求的历程出发了解计算机网络的基础知识相关推荐

  1. Web页面请求的历程(从应用层到链路层)

    Web页面请求的历程 前面从应用层到数据链路层都详细讲过了,现在回顾总结一下一个简单请求背后隐藏的秘密细节.下面假定一名学生bob下载web页面(www.baidu.com)如下图 1.准备:DHCP ...

  2. http --- Web页面请求的历程(如何根据URL寻找到需要的资源)

    HTTP概况: // 超文本传输协议(HyperText Transfer Protocol,HTTP):是Web的应用层协议,它是Web的核心. // 客户端和服务器运行在不同的端系统中,通过交换H ...

  3. 计算机网络——web页面请求历程

    我们假设主机第一次连接到此网络,并且路由器作为DHCP服务器 准备:DHCP.UDP.IP和以太网 当一台机器连接到一个网络时,主机会将自身的MAC地址等其他自身信息,通过网络进行传播,目的地址使用的 ...

  4. Web 页面请求过程

    1.DHCP 配置主机信息 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取. 主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口68 的 U ...

  5. 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装

    高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...

  6. Web页面完整请求及渲染过程

    前端技术人员离不开计算机网络通信知识的了解,基础的网络架构模型与TCP.HTTP等相关知识掌握之后,不免会考虑:我们在互联网使用过程中,输入一个网址后,获取网址对应的Web页面信息并成功渲染到浏览器窗 ...

  7. ASP.NET Web 页面生命历程中的一天

    地址:https://msdn.microsoft.com/zh-cn/library/aa479007.aspx 发布日期 : 4/1/2004| 更新日期 : 4/1/2004 ASP.NET W ...

  8. 客户每次请求Web页面过程

    客户每次请求页面时--通过最初请求或者回送--所发生的事情.     图中显示了有5个主要事件:初始化.加载.预提交.提交.处理 我们可以为每个步骤添加代码. 1.初始化: ASP.NET处理器第一次 ...

  9. 活动 Web 页面人机识别验证的探索与实践

    在电商行业,线上的营销活动特别多.在移动互联网时代,一般为了活动的快速上线和内容的即时更新,大部分的业务场景仍然通过 Web 页面来承载.但由于 Web 页面天生"环境透明",相较 ...

  10. 前端隐秘角落 - web安全的演变历程

    前言:隐秘的角落番外篇 这是一个平行时空,在这里,朱朝阳还是有写日记的习惯,不是在日记本,却是在qq中记录.这一天,在他身上发生了一个奇怪的事情:当他像往常一样登录自己的qq空间,却发现最新一条的说说 ...

最新文章

  1. 在 5G 速度上,iPhone 12 只是个弟弟
  2. 【Flutter】Flutter 手势交互 ( 点击事件处理 | 点击 onTap | 双击 | 长按 onLongPress | 点击取消 | 按下 onTapDown | 抬起 onTapUp )
  3. pandas 提取数字_经验轻松提取Meta原始文献特征
  4. 文华软件登录显示请选择服务器,文华财经提示先登录云服务器
  5. 同一个工作组无法查看计算机,win7系统在同一个工作组看不到其他电脑的解决方法...
  6. 打印出数字字符串的偶位数
  7. oracle安装前准备,Oracle 安装前准备
  8. python编程心得体会-python核心编程____学习心得____part1
  9. SuperIndicator开源库源码分析
  10. 【李宏毅机器学习2021】Task02 回归
  11. 盲目的相信——写在购买陆谷孙先生主编的《英汉大词典》之后
  12. php九九乘法表带表格,九九乘法表打印(js打印九九乘法表用表格显示)
  13. 一个小工具就能帮我清理 30GB 微信文件,也太好用了!
  14. Google学术搜索镜像网站搜集
  15. 数据库之考勤管理系统
  16. vue实现select下拉显示隐藏功能【详细功能拓展】
  17. 宋红康老师JVM课程学习笔记
  18. HDU6760 Math is Simple 数学变形+莫比乌斯反演
  19. TI物料电子元器件芯片LM3402MM/NOPB
  20. 药师帮正式冲刺港交所上市:业绩增长迅猛,亏损规模逐渐收窄

热门文章

  1. oracle 11g 监听bug,oracle 11g数据库使用XML Table的BUG解决
  2. lisp取消选集选中状态_为什么对话框创建后是隐藏状态的
  3. C++基础语法-02-运算符重载
  4. magic ui3.0是鸿蒙系统吗,magicui3.1更新内容要不要升级 magicui3.0新功能体验
  5. Flink 1.11 Unaligned Checkpoint 解析
  6. 你的核心竞争力真的是技术么?
  7. python基础篇 —— 类
  8. clob oracle 连接_32天 Oracle 导入导出.
  9. json获取key对应的值java_java 获取json字符串中key对应的值
  10. mysql三台部署_使用三台主机部署LNMP