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

输入网址到网页显示的整个过程

一、根据HTTP协议,产生请求报文

        首先浏览器做的第一步工作就是要对 URL 进行解析,生成发送给 Web 服务器的请求报文,该报文中包含请求方式、协议版本、Web服务器的域名、请求数据等。

        请求报文并不能直接发送给Web服务器,因为仅仅通过域名,并不能定位Web服务器的网络地址,还需要将域名解析成IP地址,这个时候就需要用到DNS域名解析。


二、DNS解析服务器域名

        浏览器生成 HTTP请求报文后, 会通过DNS服务器对Web服务器域名进行解析,获取域名对应的IP地址。

        DNS缓存:每次解析域名,其实并不是都要经过这么多的步骤,因为存在DNS缓存。

        浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。


三、协议栈

        通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈
        协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。
应用程序(浏览器)通过调用 Socket套接字,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输层协议,会接受应用层的委托执行收发数据的操作。

        协议栈的下面一半是用 IP 协议控制网络层收发数据包。在网络中传输数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
此外 IP 协议中,还包括 ICMP协议和 ARP协议。

  • ICMP协议用于告知网络包传送过程中产生的错误以及各种控制信息。

  • ARP协议用于根据 IP 地址查询相应的以太网 MAC 地址。

        IP 协议下面的网卡驱动程序负责控制网卡硬件,而网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。


四、TCP协议

        TCP分割数据

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

        HTTP 是基于 TCP 协议进行数据传输,如果 HTTP 请求消息比较长,超过了 MSS的长度,这时 TCP 就需要把 HTTP 的数据以 MSS的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

        TCP报文生成
TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。
在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据。

        生成 TCP 报文之后,就需交给下面的网络层IP协议进行处理。


五、IP协议

        TCP 协议在执行连接、收发、断开等各阶段操作时,都需要委托 IP 协议将数据封装成网络包发送给通信对象,所以需要按照IP协议生成报文。

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

        在 IP 协议的首部格式的源地址 IP 和 目标地址 IP

  • 源地址IP:客户端的 IP 地址;

  • 目标地址IP:即通过 DNS 域名解析得到的 Web 服务器 IP。

        接下来需要通过MAC地址,完成两点之间的传输。


六、通过MAC地址完成两点之间传输

        生成IP协议报文后,还需要加上MAC头部,在 MAC 包头里需要发送方 MAC 地址接收方目标 MAC 地址,用于两点之间的传输

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

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

        收发双方的MAC地址
 发送方的 MAC 地址:由于MAC 地址是在网卡生产时写入到网卡 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了。
接收方的 MAC 地址:通过查询路由表,可以查找到接收方的IP地址,然后通过ARP协议以广播的形式,根据接收方的IP地址查找MAC地址。


七、网卡

        网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序
网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

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


八、完整的协议处理流程


        感谢你花时间读到这里~ 如果你觉得这篇内容对你有帮助,不妨点个赞让更多人看到;如果有任何想法、疑问,或者想分享你的相关经历,欢迎在评论区留言交流,你的每一条互动对我来说都很珍贵~ 我们下次再见啦!😊😊

http://www.xdnf.cn/news/20123.html

相关文章:

  • 孙宇晨钱包被列入黑名单,WLFI代币价格暴跌引发中心化争议
  • Unix/Linux 平台通过 IP 地址获取接口名的 C++ 实现
  • 告别 “无效阅读”!2025 开学季超赞科技书单,带孩子解锁 AI、编程新技能
  • Docker部署PanSou 一款开源网盘搜索项目,集成前后端,一键部署
  • 基于单片机汽车防撞系统设计
  • validator列表校验
  • OCA、OCP、OCM傻傻分不清?Oracle认证就看这篇
  • 四六级学习资料管理系统的设计与实现(代码+数据库+LW)
  • pandas的使用(1)0905
  • 如何制造一个AI Agent:从“人工智障”到“人工智能”的奇幻漂流
  • leetcode399.除法求值
  • Redis-持久化
  • 疯狂星期四文案网第61天运营日记
  • CSP-J初赛for(auto)用法
  • 【Leetcode】高频SQL基础题--180.连续出现的数字
  • 计算机原理-计算机操作系统-硬盘缓存、断电丢数据篇
  • 力扣416:分割等和子集
  • 【无GGuF版本】如何在Colab下T4运行gpt-oss 20B
  • spring事物失效场景
  • MySQL主从同步--主从复制进阶
  • Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!
  • 生成模型实战 | 深度分层变分自编码器(Nouveau VAE,NVAE)
  • 华为在国内搞的研发基地有多野?标杆游学带你解锁“研发界顶流”
  • leetcode算法刷题的第二十七天
  • 【开题答辩全过程】以 高校教室管理系统为例,包含答辩的问题和答案
  • 24V降12V,8A,电路设计,WD5030L
  • 2025年- H118-Lc86. 分隔链表(链表)--Java版
  • 工厂办公环境如何实现一台服务器多人共享办公
  • 【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
  • 【Java实战㉖】深入Java单元测试:JUnit 5实战指南