当输入网址后,到网页显示,期间发生了什么

      最后更新:2022-07-22 21:53

      当我们输入URL到网页显示时发生什么

      域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

      让我们看看一个完整的HTTP请求过程

      1.首先,做域名分析,域名分析的具体过程:应用层

      • 浏览器搜索自己的DNS缓存,在缓存中保持一个相应的域名和IP地址表;
      • 否则,搜索操作系统DNS缓存;
      • 否则,操作系统将域名发送到本地域名服务器(在递归查询模式中),本地域名服务器查询自己的DNS缓存,成功搜索返回结果。否则,迭代搜索由:
      • 本地域名服务器将返回接收的IP地址到操作系统,而IP地址本身将被缓存;
      • 操作系统将IP地址返回到浏览器,同时它还缓存IP地址本身;
      • 到目前为止,浏览器已经收到与域名相关的IP地址。

      2.浏览器启动HTTP请求;应用程序层(将相应的应用程序层协议头条添加到数据中)
      3.在传输层旁边(分隔数据,序列数,添加端口数),选择传输协议,TCP或UDP,TCP是一个可靠的传输控制协议,加密HTTP请求,添加端口数等信息;
      4.然后加入网络层(添加IP协议头,源IP,目的IP),通过IP协议将IP地址包入IP数据消息中,然后使用ARP协议。当主机发送信息时,将发送包含目标IP地址的ARP请求给所有网络上的主机,并接收返回消息,为确定目标的物理地址,找到目标 MAC地址;
      5.接下来是数据链层(增加帧头和帧端和数据 MAC地址),交换器将IP数据消息的顶部和底部添加到被传递的网络层中,封装为MAC帧,现在,Mac开始根据目的建立TCP连接,三次握手,接收器接收了在物理层上传输的位流后,根据首尾的标记,确定帧的开始和结束,将中间数据转移到网络层,然后将这些层传递到应用程序层上;

      6.服务器响应请求并请求客户端要的资源,传回给客户端;

      7.当TCP连接被切断时,浏览器将页面呈现给客户端。

      详细地分析了这个过程,或者有东西在里面,然后仔细地看一下你进入网站,然后进入页面显示时发生的事情

      解析URL

      第一个步骤是分析URL并生成发送到Web服务器的请求信息。

      当没有路径名称时,它代表在访问根目录中设置的默认文件,例如/index.html或/default.html

      在分析URL后,确定Web服务器和文件名,然后根据这些信息生成HTTP请求消息。

      DNS域名解析

      分析URL并生成HTTP消息后,您需要委托操作系统向Web服务器发送消息。

      但是我们需要得到服务器的相应的IP地址,因为向一个受托的操作系统发送消息需要知道它的IP地址。

      DNS服务器特别存储Web服务器域名与IP之间的相关关系。

      流程

      1. 客户端向本地DNS服务器发送IP请求
      2. 当非DNS服务器接收请求时,如果缓存中有一个请求,它直接返回IP地址,如果没有请求,它搜索根域服务器。
      3. 根 DNS 接收到本地 DNS 的请求并发现后端是. com 将是. com 顶层域名服务器的服务器地址被返回。
      4. 收到本地DNS后,返回.com域名服务发送请求请求IP
      5. 顶层域名服务器返回负责区域的权威DNS服务器的地址
      6. 本地DNS服务器向授权DNS服务器请求IP(为什么它是授权DNS服务器,它是域名分析结果的源头)
      7. 在授权DNS服务器查询后,通知本地DNS相应的IP地址
      8. 本地DNS返回IP给客户端,建立客户端与目标之间的连接

      DNS的分析过程已经完成。

      图解

      在这里插入图片描述

      域名分析的过程只指没有路径的路径, 只告诉他去哪里看.

      将HTTP传输工作转移到操作系统中的协议堆栈

      协议堆栈的内容分为几个部分,每个部分执行不同的任务,它们之间的关系有一定规则。顶部将委托工作给下部,下部接收工作并执行它。

      在这里插入图片描述

      1. 应用程序通过调用索克库委托堆栈工作。

      2. 协议栈的上半部分有两块,分别是负责收发数据的TCP协议和UDP协议,他们接受应用层的委托执行收发数据的操作。

        协议堆栈的下半部分是IP协议控制网络包交付操作,在通过互联网传输数据时,数据将被切成一个网络包,向另一方发送网络包的操作是IP的责任.此外,IP包括ICMP协议(网络包传输过程中的错误通知和各种控制信息)和ARP协议(根据IP地址查询的相应的Ethernet MAC地址)

      3. IP下的网络卡驱动器负责控制网络卡硬件

      4. 左下部负责完成实际接收和接收操作,即执行网络线信号的发送和接收操作。

      基于TCP协议传输

      TCP包头格式

      在这里插入图片描述

      1. 源端口和目标端口是不可耗尽的,没有两者,您不知道该发送哪个应用程序
      2. 解决包故障问题的序列
      3. 确保确认对方是否收到它,否则再发送,知道如何发送。解决不丢失包裹的问题
      4. 一些状态位,syn是发起一个连接,ACK是恢复,RST是重新连接,FIN是结束连接等。TCP是面向连接的,因而需要维护连接的状态,这些带状态的包的发送会引起双方状态变更
      5. 该窗口的大小用于识别当前可用的处理能力,接收速度不能过快或过慢以实现TCP流量控制。 同时控制传输速度以实现拥堵控制

      三次握手

      TCP需要三个握手才能连接

      在这里插入图片描述

      1. 一开始客户端和服务器都处于 CLOSE 状态。先是服务端主动监听某个接口,处于 LISTEN 状态。
      2. 客户端启动连接, 发送SYN, 然后进入SYN - SENT状态
      3. 服务端收到发起的连接,返回 SYN,并且 ACK 客户端的 SYN ,之后处于 SYN-RCVD 状态
      4. 客户端接收由服务器发送的SYN和ACK,然后是 ESTABLISHED,因为它成功地接收它们一对一。
      5. 接收ACK和SEQ后,服务端是 ESTABLISHED 的,因为它也接收一个一个

      因此,三个握手的目的在于确保双方都有能力发送和接收

      TCP数据分割

      如果HTTP请求消息比较长了,超过了MSS 的长度,这是 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。

      在这里插入图片描述

      • MTU: 网络包的最大长度, 通常是以太网中的1500字节.
      • MSS:一个网络包在删除IP和TCP头条后能容纳的TCP数据的最大长度。

      数据会以 MSS 的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

      在这里插入图片描述

      TCP 报文生成

      TCP协议有两个端口,一个用于浏览器监控(通常是随机生成)和一个用于Web服务器监控(HTTP默认为80,HTTP默认为443)。

      在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,组装好TCP报文之后,就需要交给下面的网络层处理。

      在这里插入图片描述

      远程定位

      TCP模块需要委托IP模块编码数字到网络包中发送给通信对象,在执行连接、接收和切断操作的各个阶段。

      在 IP 协议里面需要有源地址IP和目标地址IP:

      • 源地址IP,即客户端输出的IP地址;
      • 目标地址,即通过 DNS 域名进行分析的Web服务器的IP。

      因为 HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06 (十六进制),表示协议为 TCP。

      MAC两点传输

      在生成IP项之后,下一个网络包需要在IP项前面添加MAC项

      MAC字符串是Ethernet使用的字符串,它包含接收者和发送者 MAC地址等信息。

      在这里插入图片描述

      在MAC包中,发送者MAC地址和接收者目标MAC地址是两个点之间传输的需要。

      在TCP/IP通信中,MAC包协议类型只使用:

      • 0800:IP协议
      • 0806:ARP协议

      如何确认MAC发送者和接收者

      发送方的 MAC 地址获取就比较简单了,MAC 地址是在网卡生产时写入到 ROM 里的,只要将这个值读 取出来写入到 MAC 头部就可以了。

      接收方的 MAC 地址就有点复杂了,只要告诉以太网对方的 MAC 的地址,以太网就会帮我们把包发送过去,那么很显然这里应该填写对方的 MAC 地址。

      所以先得搞清楚应该把包发给谁,这个只要查一下路由表就知道了。在路由表中找到相匹配的条目,然 后把包发给 Gateway 列中的 IP 地址就可以了。

      如何获取对方的MAC地址

      这需要一个ARP协议来帮助我们找到路由器的MAC地址

      ARP协议在Ethernet上广播,并调用Ethernet上的所有设备:"这个IP地址是谁?请告诉我您的MAC地址。

      然后有人回答说IP是他的,他的MAC地址是XX。

      如果另一方和他们自己是同一个子网,那么通过上述操作可以得到另一方的MAC地址,然后我们将这个MAC地址写入MAC头,MAC头完成。

      不是每次你需要收播的时候

      查询的结果将存储在下面的操作系统中,称为ARP缓存的内存空间中,但缓存需要几分钟。

      这意味着在发送包时首先查询ARP缓存,如果对方的MAC地址已经存储在ARP缓存中,那么不需要发送查询并直接使用ARP缓存中的地址。

      当ARP缓存不包含其他MAC地址时,会发送ARP广播查询。

      网络卡将数字信息转换为电话号码

      IP生成的网络包知识存储在存储中的一系列二进制数字信息中,无法直接发送给另一方,因此,我们需要将数字信息转换为通过网络传输的电报,这意味着这是真正的数据传输过程。

      网络卡执行此系列操作,需要网络卡驱动程序来控制网络卡。

      在从IP模块获取包后,网络卡将将其复制到网络卡内部的缓存区,然后在开始时添加消息标题和实际帧边界,以及用于检测错误的帧校正序列。

      在这里插入图片描述

      • 启动帧分隔器是一个标记,用来指示包的启动位置
      • 最后的FCS(帧检查序列)用于检查包传输过程是否损坏

      最后, 网络卡将数据包转换成电报,并通过网络线发送.

      交换机转发包

      开关的设计是将原来的网络包转移到目的地

      包交接操作

      首先,电报到达网络接口,交换机的模块模块接收,然后交换机的模块将电报转换成数字信号。

      然后在包末端检查FCS的错误,如果没有问题,将它们置于缓冲器中。 这个部分基本上与计算机的网络卡相同,但交换机的工作方式与网络卡不同。

      计算机的网络卡本身有MAC地址,并通过验证接收者接收包的MAC地址来决定是否发送给自己,如果你不把它给自己,就把它给别人;相对而言,交换机的终端没有验证接收机的MAC地址,相反,它直接接收所有数据包并存储它们在缓冲器中。因此,交换机和网卡不同,开关的端口没有MAC地址

      在将包放在缓冲区后,您需要询问是否包的接收机 MAC地址已经记录在 MAC地址表中。

      交换机的MAC地址列表主要包含两个信息:

      • 一个是设备的MAC地址
      • 另一个是该设备连接到哪个开关的端口

      在这里插入图片描述

      举个例子,如果收到的包裹的接收机 MAC地址为00-02-B3-1C-9C-F9,匹配图表中的第三行,根据端口列的信息,该地址已知位于3号港口。然后你可以通过交换电路发送数据包到相应的端口。

      因此,交换机根据MAC地址表搜索MAC地址,然后发送信号到相应的端口。

      如果交换机无法找到MAC地址怎么办?

      在地址表中无法找到指定的MAC地址,这可能是因为该地址的设备尚未向交换机发送数据包,或者由于该设备没有运行一段时间,地址已被从地址表中删除。

      在这种情况下,开关不能决定将数据包转移到哪个端口,而是只能转移到其他所有端口,而不是源端口,无论设备是否连接来接收数据包。

      这不会造成任何问题,因为Ethernet设计最初将数据包发送到整个网络,只有相应的接收器接收数据包,而其他设备则忽略数据包。

      那会造成网络拥堵吗

      在发送包后,目标设备会做相应的操作,一旦包返回,交换机可以将其地址写入MAC地址表,下次不需要将包发送到所有端口。

      局域网中每秒可以传输上千个包,多处一两个包并无大碍。

      此外,如果接收机的MAC地址是广播地址,交换机会将软件包发送到除源端口外的所有端口。

      下面两个是广播地址

      • MAC 地址中的 FF:FF:FF:FF:FF:FF
      • IP 地址中的 255.255.255.255

      通过路由器转发

      在网络包通过开关后,它到达路由器并转移到下一路由器或目标设备。

      该步骤传输的工作原理类似于交换机的工作原理,也是通过检查表来确定数据包的传输。

      然而,在特定操作过程中,路由器和开关是不同的。

      • 由于路由器是基于IP的,称为三层网络设备,每个路由器的端口都有MAC地址和IP地址
      • 该开关基于Ethernet,通常被称为两级网络设备。开关的端口没有MAC地址

      路由器基本原理

      路由器的端口有一个MAC地址,因此它可以是Ethernet的发送者和接收者;它也有一个IP地址,在这个意义上类似于计算机的网络卡。

      当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由响应的端口作为发送方将以太网包发送出去。

      路由器的包接收操作

      首先,信号到达网络接口,路由器中的模块将信号转换成数字信号,然后通过FCS包末端进行错误检查。

      如果没有问题,请检查接收机的MAC地址在MAC头部,看看卡是否向自己发送IDE包,如果没有,将它置于接收缓冲区,或丢弃包。

      一般来说,路由器的端口有MAC地址,只接收与其本身地址匹配的包,如果没有匹配的包,则被丢弃。

      查询路由表确定输出端口

      在包接收操作完成后,路由器将删除初始包的MAC头。

      MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被抛弃。

      然后,路由器根据MAC头背部的IP头的内容进行数据包传输操作。

      传输操作分为几个阶段,首先,查询路由表确定传输目标。

      在这里插入图片描述

      举个例子

      假设地址为 10.10.1.101 的计算机要向地址为 192.168.1.100 的服务器发送一个包,这个包先到达图中的路由器。

      确定传输目标的第一步是在接收器IP地址查询路由表中的目标地址列中找到匹配的记录。

      上述路由匹配,每个条目的子网掩码和 192.168.1.100 IP 做&与运算后,结果与相应的文章的目标地址匹配.如果匹配被选为传送目标,如果不匹配, 继续与下一条匹配路由.

      如第二条目的子网掩码 255.255.255.0 与 192.168.1.100 IP 做&与运算后,得到结果是 192.168.1.0 ,这与第二条目的目标地址 192.168.1.0 匹配,第二条记录将作为转移目标。

      实在找不到匹配路由时,就会选择默认路由,路由表中子网掩码为 0.0.0.0 的记录表示「默认路由」。

      路由器的发送操作

      下一步是输入该包的发送操作

      首先,我们需要根据网络 Gateway表来判断对方的地址

      • 如果路由是IP地址,则该IP地址是我们想要发送的目标地址,并且尚未到达终点,需要继续由路由器发送。
      • 如果网关为空,则IP头部中的接收方 IP 地址就是要转发到的目标地址,也是终于找到 IP 包头里的目标地址了,说明已抵达终点。

      知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地址。

      路由器也有一个ARP缓存,所以它们首先查询ARP缓存并发送一个ARP请求,如果他们找不到它。

      接下来是发送者MAC地址字段,其中输入输入端口的MAC地址,还有一个以太网类型字段,其中0080(16英寸)代表IP协议。

      网络包完成后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机也是相同的。

      发送的网络包通过交换机到达下一个路由器,因为接收机的MAC地址是下一个路由器的地址,因此交换包的机会根据这个地址发送到下一个路由器。

      接下来,下一个路由器将将数据包转移到下一个路由器,并且在层级转移之后,网络数据包到达最后的目的地。

      我不知道你是否注意到了,但在数据包传输过程中,源IP和目标IP都是相同的,而MAC地址也是相同的,因为您需要MAC地址来传输两个设备之间的数据包

      客户端接收数据包

      在这里插入图片描述

      数据包抵达服务器后,服务器会先扒开数据包的 MAC 头部,查看是否和服务器自己的 MAC 地址符合,符合就将包收起来。

      接着继续扒开数据包的 IP 头,发现 IP地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。

      于是,扒开 TCP 的头,里面有序列号,需要看一看这个序列包是不是我想要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。TCP 头部里面还有端口号,HTTP 的服务器正在监听这个端口号。

      因此,服务器自然地知道HTTP进程需要该包,并发送该包到HTTP进程中。

      服务器的 HTTP 进程看到,运来这个请求是要访问一个页面,于是把这个网页封装在HTTP 响应报文里。

      HTTP响应消息也需要放在TCP、IP、MAC头上,但是这个源地址是服务器IP地址,而客户端IP地址是目标地址。

      穿好头部衣服后,从网卡出去,交由交换机发出到出城的路由器,路由器就把响应数据包发送到了下一个路由器,就这样跳啊跳。

      客户端收到了服务器响应的数据包后,也开始扒皮,把收到的数据包的皮扒的只剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递就这样显示出来了。

      最后客户端要厉害了,向服务器发起了 TCP 四次挥手,至此双方连接就断开了。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类