从输入URL到网页显示,期间发生了什么(详解)

这篇具有很好参考价值的文章主要介绍了从输入URL到网页显示,期间发生了什么(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。

解析URL

URL格式

从输入URL到网页显示,期间发生了什么(详解)

首先浏览器的第一步是对URL进行解析,从而 发送给Web服务器的请求信息。

假如说没有访问路径的话,就会访问根目录下的默认文件,即 /index.html或者 /defalut.html

解析URL:实际就是查询服务器域名对应的IP地址

首先浏览器会先看自身缓存中有没有这个域名,如果有,就直接返回,如果没有就去问操作系统,操作系统先查看自己的缓存,如果有就直接返回,如果没有,再去host文件看,再没有的话,就会去访问本地DNS服务器。

域名的级别

www.baidu.com

域名都是用" . "来分隔的,在域名中,越靠右的位置表示其层级越高

实际上域名最后还有一个点,比如
" www.baidu.com." ,这个最后的一个点表示根域名。

所以该域名的层级是.根域是最顶层,它的下一层是.com,再下面是server.com。

所以说,域名的层级关系类似一个树状结构。

从输入URL到网页显示,期间发生了什么(详解)

因此,客户端只要找到任意一台DNS服务器,就能通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器就可以了

而具体的查询过程我在这篇 博文里面有写。

对URL解析完之后,浏览器确定了Web服务器和文件名之后,接下来就是根据这些信息生成HTTP请求消息了。

当生成消息后接下来的传输过程就由操作系统来完成了。

操作系统协议栈

从输入URL到网页显示,期间发生了什么(详解)

浏览器通过调用Socket库来委托协议栈工作,协议栈的上半部分有两块协议,分别是收发数据的TCPUDP,这两个协议会接受应用层的委托执行收发数据的操作。

协议栈的下面是用IP协议控制网络数据包收发操作,在互联网上发送数据时候,数据会被分为一块快的网络包,而将网络包发送给对方的操作就是由IP负责的。

另外IP中还包括 ICMP协议ARP协议

  • ICMP用来告知网络数据包传送过程中产生的错误以及各种控制信息
  • ARP用于根据IP地址查询相应的以太网MAC地址(物理地址)。

IP下面的网卡驱动程序负责网卡硬件,而最下面的网卡则负责完成实际的收发操作,即对网络中的信号执行发送和接受操作。

TCP封装

HTTP是基于TCP协议传输的,我们先来介绍一下TCP协议。

TCP包头格式

从输入URL到网页显示,期间发生了什么(详解)

  • TCP源端口:源计算机上的应用程序的端口号。
  • TCP目的端口:目标计算机的应用程序端口号。
  • 序号:它表示本报文段所发送数据的第一个字节的编号。这个是为了解决乱序的问题。
  • 确认号:确认序列号是接收确认端所期望收到的下一序列号。确认序号应当是上次已成功收到数据字节序号加 1。
  • 首部头长度:指明了数据部分在段内的起始位置。

接下来的是一些状态位

  1. CER和ECE是拥塞控制的信号。当TCP接收端收到了网络拥塞的指示后,就设置ECE以便给发送端发ECN-Echo型号,告诉发送端放慢发送速率,TCP发送端设置CWR,给TCP接收端发CWR信号,只要接收端就知道发送端已经收到信号了,不会再给发送端发ECN-Echo信号了。
  2. URG为紧急信号,如果使用了紧急指针,则将URG设置为1,紧急指针指向从当前序号开始找到紧急数据的字节偏移量。
  3. ACK设置为1则表示确认有效。
  4. PSH指出中国是被推送的数据,特此请求接收端一旦收到数据后就直接较给应用程序,而不是将它缓存在缓冲区。
  5. RST是重新连接信号。
  6. SYN是建立连接信号.
  7. FIN是断开信号。

TCP是面向连接的,所以需要这些带状态的包来改变双方状态。

而它还有流量控制机制,就是通信双方各声名一个窗口(缓存大小),用来表示自己的处理能力
除了这个,它还会做拥塞控制,来控制自己发送的速度。

而在HTTP传输消息前,首先得建立TCP连接。

下面是TCP连接建立过程
从输入URL到网页显示,期间发生了什么(详解)
TCP分割数据

如果HTTP的请求消息比较长,超过了MSS,这时TCP就需要把HTTP的数据拆解成一块块的数据发送。

从输入URL到网页显示,期间发生了什么(详解)

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

TCP报文生成

TCP协议有两个端口
一个是浏览器监听的端口(随机生成)
一个是Web服务器监听的端口(HTTP的默认端口是80,HTTPS的默认端口是443)。

在双方建立连接后,TCP的报文就是TCP头部+ HTTP头部+数据。
即如下图
从输入URL到网页显示,期间发生了什么(详解)

IP封装

TCP模块在执行连接,收发,断开等各阶段操作时,都需要委托IP模块将数据封装成数据包发送给通信对象。

IP包头格式

从输入URL到网页显示,期间发生了什么(详解)
在IP协议里面有源地址IP目标地址IP

源地址IP :即是客户端输出的IP地址。
目标地址IP:即通过DNS域名解析得到的Web服务器IP

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

另外在生成IP数据包时,还有一个问题,假如说客户端存在多个网卡时,在填写源IP地址时,该填写那个IP呐?=

这个时候就需要使用路由表规则,来判断哪一个网卡做为源地址IP。

在Linux操作系统中,我们可以使用 route -n ,命令查看当前系统的路由表。
从输入URL到网页显示,期间发生了什么(详解)

我们假设Web服务器的目标地址是 192.168.10.200

1.首先和第一条目的子网掩码进行与运算,
192.168.10.200 & 255.255.255.0 得到的结果为192.168.10.0
192.168.10.0 与 192.168.3.0结果不一致,所以匹配失败。

2.再与第二条的子网掩码进行与运算,
19.168.10.200 & 255.255.255.0 得到的结果是192.168.10.0,所以将eth1网卡的IP地址作为IP包头的源地址。

假如Web服务器的目标地址是10.100.20.100,最后匹配的结果是第三条。

第三条的目标地址和子网掩码都是0.0.0.0,这表示默认网关,如果其他所有条目都无法匹配,就会自动匹配这一行,并且后续就把包发给路由器,192.168.3.1即是路由器的IP地址。

IP报文生成

从输入URL到网页显示,期间发生了什么(详解)

在生成了IP头部后,接下来网络包还需要在IP头部的前面加上MAC头部

MAC封装

MAC包头格式
从输入URL到网页显示,期间发生了什么(详解)
MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息。(用于两点之间的传输)

一般在TCP/IP通信里,MAC包头的协议类型只使用:

  • 0808 :IP协议
  • 0806: ARP协议

MAC发送方和接收方如何确认?

发送方的MAC地址:它在发送方的网卡中存着,只要将这个值读取出来写入到MAC头部就可以了。

接收方的MAC地址:
首先先查询ARP缓存,如果里面保存着对方的MAC地址,就直接使用。
如果缓存中没有的话,则发送ARP广播。这样就可以得到对方的MAC地址,接着操作系统会把本次查询结果放到ARP缓存中,不过只会缓存几分钟。

在Linux中,我们可以使用arp -a 来查询ARP缓存的内容。
从输入URL到网页显示,期间发生了什么(详解)

MAC报文生成。

从输入URL到网页显示,期间发生了什么(详解)

至此,MAC报文就生成好了。

网卡

数据包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方,因此,我们需要将数字信号转换为电信号,才能在网线上传输。

负责这一过程的是网卡,要控制网卡还需要靠网卡驱动程序

网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分解符,在末尾加上用于检测错误的帧校验序列

从输入URL到网页显示,期间发生了什么(详解)

  • 起始帧分解符是用来标记包起始位置的标记
  • 末尾的FCS标记(帧校验序列)是用来检验包传输过程中是否有损害

最后网卡会将包转换为电信号,通过网线发送过去。

交换机

首先,电信号到达网络接口,交换机中的模块进行接收,接下来交换机里的模块将电信号转换为数字信号

然后通过包末尾的FCS校验错误,如果没有问题则放到缓冲区,这部分和网卡相同,但交换机的工作方式和网卡不同

计算机的网卡本身具有MAC地址,并通过核对收到的包的接收方MAC地址判断是不是发给自己的,如果不是发给自己的则丢弃

相反,交换机的端口不核对接收方MAC地址,而是直接接收所有的包并存放到缓存区中,因此,和网卡不同,交换机的端口不具有MAC地址。

查询MAC地址表

将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了。

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

  • 一个是设备的MAC地址。
  • 一个是该设备连接在交换机的哪个端口上。
MAC地址表 端口 控制信息
00-60-97-A5-43-3C 1
00-00-C0-16-AE-Fb 2
00-02-B3-1C-9C-F9 3

交换机根据数据包的MAC地址,与MAC地址表进行匹配,从而判断应该把数据包发送到哪个端口。

假如说MAC地址表中没有指定的MAC地址。

这样的话,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上。

同时,如果接受方MAC地址是一个广播地址,那么交换机将把包发送到除源端口以外的所有端口。

广播地址

  1. MAC地址中的广播地址 :FF:FF:FF:FF:FF:FF

  2. IP地址中的广播地址:255.255.2555.255

路由器

网络包经过交换机之后,到达了路由器,并会被转发到下一个路由器或目标设备。(交换机是用来组成局域网的,路由器则是用来连接外网的。)

这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。

不过它俩是有区别的

路由器是基于IP设计的,是三层网络设备,路由器的各个端口都具有MAC地址和IP地址。
而交换机是基于以太网设计的,是二层网络设备,交换机的端口不具有MAC地址。

路由器基本原理

路由器的端口具有MAC地址,因此它就能够成为以太网的发生方和接收方,同时还具有IP地址,从这个意义上来说,它和计算机的网卡是一样的。

当转发包时

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

路由器包接收操作

首先,电信号到达网线接口部分,路由器中的模块会将电信号转换为数字信号,然后通过包末尾的FCS进行错误校验

如果没有问题则检查MAC头部中的接收方MAC地址,看看是不是发送给自己的包,如果是就放到接收缓存区中,否则就丢弃到这个包

总的来说,路由器的端口都具有MAC地址,只接收与自身地址匹配的包,遇到不匹配的则直接丢弃。

查询路由表确定输出端口

完成包接收操作之后,路由器就会去掉包开头的MAC头部

交换机是二层设备,路由器是三层设备,MAC头部的作用就是将包送达路由器,其中的接收方MAC地址就是路由器的MAC地址,因此当到达录取之后,MAC头部就会被丢弃。

在这之后,路由器就会根据包的IP地址来对包进行转发。

首先是查询路由表判断转发目标。

目标地址 子网掩码 网关 接口 越点数
10.10.1.0 255.255.255.0 —— eth2 1
192.168.1.0 255.255.255.0 —— eth3 1
0.0.0.0 0.0.0.0 —— eth1 1

假设目标地址为192.168.1.100。
匹配的时候,就是根据包的接收方IP地址查询路由表中的目标地址,以找到相匹配的记录。

它与第二条的子网掩码 做与运算。

192.168.1.100 & 255.255.255.0 得到 192.168.1.0
与目标地址中的192.168.1.0一样。

因此,第二条记录就会做为转发目标。

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

路由器的发送操作

首先,根据路由表的网关列判断对方的地址。

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

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

首先先查询ARP缓存,找不到的话则会发送ARP请求。

接下来是发送方MAC地址字段写为路由器输出端口的MAC地址,还有一个以太类型字段,填写0800(十六进制)表示IP协议。
网络包完成后,接下来会将其转换成电信号并通过端口发送出去,这一步的工作过程和计算机也是相同的。

从输入URL到网页显示,期间发生了什么(详解)

而最终数据经过层层转发,到达路由器,再到达交换机,最终到达目的地。

在网络包传输过程中,源IP和目标IP始终是不会改变的一直变化的是MAC地址,因为需要MAC地址在以太网中进行两个设备之间的包传输。

到达服务器

数据包到达了服务器之后。

  1. 服务器首先拆开数据包的MAC头部,查看是否和服务器自己的MAC地址符合,符合就将包收起来。

  2. 接着拆开数据包的IP头,发现IP地址符合,根据IP头中协议项,知道上层是TCP协议。

  3. 接着拆开TCP的头,里面有序列号,看一看序列号是否符合,如果是就放入缓存,返回一个ACK,如果不是则就丢弃,TCP头部里面还有端口号,HTTP服务正在监听这个端口号。

  4. 于是,服务器就把这个包发送给HTTP进程。

  5. HTTP服务根据HTTP包中的请求,找到对方想要的资源,接着就把这个资源封装在HTTP响应报文中,再经过TCP,IP,MAC封装,从网卡发送出去。由交换机发送到出城的路由器,接着一次次转发,到达客户端。

  6. 最后客户端也执行拆包动作,把HTTP响应报文交给浏览器,让它去渲染页面。

参考文章: 小林coding文章来源地址https://www.toymoban.com/news/detail-401911.html

到了这里,关于从输入URL到网页显示,期间发生了什么(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从输入URL到页面展示这中间发生了什么

    浏览器进程 主要负责用户交互、子进程管理和文件储存等功能。 网络进程 是面向渲染进程和浏览器进程等提供网络资源加载。 渲染进程 也称为浏览器内核,JavaScript引擎V8都是运行在该进程中, 默认会为每个标签窗口页面开辟一个独立的进程 ,负责将网络下载的HTML、Java

    2024年02月08日
    浏览(34)
  • 浏览器地址栏输入url以后发生了什么

    1.DNS对域名进行解析; 2.建立TCP连接(三次握手); 3.发送HTTP请求; 4.服务器处理请求; 5.返回响应结果; 6.关闭TCP连接(四次挥手); 7.浏览器解析HTML; 8.浏览器布局渲染; 1.浏览器对输入的地址补全,然后DNS域名解析  如果你搜索的是baidu.com的时候,实际访问的还是h

    2024年02月13日
    浏览(51)
  • Linux·从 URL 输入到页面展现到底发生什么?

    打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 总体来说分为以下几个过程: DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报

    2024年02月16日
    浏览(53)
  • 在浏览器中输入URL后都会发生什么

    浏览器补全地址和DNS对域名进行解析; 1当搜索baidu.com,实际访问的是http://www.baidu.com,浏览器会补全地址。 因为一个URL由协议、主机名、路径、搜索内容、哈希组成。 2DNS解析过程:客户机先插本地缓存,找不到再将域名发到DNS服务器,它先查它管理的区域,如果就查本地缓

    2024年02月16日
    浏览(38)
  • 说说地址栏输入 URL 敲下回车后发生了什么?

    简单的分析,从输入  URL 到回车后发生的行为如下: URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 首先判断你输入的是一个合法的 URL  还是一个待搜索的,并且根据你输入的内容进行对应操作 URL 的解析第过程中的第一步,一个 url 的结构解析如下: 在之前文

    2024年04月08日
    浏览(38)
  • 面试:浏览器从输入url到渲染页面,发生了什么

    用户输入阶段 合成 URL :浏览区会判断用户输入是合法 URL,比如用户输入的是搜索的,默认的搜索引擎会合成新的,如果符合url规则会根据url协议,在这段内容加上协议合成合法的url      查找缓存 网络进程获取到 URL,先去本地缓存中查找是否有缓存资源,如果有则

    2024年02月06日
    浏览(48)
  • 场景应用:键盘敲入字母a时,期间发生了什么?

    从下面个阶段一层层分析: 面试官:当你键盘敲入字母a时,期间发生了什么? 外行:很高兴有这次面试机会,再见! 面试官:… 面试官:当你键盘敲入字母a时,期间发生了什么? 小白:系统获取输入的值,应用程序捕获对其进行处理,屏幕上显示了搜狗输入法a的候选项

    2024年02月09日
    浏览(57)
  • 键盘敲入 A 字母时,操作系统期间发生了什么?

    关于8.1 键盘敲入 A 字母时,操作系统期间发生了什么?的总结,前面都介绍了,但是在最后总结操作系统发生了什么的时候,我觉得有点不详细,于是写一写自己的补充和理解,不一定正确。 键盘敲击之后, 键盘控制器根据敲击的键生成扫描码,写入寄存器 。 同时通过中

    2024年02月11日
    浏览(37)
  • MySQL执行流程_执行一条select语句,期间发生了什么

    MySQL执行流程 server层负责建立连接、分析和执行SQL 包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,所有内置函数和所有跨存储引擎的功能在该层实现 存储引擎层负责数据的存储和提取 索引数据结构就是由存储引擎层实现,不同的存储引擎支持的索引类型也

    2024年02月04日
    浏览(54)
  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    参考资料: 键盘敲入 A 字母时,操作系统期间发生了什么? 【操作系统】浅谈 Linux 中的中断机制 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「 键盘敲入字母时,操作系统期间发生了什么吗 」? 那要想知道这个发生的过程,我们得先了解了解

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包