当前位置: 首页 > news >正文

浅聊一下网页显示过程

作为程序员,我们每天都在访问各种网页,但你有没有好奇过,当在浏览器里敲下网址按下回车后,背后到底经历了哪些复杂又精妙的过程?今天就带大家一步步拆解,从 URL 解析到页面最终呈现,把每个关键环节讲清楚,即使是刚入门的朋友也能看懂。

1. 第一步:浏览器先搞定 HTTP 请求报文

当我们在浏览器输入网址后,浏览器做的第一件事就是解析 URL,然后生成发给 Web 服务器的 HTTP 请求报文。这个报文里藏着不少关键信息,像请求方式(是 GET 还是 POST)、用的 HTTP 协议版本、要访问的 Web 服务器域名,还有需要传的请求数据等等。

先说说两种常见的请求报文格式:

  • GET 请求报文:这种请求的消息体数据是空的,格式大概是这样 —— 开头是请求行,包含 “方法(GET)+ 空格 + URL + 空格 + 协议版本”,后面跟着消息头,每个消息头都是 “首部字段名:空格 + 字段值” 的形式,每个部分之间用换行符分隔。
  • POST 请求报文:和 GET 不一样,POST 请求有消息体,会带数据。比如登录时传的用户名和密码就放在消息体里。它的请求行是 “POST + 空格 + 路径 + 空格 + 协议版本”,后面同样是消息头,最后是消息体,里面是类似 “"name":"Jaylan","password":"xxxx"” 这样的数据。

不过,光有请求报文还不行,因为只知道域名,根本没办法找到 Web 服务器在哪,这时候就需要把域名变成 IP 地址,DNS 域名解析该登场了。

2. 第二步:DNS 解析,找到服务器的 “门牌号”(IP 地址)

浏览器生成好 HTTP 请求报文后,就会喊 DNS 服务器来帮忙 —— 把 Web 服务器的域名解析成对应的 IP 地址,毕竟在网络世界里,设备之间通信靠的是 IP 地址,不是好记的域名。

这个解析过程就像我们出门问路,特别有意思:

  1. 浏览器先问自己:“我之前有没有缓存过这个域名的 IP 呀?” 如果有,直接拿来用;要是没有,就去问操作系统。
  2. 操作系统也先查自己的缓存,有就返回,没有就去看 hosts 文件,还是没有的话,就只能求助 “本地 DNS 服务器” 了。
  3. 本地 DNS 服务器收到请求,先看自己的缓存,没有的话,就会说:“这个域名归.com 顶级域名服务器管,我给你它的地址,你去问它!”
  4. 接着,本地 DNS 服务器就带着问题去问.com 顶级域名服务器,顶级域名服务器再指引它去问该域名对应的权威 DNS 服务器。
  5. 最后,权威 DNS 服务器会告诉本地 DNS 服务器 “www.server.com对应的 IP 是 X.X.X.X”,本地 DNS 服务器再把这个 IP 地址返回给浏览器。

这里要提一嘴 DNS 缓存,有了它,就不用每次解析域名都走这么多步骤了,能大大提高访问速度。浏览器、操作系统、本地 DNS 服务器都有自己的缓存,优先从缓存里找,找不到再走完整的解析流程。

3. 第三步:交给协议栈,开启数据传输准备

拿到 IP 地址后,浏览器就把 HTTP 数据传输的活儿交给操作系统里的协议栈了。协议栈内部是分了层的,每层各司其职,而且有明确的 “上下级” 关系 —— 上面的层会把工作委托给下面的层,下面的层接到活儿就认真执行。

我们可以把协议栈想象成一个 “工作团队”:

  • 应用程序(也就是浏览器)通过调用 Socket 套接字,把任务交给协议栈。
  • 协议栈上半部分有两个 “员工”:TCP 和 UDP,它们属于传输层协议,主要负责收发数据,接到应用层的委托就开始干活。
  • 协议栈下半部分是 IP 协议,属于网络层,负责控制网络包的收发。数据在网络里传输时,会被切成一小块一小块的网络包,把这些包发给对方,就是 IP 的活儿。
  • 另外,IP 协议里还带着两个 “助手”:ICMP 协议和 ARP 协议。ICMP 协议负责告诉大家网络包传输时出了什么错,还有各种控制信息;ARP 协议则是根据 IP 地址找对应的以太网 MAC 地址。
  • 最底层是网卡驱动程序和网卡,网卡驱动负责控制网卡硬件,网卡则实际完成数据的收发,把网线里的信号收进来,或者把数据变成信号发出去。

4. 第四步:TCP 协议,给数据 “分好包”“标好号”

HTTP 是基于 TCP 协议传输数据的,所以接下来 TCP 要发挥作用了。

首先是 “分割数据”:

  • 这里有两个关键概念:MTU 和 MSS。MTU 是一个网络包的最大长度,在以太网里一般是 1500 字节;MSS 是除去 IP 和 TCP 头部后,一个网络包能装的 TCP 数据的最大长度。
  • 如果 HTTP 请求消息太长,超过了 MSS 的长度,TCP 就会按照 MSS 的长度把 HTTP 数据拆成一小块一小块,每一块都加上 TCP 头信息,然后交给 IP 模块去发送。

然后是 “生成 TCP 报文”:

  • TCP 报文里会有两个端口号,一个是浏览器这边的监听端口(一般是随机生成的),另一个是 Web 服务器的监听端口(HTTP 默认是 80,HTTPS 默认是 443)。
  • 等双方建立好连接后,TCP 报文的数据部分就放着 HTTP 的头部和数据,生成好之后,就交给下面的 IP 协议处理。

5. 第五步:IP 协议,给数据 “贴好地址标签”

TCP 在连接、收发数据、断开连接这些阶段,都需要委托 IP 协议把数据封装成网络包,发给对方,所以得按照 IP 协议的规则生成 IP 报文。

IP 报文的头部有几个关键信息:

  • 协议号:因为 HTTP 是通过 TCP 传输的,所以这里要填 06(十六进制),表示用的是 TCP 协议。
  • 源地址 IP 和目标地址 IP:源地址 IP 就是我们自己电脑(客户端)的 IP 地址;目标地址 IP 就是之前通过 DNS 解析得到的 Web 服务器 IP 地址。

不过,光有 IP 地址还不够,要完成两点之间的传输,还得靠 MAC 地址。

6. 第六步:靠 MAC 地址,实现 “点对点” 传输

生成好 IP 协议报文后,还得给它加个 MAC 头部,里面要包含发送方和接收方的 MAC 地址,这样才能实现两点之间的准确传输。

先说说 MAC 头部里的协议类型:在 TCP/IP 通信里,0800 代表是 IP 协议,0806 代表是 ARP 协议。

再看看收发双方的 MAC 地址怎么来:

  • 发送方的 MAC 地址:这个简单,每个网卡在生产的时候,MAC 地址就写进网卡的 ROM 里了,直接读出来填到 MAC 头部就行。
  • 接收方的 MAC 地址:得先查路由表,找到接收方的 IP 地址,然后用 ARP 协议以广播的方式,根据 IP 地址找到对应的 MAC 地址。

7. 第七步:网卡出马,把数据变成 “电信号” 发出去

到这一步,网络包还只是存在内存里的一串二进制数字,根本没办法直接传到对方那里。所以得把这些数字信息转换成电信号,才能在网线里传输,而干这个活儿的就是网卡,网卡驱动则负责控制网卡。

具体过程是这样的:

  1. 网卡驱动拿到网络包后,会把它复制到网卡内部的缓存区。
  2. 然后在网络包的开头加上报头和起始帧分界符(这个分界符是用来标记包的起始位置的),在末尾加上帧校验序列 FCS(用来检查包在传输过程中有没有损坏)。
  3. 最后,网卡把处理好的包转换成电信号,通过网线发送出去。

总结

从输入网址到网页显示,整个过程环环相扣,涉及 HTTP、DNS、TCP、IP、ARP 等多个协议,还有浏览器、协议栈、网卡等各种组件的协同工作。把这些过程搞明白,不仅能帮我们更好地理解网络通信的原理,在遇到网络问题时,也能更快地定位排查。如果这篇内容对你有帮助,欢迎点赞收藏,有疑问也可以在评论区交流~

http://www.dtcms.com/a/446312.html

相关文章:

  • h 函数的运用场景=== 函数式封装组件 (弹窗调用)
  • 数据结构——排序算法全解析(入门到精通)
  • 建设装饰网站创客贴做网站吗
  • 爆炸特效-Unity-04-shader粒子系统
  • 公司做网站一般用什么域名网店设计师是干什么的
  • 【Redis】RedLock算法讲解
  • 网站专题页功能河北省住宅和城乡建设厅网站
  • stp root secondary 概念及题目
  • 马尔可夫链蒙特卡洛(MCMC):高维迷宫里的 “智能导航仪”—— 从商场找店到 AI 参数模拟
  • 无穿戴动捕大空间交互:如何靠摄像头实现全感官沉浸体验?
  • 求个没封的w站2022高端网站建设的要求
  • 网站经常修改好不好拼多多网店注册
  • 题解:洛谷P14127 [SCCPC 2021] K-skip Permutation
  • FreeBSD14.1 安装中文输入法fcitx
  • C++STL反向迭代器设计
  • 一文学会《C++》进阶系列之C++11
  • 腊肉网站的建设前景网页版微信可以发朋友圈吗
  • 大连凯杰建设有限公司网站wordpress 文章链接失效
  • 百度网站优化升上去国外网站入口
  • BIT*算法
  • Python常用三方模块——psutil
  • 网站开发的优势建设京东物流网站的目标是什么
  • 制作网站详细步骤爱客crm系统登录
  • Linux事件循环——高效处理多任务(高并发)
  • 【Linux】POSIX信号量、环形队列、基于环形队列实现生产者消费者模型
  • SELinux系列专题(一):SELinux是什么?
  • 三角函数公式全归纳
  • 热 动漫-网站正在建设中-手机版wordpress活动报名
  • 建设银行扬中网站织梦网站仿站
  • 网站建设公司伟置鄂尔多斯 网站制作