计算机网络八股第二期

1.讲一讲从输入网址到网页显示之间发生了什么(从网络的角度)

想想一下你从网店买一本书,从输入网址到网页显示其实和你从网店买一本书差不多,网店发给你的是实体而网络传输的是文字,图片等等资源的数据。

  1. 查看仓库地址,DNS解析
    你输入的网址是为了方便人们记忆而特意规定的一种网址,网络设备不会直接识别,他们只认识像192.16.10.0.0这样的IP地址。此时就需要我们的好朋友DNS服务器登场了,DNS服务器的作用就是将我们平常看到的类似于www.baidu.com这样的网址经过查询返回真正的IP地址供用户使用。

  2. 打电话联系仓库,TCP连接
    你的设备知道了服务的地址后就要和服务器建立一个可靠的连接像打电话一样,此时就是我们众所周知的TCP三次握手
    第一次:我们打电话过去,喂,你好服务器,我想和你聊聊(发送SYN包过去,表示请求连接)
    第二次:服务器接收到请求同义连接,并询问你是否准备好了(发送SYN和ACK包,表示同意连接并确认客户端请求)
    第三次:你说收到,我准备好了,开始聊吧(发送ACK包)
    在三次握手之后一个安全的连接通道就建立好了,如果在此期间我们访问的是https://开头的网址,就相当于给问我们的通话加上了保险(TLS,SSL握手),对传输内容加密防止偷看。

  3. 下订单”:发送 HTTP(S) 请求

    • 连接建立好了(电话通了),你的设备(通常是浏览器)就要向服务器(仓库)正式提出请求了。

    • 它使用 HTTP(S) 协议(就是网购时填的订单单子)说:“你好,我是浏览器,我想要 / 这个页面(通常是首页)的内容,请发给我!” 这个请求里还会包含一些额外信息,比如你的浏览器类型、能接受的语言等。

  4. “仓库处理订单”:服务器处理请求

    • 服务器(仓库管理员)收到你的“订单”(HTTP 请求)。

    • 它理解了你想要什么(/ 这个页面)。

    • 它开始“打包”你需要的东西:

      • 可能需要从数据库里查找信息(比如最新的商品列表)。

      • 可能需要运行一些程序(后端代码)生成动态内容。

      • 把最终的网页内容(主要是 HTML 文件,网页的骨架和文字)准备好。

  5. “快递发货”:服务器发送 HTTP(S) 响应

    • 服务器把“打包”好的 HTML 文件(主包裹)放进“快递车”(网络连接)。

    • 它发送一个 HTTP(S) 响应 回来。这个响应包含:

      • 状态码:比如 200 OK(发货成功),404 Not Found(你要的东西仓库没有)。

      • 响应头:包裹信息,比如包裹类型(是网页)、大小、日期等。

      • 响应体:最重要的部分——HTML 文件的内容(你的书)。

  6. “拆包裹 & 发现还要买零件”:浏览器解析 HTML

    • 你的浏览器收到“主包裹”(HTML 文件)。

    • 它开始“拆包裹”(解析 HTML 代码)。

    • 解析过程中,它发现:“咦,这个网页还需要一些图片 (<img> 标签) 和样式表 (<link rel="stylesheet">) 才能完整显示啊!可能还需要 JavaScript 文件 (<script>) 来让页面动起来!”

    • 这些额外的资源(图片、CSS、JS)可能存储在同一台服务器上,也可能在完全不同的服务器(CDN)上。

  7. “再下订单买零件”:获取额外资源

    • 对于 HTML 里发现的每一个额外资源(图片、CSS、JS 等),浏览器会重复步骤 1-6

      • 如果资源在另一个域名下,需要再次进行 DNS 解析(查那个新域名的地址)。

      • 可能需要建立新的 TCP 连接(给新仓库打电话)。

      • 发送新的 HTTP(S) 请求(下新的订单要图片、CSS 等)。

      • 接收服务器发回的 HTTP(S) 响应(收到图片、CSS 等包裹)。

  8. “组装成品”:浏览器渲染页面

    • 当所有“零件”(HTML、CSS、JavaScript、图片、字体等)都到齐后:

      • 浏览器根据 HTML 构建页面的基本结构(骨架)。

      • 根据 CSS 给页面“穿衣服”(布局、颜色、字体等样式)。

      • 执行 JavaScript 让页面“活起来”(交互、动态效果)。

    • 最终,一个完整的、你可以看到和操作的网页就显示在你的屏幕上了!

总结一下这个“网购”之旅(网络之旅):

  1. 查地址 (DNS解析) -> 找到网站服务器的IP。

  2. 打电话联系 (TCP握手) -> 建立可靠连接(安全网站还要加保险箱)。

  3. 下订单 (HTTP请求) -> 告诉服务器你要什么页面。

  4. 仓库处理 (服务器处理) -> 服务器准备好页面内容(HTML)。

  5. 发货 (HTTP响应) -> 服务器把HTML发回给你。

  6. 拆主包裹 (解析HTML) -> 浏览器发现还需要图片/CSS/JS等零件。

  7. 再下单买零件 (重复1-5) -> 获取所有额外资源。

  8. 组装成品 (渲染) -> 浏览器把所有零件组合成你看到的漂亮网页

2.能说一下SpringMVC的执行流程吗?

在这里插入图片描述

  1. 快递送达总站: 前端请求到达 DispatcherServlet (总调度员)。

  2. 查送货地址: DispatcherServletHandlerMapping (地址簿):“这快递(请求URL)送哪个车间(Controller)?”

  3. 找合适快递员: DispatcherServlet 找到能对接那个车间(Controller)的 HandlerAdapter (万能适配器)。

  4. 车间加工: HandlerAdapter 把请求(快递)交给 Controller (车间) 处理。

    • 车间拆包(取参数)、干活(执行业务逻辑)、写回执单(准备 Model 数据和 View 信息或直接返回数据)。
  5. 决定包装方式:

    • 如果回执单说要包装(返回视图名)

      • 找包装车间: DispatcherServletViewResolver (包装调度员):“xxx.html 这个包装盒在哪?”

      • 包装成品: 找到的 View (包装车间/模板引擎) 把数据(Model)塞进模板,生成 HTML 包裹。

    • 如果回执单说直接发数据(返回数据 + @ResponseBody:跳过找包装车间和包装步骤,直接把数据(通常是转成JSON)当作包裹。

  6. 发回快递: DispatcherServlet (总调度员) 把最终包裹(HTML页面 或 JSON数据)通过 HTTP 响应“快递”回前端浏览器。

3.HTTP各版本的变化

1. HTTP/0.9 (1991年) - “原始版”

  • 核心特点

    • 只有 GET 一种请求方法。

    • 响应只能是纯文本(HTML),没有响应头(Header)、状态码、错误处理。

  • 比喻
    就像你打电话给朋友只说一句:“把书给我”,对方直接扔过来一本书,没有包装盒、快递单、退货选项。


2. HTTP/1.0 (1996年) - “基础版”

  • 核心改进

    • 引入 Header(头部信息)
      请求和响应都支持头部字段(如 Content-TypeUser-Agent),可以传递元数据(比如文件类型、编码方式)。

    • 支持多种请求方法
      新增 POSTHEAD 等方法(比如提交表单)。

    • 状态码和错误处理
      响应中明确返回状态码(如 200 OK404 Not Found)。

    • 支持非文本内容
      可传输图片、文件等二进制数据(通过 Content-Type 标识)。

  • 痛点

    • 每个请求必须新建一个 TCP 连接,用完就关(短连接)。加载一个网页(含多个图片/CSS)时,反复建立/断开连接效率极低!
  • 比喻
    快递每次只送一件商品,送完就拆掉运输通道。买10件商品要建10次通道,效率低下。


3. HTTP/1.1 (1997年) - “实用版”

至今仍是主流版本

  • 核心改进

    • 持久连接(Keep-Alive)
      一个 TCP 连接可发送多个请求(默认开启),减少反复建连的开销。

    • 管道化(Pipelining)
      允许一次性发送多个请求(无需等上一个响应返回),但响应必须按顺序返回(队头阻塞问题)。

    • 更多方法
      新增 PUTDELETEOPTIONS 等方法(为 RESTful API 铺路)。

    • Host 头支持
      允许一台服务器托管多个网站(虚拟主机)。

    • 缓存控制
      通过 Cache-ControlETag 等头部实现更精细的缓存策略。

  • 遗留问题

    • 队头阻塞(Head-of-Line Blocking)
      如果第一个请求响应慢,会阻塞后续所有请求(即使它们已准备好)。

    • 头部冗余
      每次请求都重复发送大量相同的头部(如 CookieUser-Agent),浪费带宽。

  • 比喻
    建一条高速路(TCP连接)可连续发多辆货车(请求),但货车必须按顺序排队过关卡(服务器响应),前车卡住,后车全堵。


4. HTTP/2 (2015年) - “性能飞跃版”

基于 Google 的 SPDY 协议

  • 核心改进

    • 二进制协议
      不再用文本格式(如 GET /index.html),改用二进制帧(Frame)传输,解析更快、更紧凑。

    • 多路复用(Multiplexing)
      彻底解决队头阻塞!多个请求/响应可在同一个连接上并行交错传输,互不阻塞。

    • 头部压缩(HPACK)
      用字典编码压缩头部(尤其是重复字段),体积减少 50%~90%。

    • 服务器推送(Server Push)
      服务器可主动推送资源(如 CSS/JS)给客户端,无需等浏览器解析 HTML 后再请求。

    • 流优先级(Stream Priority)
      客户端可指定资源加载优先级(如优先加载 HTML 而非图片)。

  • 未解决问题

    • TCP 层的队头阻塞
      若 TCP 包丢失,需等待重传,仍会阻塞该连接上的所有流(HTTP/3 解决)。
  • 比喻
    高速路升级为立体交通(二进制帧),所有货车(请求/响应)可同时跑在不同车道(流),且货车自带压缩包装(头部压缩)。


5. HTTP/3 (2022年正式标准化) - “未来版”

基于 QUIC 协议(UDP + TLS)

  • 核心改进

    • 弃用 TCP,改用 UDP 之上的 QUIC 协议
      UDP 无连接特性避免 TCP 握手延迟(尤其弱网环境)。

    • 解决 TCP 队头阻塞
      每个请求流独立传输,丢包只影响当前流,其他流不受阻!

    • 零 RTT 建连
      首次连接 1-RTT,后续连接可 0-RTT(极速恢复会话)。

    • 内置加密(TLS 1.3)
      安全性成为默认要求,无明文传输。

  • 挑战

    • 需要操作系统和网络设备支持 QUIC(逐步普及中)。
  • 比喻
    把高速路(TCP)换成无人机物流网(UDP+QUIC),每个包裹(流)独立飞行,丢包不影响其他包裹,且自带武装押运(加密)。

总结对比表

版本核心进步关键问题解决当前地位
0.9只有 GET + 纯文本淘汰
1.0Header/状态码/多种方法基础功能淘汰
1.1持久连接、管道化、Host头、缓存短连接效率主流(兼容性好)
2二进制帧、多路复用、头部压缩HTTP 层队头阻塞、头部冗余主流(性能优先)
3QUIC协议、解决TCP阻塞、0-RTTTCP 层队头阻塞、建连延迟快速增长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/910046.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/910046.shtml
英文地址,请注明出处:http://en.pswp.cn/news/910046.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA基础 -- Verilog 的值变转储文件(VCD:Value Change Dump)

Verilog 的“值变转储文件&#xff08;VCD&#xff1a;Value Change Dump&#xff09;”&#xff0c;这是一项在仿真调试中至关重要的技术&#xff0c;可以帮助你“看见”RTL中每个信号随时间的变化过程。 一、什么是 Verilog 的值变转储文件&#xff08;VCD&#xff09; VCD …

流水灯芯片74HC138 → 74HC164 → 74HC595核心功能、引脚作用及芯片定位

一、74HC138&#xff1a;精准的“8选1开关” 核心作用 用3根控制线&#xff08;A0-A2&#xff09;实现8路严格单选&#xff0c;同一时刻仅1路输出低电平&#xff08;其他7路高电平&#xff09;。 &#x1f4cc; 本质&#xff1a;二进制地址译码器&#xff0c;不是数据寄存器。…

鸿蒙Next仓颉语言开发实战教程:懒加载

今天要分享的是仓颉开发语言中的懒加载。 先和初学者朋友们解释一下什么是懒加载。懒加载在代码中叫做LazyForEach&#xff0c;看到名字你一定能猜到它和ForEach的功能类似。只不过和ForEach的一次性加载所有数据不同&#xff0c;懒加载会根据屏幕可使区域按需加载数据&#x…

Linux 内核同步管理全解:原理 + 实战 + 考点

&#x1f525; 推荐&#xff1a;《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》 京东正版促销&#xff0c;欢迎支持原创&#xff01; 链接&#xff1a;https://item.jd.com/15020438.html 一、为什么需要同步机制&#xff1f; Linux 是一个支持 多核并发 抢占式调…

效果成本双突破!快手提出端到端生成式推荐系统OneRec!

近日&#xff0c;快手推荐模型团队提出了一个端到端生成式推荐系统OneRec&#xff0c;该系统采用Encoder-Decoder架构&#xff0c;引入了基于奖励机制的偏好对齐方法&#xff0c;借助强化学习增强模型效果&#xff0c;可在奖励模型引导下直接生成契合用户偏好的视频内容。通过极…

flex布局 项目属性

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 项目属性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…

SpringBoot扩展——应用Web Service!

应用Web Service Web Service是一个SOA&#xff08;面向服务的编程&#xff09;架构&#xff0c;这种架构不依赖于语言&#xff0c;不依赖于平台&#xff0c;可以在不同的语言之间相互调用&#xff0c;通过Internet实现基于HTTP的网络应用间的交互调用。Web Service是一个可以…

EasyExcel学习笔记

EasyExcel学习 一、EasyExcel简介 一、EasyExcel是什么 EasyExcel是一个基于Java的简单、省内存的读写Excel的阿里开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 官网&#xff1a;https://easyexcel.opensource.alibaba.com/ 学习Easyexcel前需要了解导入和导出…

day4课程

1整体认识和路由配置 2二级分类面包屑导航实现 3基础商品列表渲染 4列表筛选功能实现 5列表无限加载功能实现 6定制路由滚动行为 7详情页整体认识和路由配置 8详情页基础数据渲染 9详情页基础组件封装和数据渲染 10适配不同title和数据列表 11小图切换大图 12滑块跟随鼠标移动 …

kubeadm worker节点加入master失败

文章目录 1、操作2、问题现象3、问题原因4、问题解决4.1、重新生成token4.2、重新生成hash值 5、验证 1、操作 执行以下命令&#xff0c;让worker节点加入到master节点 kubeadm join 103.123.222.241:6443 --token vxe3v1.wzpnks8v1vbbtsu0 --discovery-token-ca-cert-hash s…

二十二、【用户管理与权限 - 篇四】后端权限定义:模型与 API 实现

【用户管理与权限 - 篇四】后端权限定义:模型与 API 实现 前言准备工作第一部分:设计并创建 `Permission` 模型第二部分:更新 `Role` 模型以关联 `Permission`第三部分:生成并应用数据库迁移第四部分:创建 Serializers第五部分:创建 ViewSets第六部分:注册 API 路由第七…

猜数字小游戏微信流量主小程序开源

这个智力小游戏采用了数字华容道的玩法&#xff0c;玩家需要通过移动数字方块&#xff0c;将数字按顺序排列完成游戏。代码严格遵循微信小程序的目录结构&#xff0c;包含以下部分&#xff1a; 完整的小程序配置文件&#xff08;app.js、app.json、app.wxss&#xff09; 游戏页…

探秘阿里云EBS存储:云计算的存储基石

一、引言 在云计算时代&#xff0c;数据如同企业的生命线&#xff0c;数据存储的重要性不言而喻。随着企业数字化转型的加速&#xff0c;海量数据的存储与高效管理成为亟待解决的问题。云存储以其卓越的灵活性、可扩展性和成本效益&#xff0c;逐渐成为众多企业的首选方案。在…

音视频之H.264的可伸缩编码SVC

系列文章&#xff1a; 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 3、音视频之H.264/AVC编码器原理 4、音视频之H.264的句法和语义 5、音视频之H.264/AVC解码器的原理和实现 6、音视频之H.264视频编码传输及其在移动通信中的应用 7、音视…

Anaconda安装env,yml一直卡在Solving environment:不动

如果在使用conda env creat -f env.yml时候&#xff0c;anaconda一直卡住&#xff0c;如下 可以尝试下面操作。 conda config --set solver libmamba # 使用libmamba引擎&#xff08;Conda≥22.11&#xff09; conda env create -f env.yaml # 重新尝试

榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台

引言 在数字化浪潮下,婚恋相亲行业正加速向线上迁移。榕壹云公司基于市场需求与技术积累,开发一款功能完备、技术开源的婚恋相亲小程序系统,为单身人士提供高效、安全的婚恋平台。本文将围绕系统背景、客户定位、核心技术、功能模块及优势场景展开详细解析,助力开发者与技…

查询docker-compose 部署的milvus 请求日志

在 Docker Compose 部署的 Milvus 中,日志默认存储在各个服务的容器内。以下是定位和查询日志的方法: 1. 查看实时日志 使用 docker-compose logs 命令查看实时日志: bash # 查看所有服务的日志 docker-compose logs -f# 仅查看 Milvus 服务日志(服务名以 docker-compos…

Rsync实操

Rsync实操 一.rsync命令 #类似于cp[rootuser2 ~]# rsync info.sh root192.168.168.130:/rootroot192.168.168.130s password: [rootuser1 ~]# lsanaconda-ks.cfg ceph-release-1-1.el7.noarch.rpm info.sh 二、使用rsync备份push方式 服务器&#xff1a;server 192.168.168…

Java常见八股-(6.算法+实施篇)

Java常见八股-&#xff08;1.Java基础篇&#xff09; Java常见八股-&#xff08;2.Java高级篇&#xff09; Java常见八股-&#xff08;3.MySQL篇&#xff09; Java常见八股-&#xff08;4.前端篇&#xff09; Java常见八股-&#xff08;5.框架篇&#xff09; 目录 一、算…

阿里云部署的SMTP服务器安全攻防实录:深度解析攻击、防护与加固

阿里云部署的SMTP服务器安全攻防实录&#xff1a;深度解析攻击、防护与加固 一次针对云上SMTP服务的持续攻击事件&#xff0c;揭示了邮件中继服务面临的多重安全挑战。本文将深入剖析攻击手法、防护策略与系统性加固方案。 某企业在阿里云上部署的Postfix SMTP服务器近期遭遇…