Web页面请求的历程

news/2024/5/18 16:09:04 标签: 前端, 网络, udp

假定我启动了我的华为笔记本,然后将其用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,学校的这台路由器与一个ISP(comcast. net) 连接。在本例中,comcast. net为学校提供了DNS服务;假设 DHCP服务器运行在路由器中。

首先将华为笔记本与网络连接时,没有IP地址他就不能做任何事情(例如下载一个Web网页)。所以,笔记本所采取的一个网络相关的动作是运行 DHCP协议,以从本地DHCP服务器获得一个IP地址以及其他信息。

  • 1)笔记本的操作系统生成一个DHCP请求报文(DHCP协议),并将这个报文放入具有目的地端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段,该UDP报文段则被放置在一个具有广播IP目的地地址(255.255.255.255)和源IP地址0.0.0.0的IP数据报中,因为笔记本还不具有一个IP地址。

  • 2) 包含DHCP请求报文的IP数据报则被放置在以太网帧中。该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备;该帧的源MAC地址是笔记本的MAC地址

  • 3)包含DHCP请求的广播以太网帧是第一个由我的笔记本发送到以太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。

  • 4)路由器的某个接口接收到该广播以太网帧,并且从该以太网帧中抽取出P数据报。该数据报的广播IP目的地址指示了这个IP数据报应当由在该结点的高层协议处理,因此该数据报的载荷(一个UDP报文段)被分解向上到达UDP,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了DHCP请求报文。

  • 5)假设DHCP服务器分配地址67.88.24.101笔记本。DHCP服务器生成包含自己IP地址以及DNS服务器的IP地址、默认网关路由器的IP地址和子网块的一个DHCP ACK报文。该DHCP报文被放入一个UDP报文段中,UDP报文段被放人一个IP数据报中,IP数据报再被放入一个以太网帧中。这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址,目的MAC地址是笔记本的MAC地址。

  • 6)包含 DHCP ACK的以太网帧由路由器发送给交换机。因为交换机是自学习的(链路层交换机),并且先前收到过从笔记本发送的以太网帧,所以该交换机知道这个帧的寻址目的地,仅从通向笔记本的输出端口转发。

  • 7)笔记本接收到包含 DHCP ACK的以太网帧,从帧抽取IP数据报,从IP数据报中抽取UDP报文段,从UDP报文段抽取 DHCPACK报文。DHCP客户则记录下它的IP地址和它的DNS服务器的P地址。它还在其IP转发表中安装默认网关的地址(路由器LAN接口的默认IP地址)。

  • 将www. google. com 的 URL键入其Web浏览器时,Web浏览器会生成一个TCP套接字,用于向www.google.com发送 HTTP 请求。为了生成该套接字,笔记本需要将需要知道www.google.com的IP地址。

  • 8) 操作系统因此生成一个DNS查询报文(关于DNS),包含字符串www.google.com。该DNS报文放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址为第5步中DHCPACK返回的DNS服务器地址和源IP地址IP数据报中。

  • 9)笔记本将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送(在链路层寻址)到学校网络中的网关路由器。然而,经过上述第5步中的DHCP ACK报文知道了学校网关路由器的IP地址,但仍不知道该网关路由器的MAC地址。为了获得该网关路由器的MAC地址,需要使用ARP协议(地址解析协议ARP)。

  • 10)Bob便携机生成一个具有目的IP地址(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设备,包括网关路由器。

  • 11)网关路由器在通往学校网络的接口上接收到包含该ARP查询报文的帧,在ARP报文中目标IP地址匹配其接口的IP地址。网关路由器因此准备一个ARP回答,包含它的MAC地址、IP地址。它将ARP回答放在一个以太网帧中,其目的地址为笔记本MAC,并向交换机发送该帧,再由交换机将帧交付给笔记本。

  • 12)笔记本接收包含ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址。

  • 13)笔记本现在能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意到在该帧中的IP数据报具有IP目的地址为DNS服务器,而该帧具有目的地址网关路由器的MAC。笔记本向交换机发送该帧,交换机将该帧交付给网关路由器。

  • 14)网关路由器接收该帧并抽取包含DNS查询的P数据报。路由器查找该数据报的目的地址,并根据其转发表决定该数据报应当发送到网络哪个路由器。

  • 15)选择出最合适的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址,并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报。

  • 16)最终包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽取出DNS查询报文,在它的DNS 数据库中查找名字www. google. com ,找到包含对应www. google. com的IP地址的DNS源记录。(假设它当前缓存在DNS服务器中)这种缓存数据源于google.com的权威DNS服务器。该DNS服务器形成了一个包含这种主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中,该报文段放入寻址到笔记本的IP数据报中。该数据报将转发到学校的路由器,并经过交换机到笔记本。

  • 17)笔记本从 DNS报文抽取出服务器www. google. com的IP地址。最终,Bob便携机此时准备接触 www.google.com 服务器!

  • 18)既然有了www. google. com的IP地址,也就能够生成TCP套接字,该套接字将用于向 www. google. com发送HTTP GET报文。当生成TCP套接字时,必须首先与www. google.com中的TCP执行三次握手。Bob便携机因此首先生成一个具有目的端口80(针对HTTP的)的TCP SYN报文段,将该TCP报文段放置在具有目的IP地址64.233.169.105(www. google.com)的IP数据报中,将该数据报放置在目的地址为网关路由器MAC的帧中,并向交换机发送该帧。

  • 19)在学校网络、ISP网络和谷歌网络中的路由器朝着www. google. com转发包含TCP SYN的数据报,使用每台路由器中的转发表。

  • 20)最终,包含TCP SYN的数据报到达 www. googole. com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的欢迎套接字。对于谷歌 HTTP服务器和笔记本之间的TCP连接生成一个连接套接字。产生一个TCP SYN ACK报文段,将其放入一个数据报中,最后放入链路层帧中。

  • 21)包含TCP SYNACK报文段的数据报通过谷歌、ISP和学校网络,最终到达笔记本的以太网卡。数据报在操作系统中分解到步骤18生成的TCP套接字,从而进入连接状态。

  • 22)借助生成的套接字,现在准备向www. google.com发送字节了,浏览器生成包含要获取的URL 的HTTP CET报文。HTTP GET报文则写入套接字,其中GET 报文成为一个TCP报文段的载荷。该TCP报文段放置进一个数据报中,并交付到 www. google.com,如前面步骤18~20所述。

  • 23)在www. google. com 的 HTTP服务器从TCP套接字读取 HTTP GET 报文,生成一个HTTP响应报文,将请求的Web页内容放入HTTP响应体中,并将报文发送进 TCP套接字中。

  • 24)包含HTTP回答报文的数据报通过谷歌、ISP和学校网络转发,到达笔记本。Web浏览器程序从套接字读取HTTP响应,从HTTP响应体中抽取Web网页的html,并终于显示了 Web 网页。


http://www.niftyadmin.cn/n/1204392.html

相关文章

bootstrap弹窗居中处理

1.第一种是修改bootstrap.js中的Modal.prototype.show 方法中添加以下一段代码,这种方式模态框出现的很平滑,bug暂未出现 /*模态框居中*/ var $dialogthat.$element.find("div.modal-dialog"), top(document.documentElement.clientHeight-$di…

fdtd中时间监视器怎么放_PPT中的时间轴怎么做才好看?6个小技巧,助你轻松搞定!...

小叶子们,大家好,我是秋叶编辑部的思雨~先跟你们讲一个故事:最近,我在 PPT 里面做了个时间轴,结果被编辑部的同事嘲笑说很丑......悲伤有那么那么大。正发愁时,我刷到了三顿老师的 PPT 时间轴制作和美化技巧…

Java基础面试题(下)(2022整理)

点击观看Java基础面试题(上) 点击观看Java并发面试题 B站面试官:先来个肥肠肥肠基础的问题,如下代码: Integer a 100; Integer b 100; System.out.println(a b)//返回什么? Integer c 150; Integer …

个人家用nas_初识NAS设备

数据,是数字时代的石油。无论是个人的照片、音乐、视频,还是企业的源码、文档、文件资料等都是不允许丢失的。对于大部分没有购买NAS设备的用户来说,一般会把重要资料拷贝到移动硬盘/U盘/百度网盘上,但是以上存储方式或多或少都有…

C++ Exercises(七)

#include <iostream>#include <string>#include <cstdlib>#include <ctime>using namespace std;template <typename T>void deSelSort(T arr[],int n){//双端选择排序int min,max;for (int i0,jn-1;i<j;i,--j){min i;max j;if (arr[min]&g…

sqlite复制数据主键重复_嵌入式数据库sqlite3【基础篇】-基本命令操作,小白一看就懂...

前言数据在实际工作中应用非常广泛&#xff0c;数据库的产品也比较多&#xff0c;oracle、DB2、SQL2000、mySQL&#xff1b;基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB。本文主要讲解数据库SQLite&#xff0c;通过这个开源的小型的嵌入式数据库带…

print显示设置

显示颜色格式&#xff1a;\033[显示方式;字体色;背景色m......[\033[0m] ------------------------------------------- ------------------------------------------- 字体色 | 背景色 | 颜色描述 -------------------------------------------| 40…

Java用户快速了解Python语法(1)

Python语法 文章目录Python语法一、Python 标识符 引号 注释二、Python变量类型三、Python算术运算符中的 ** 和 //四、Python 条件语句&#xff0c;循环语句五、Python 函数提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Python 标识符 引号 注释…