当你在浏览器地址栏输入URL按下回车之后发生了什么???

文章目录

  • 输入URL后Web页面是如何呈现的?
  • 一、准备:DHCP、UDP、IP和以太网
  • 二、仍在准备:DNS和ARP
  • 三、仍在准备:域内路由选择到DNS服务器
  • 四、Web客户—服务器交互:TCP和HTTP

学习了《计算机网络——自顶向下》总结一下第六章,也就是学完了应用层、运输层、网络层、链路层后的一个案例:Web页面的历程

首先,对于学习计算机网络,目前看了《图解HTTP》、《计算机网络——自顶向下》两本书,准备记录一些笔记,对于前一本《图解HTTP》里面有许多插图,而且比较简单好理解,基本只涉及了HTTP协议的一些相关内容,不过也很详细,《计算及网络——自顶向下》也是很好理解的,学习计算机网络必读书目吧

然后,自己对于网络学习还需要阅读下《TCP/IP详解》

如果总结的内容有错误,希望大家告知,一起加油!

输入URL后Web页面是如何呈现的?

为了更好的理解,我使用在《图解HTTP》中提到的来给大家一个简单的概念,这样之后我们才能更好地学习《计算机网络——自定向下》中第六章最后的案例,当然,中间涉及很多各个层次的协议,一些没办法详细介绍,会在后面的笔记中详细写出来。

  • 当我们在网页浏览器的地址栏中输入URL时,Web页面时如何呈现的呢?

当然,即使我们不清楚其中的运作原理,也能看到Web页面:

  • 在浏览器地址栏内输入URL(www.baidu.com)之后,信息被送往某处,然后从某处获得回复,内容就会显示在Web页面上

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第1张图片

  • Web页面当然不能凭空显示出来。根据Web浏览器地址栏中指定的URL,Web浏览器会从Web服务器获取资源(resource)等信息,从而显示出Web页面
  • 像我们这种发送请求的Web浏览器(Chrome浏览器),都可以称为客户端(client)

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第2张图片

  • Web使用一种叫做HTTP的协议完成从客户端到服务器端等一系列运作流程,可以说Web是建立在HTTP协议上通信的

  • HTTP属于TCP/IP协议族中的一员,TCP/IP协议族按层次分为4层:应用层传输层网络层数据链路层

  • 应用层:决定了向用户提供服务时通信的活动。

    • TCP/IP协议内预存了各类的应用服务,比如FTP(文件传输协议),DNS(域名解析系统)就是其中两类,HTTP协议也处于该层。
  • 传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

    • TCP(传输控制协议)和UDP(用户数据报协议)
  • 网络层:网络层用来处理网络上李东的数据包,数据包是网络传输层的最小数据单元,该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传送给对方。

    • 与对方计算机之间通过多台计算机或网络设备传输时,网络层所起的作用就是在众多的选项中选择一条传输路线。
  • 链路层:用来处理连接网络的硬件部分。

    • 包括操作系统、硬件的设备驱动、NIC(网卡)及光纤等。
  • 利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从链路层往上走:

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第3张图片

  • 发送端在层与层之间传输数据时,没经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第4张图片

  • 好了,接下来我们去总结下沿协议栈向下的旅程!我们想象一个场景:一名学生Bob将他的便携机与学校的以太网交换机相连,下载一个Web页面(比如说www.google.com主页),为满足这个看起来简单的请求,背后隐藏了许多细节。

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

  • 场景

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第5张图片

我们假定Bob启动它的便携机,然后用其一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连,学校的这台路由器又与一个ISP连接(comcast.net),ISP为学校提供了DNS服务(DNS服务器驻留在Comcast网络中而不是学校中)

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第6张图片

当Bob首先将其便携机与网络连接时,没有IP地址就不能做任何事情,所以采取一个网络相关的动作:运行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地址。

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第7张图片

(上图是DHCP协议的4个步骤,仅有最后两个DHCP步骤是实际必要的)

  1. DHCP服务器发现:客户发送DHCP发现报文
  2. DHCP服务器提供:DHCP服务器接收到客户发送的DHCP发送报文,并发出DHCP提供报文
  3. DHCP请求:选择服务器向其发送DHCP请求报文进行响应,回显配置参数。
  4. DHCP ACK:服务器用DHCP ACK报文,对DHCP请求报文进行相应,证实所要求的的参数。

(2)包含DHCP请求报文IP数据报则被放置在以太网帧中,该以太网帧具有目的MAC地址FF:FF:FF:FF:FF:FF),使该帧将广播到交换机连接的所有设备,该帧的源MAC地址是Bob便携机的MAC地址(00:16:D3:23:68:8A

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第8张图片

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

(4)路由器在它的具有MAC地址(00:22:6B:45:1F:1B)的接口接收到该广播以太网帧,该帧中包含DHCP请求,并从该以太网帧抽取出IP数据报,该数据报的广播IP目的地址指示了这个IP数据报应当在该节点的高层协议处理,因此该数据包的载荷(一个UDP报文段)被分解,向上到达UDPDHCP请求报文从此UDP报文中抽取出来,此时DHCP服务器有了DHCP请求报文

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第9张图片

(5)我们假设运行在路由器中的DHCP服务器能够以CIDR(无类别域间路由选择)块68.85.2.0/24分配IP地址,在学校内使用的所有IP地址都在Comcast的地址块中。我们假设DHCP服务器分配地址(68.85.2.101)给Bob便携机,DHCP服务器生成这个IP地址68.85.2.101)、DNS服务器的IP地址68.87.71.226)、默认网关路由器的IP68.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

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第10张图片

(6)包含DHCP ACK以太网帧由路由器发送给交换机,因为交换机是自学习的,并且先前从Bob便携机接收到(包含DHCP请求的)以太网帧,所以该交换机知道寻址到00:16:D3:23:68:8A的帧仅从通向Bob便携机的输出端口转发。

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第11张图片

(7)Bob便携机接收到包含DHCP ACK的以太网帧,从该以太网帧中抽取出IP数据报,从IP数据报中抽取出UDP报文段,从UDP报文段中抽取出DHCP ACK报文。Bob的DHCP客户则记录下它的IP地址68.85.2.101)和它的DNS服务器的IP地址68.87.71.226)。它还在其IP转发表中安装默认网关地址68.85.2.1)。Bob便携机将向该默认网关发送目的地址为其子网(68.85.2.0/24以外的所有数据报。

此时,Bob便携机已经初始化好了它的网络组件,并准备开始处理Web页面获取。

二、仍在准备:DNS和ARP

当Bob将www.google.com的URL键入其Web浏览器时,它开启了一长串事件,这将导致谷歌主页最终显示在其Web浏览器上。

Bob的Web浏览器通过生成一个TCP套接字开始了该过程,套接字(Socket)用于向www.google.com发送HTTP请求。为了生成该套接字,Bob便携机将需要知道www.google.com的IP地址,此时需要使用DNS协议提供这种名字(www.google.com)到IP地址(64.233.169.105)的转换服务。

(8)Bob便携机上的操作系统因此生成一个DNS查询报文,将字符串www.google.com放入DNS报文的问题段中。该DNS报文段放置在一个具有53号(DNS服务器)目的端口的UDP报文段中。该UDP报文段则被放入具有IP目的地址68.87.71.226=>DNS服务器IP地址)和源IP地址68.85.2.101=>Bob便携机IP地址)的IP数据报中。

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第12张图片

(9)Bob便携机则将包含DNS请求报文的数据报放入一个以太网帧中。该帧将发送(在链路层寻址)到Bob学校网络中的网关路由器。然而,即使Bob便携机经过上述第(5)步中的DHCP ACK报文知道了学校网关路由器的IP地址(68.85.2.1),但仍然不知道网关路由器的MAC地址00:22:6B:45:1F:1B)。为了获取该路由网关的MAC地址,Bob便携机需要使用ARP协议

ARP协议地址解析协议,该协议提供了将IP地址转换为链路层地址(MAC地址)的机制。

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

(11)网关路由器在通往学校网络的接口上接收到包含该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便携机的MAC地址),并向交换机发送该帧,再由交换机将该帧交付给Bob便携机

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第13张图片

(12)Bob便携机接收包含该ARP回答报文的帧,并从ARP回答报文中抽取网关路由器的MAC地址00:22:6B:45:1F:1B)。

(13)Bob便携机现在(最终!!)能够使包含DNS查询的以太网帧寻址到网关路由器的MAC地址。注意到该帧中的IP数据报具有目的地址68.87.71.226=>DNS服务器IP地址),而该帧具有目的地址00:22:6B:45:1F:1B=>网关路由器)。Bob便携机向交换机发送该帧,交换机将该帧交付给网关路由器。

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

(14)网关路由器接收该帧并抽取包含DNS查询的IP数据报。路由器查找该数据报的目的地址68.87.71.226=>DNS服务器IP地址),并根据其转发表决定该数据报应当发送到Comcast网络中最左边的路由器。IP数据报放置在链路层帧中,该链路适合将学校路由器连接到最左边Comcast路由器,并且该帧经过这条链路发送。

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第14张图片

(15)在Comcast网络中最左边的路由器接收到该帧,抽取IP数据报,检查该数据报的目的地址68.87.71.226=>DNS服务器IP地址),并根据其转发表确定出接口,经过该接口朝着DNS服务器转发该数据报,而转发表已根据Comcast域内协议(如RIP。OSPF或IS-IS)以及因特网的域间协议BGP所填写。

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第15张图片

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

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第16张图片

(17)Bob便携机从DNS报文中抽取出服务器www.google.comIP地址64.233.169.105)。最终,在大量的工作后,Bob便携机此时准备接触www.google.com服务器!!!

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

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

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第17张图片

(19)在学校网络、Comcast网络、谷歌网络中的路由器朝着www.google.com转发包含TCP SYN的数据报,使用每台路由器中的转发表,如前面步骤(14)~(16)那样。前面讲过支配分组经Comcast和谷歌网络之间域间链路转发的路由器转发表表项,是由BGP协议决定的。

(20)最终,包含TCP SYN的数据报到达www.google.com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的欢迎套接字。对于谷歌HTTP服务器和Bob便携机之间的TCP连接生成一个连接套接字。产生一个TCP SYNACK报文段,将其放入向Bob便携机寻址的一个数据报中,最后放入链路层帧中,该链路适合将www.google.com,连接到第一跳路由器

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

当你在浏览器地址栏输入URL按下回车之后发生了什么???_第18张图片

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

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

(24)包含HTTP回答报文的数据通过谷歌、Comcast、学校网络转发,到达Bob便携机。Bob的Web浏览器程序从套接字读取HTTP响应,从HTTP响应体从抽取Web网页的html,并最终(终于!!!!!)显示了Web网页。

这是综合、完整的例子,更关注“怎么做”而不是“为什么做”,其中许多概念没有详细介绍,但却能对网络请求有一个完整的认识。

你可能感兴趣的:(计算机网络)