面试题-计算机网络篇

文章目录

一、HTTP协议

2.HTTP请求报文

HTTP 请求报文组成

  • 请求行: 包含请求方法、请求的URL以及HTTP协议版本 。如GET /index.html HTTP/1.1
  • 请求头部: 请求头部由多个键值对组成 。用于描述客户端环境、请求正文长度、期望响应格式等信息。常见的请求头 包括 Host、User-Agent、Accept、Accept-Language、Connection 等。
  • 空行: 请求头部和请求体之间必须有一个空行,表示请求头部结束。
  • 请求包体: 请求体用于携带客户端提交的数据 ,如表单数据、文件等。通常在POST、PUT等请求中使用。

2.1. 请求方法

  • get:用于‌获取资源 ‌。参数 通过URL查询字符串传递 (如?id=123),不包含请求体
    • 适用场景:加载网页、获取数据列表、搜索接口。
    • 注意不适合传输敏感或大量数据,因参数暴露在URL中且受长度限制 。
  • post: 用于‌提交数据 ‌。数据放在请求体中
    • 适用场景:用户注册、登录、文件上传、表单提交 。
    • 与GET对比POST更私密、可携带更多数据,但不可被缓存
  • ‌put:用于‌替换或更新 整个资源‌。客户端需提供完整的资源表示,若资源不存在则可能创建。
    • 适用场景:更新用户全部信息(如PUT /api/users/123)。
    • 特点:幂等操作(多次执行结果一致)。
  • ‌delete:用于‌删除 指定资源‌。成功响应通常返回204 No Content。
    • 适用场景:移除用户、删除文章 。
    • 实际实现可能是"软删除"(标记为删除而非物理移除)。
  • head:与GET类似,但‌只返回响应头,不返回响应体 ‌。
    • 适用场景:检查资源是否存在、获取文件大小或最后修改时间,节省带宽 。
  • ‌patch:用于‌对资源进行局部更新‌仅修改部分字段 ,而非整体替换。
    • 适用场景:修改用户昵称而不更新其他信息 。
    • 对比PUT:PUT要求完整资源,PATCH更灵活高效。

2.2. URL有哪些组成部分

如:https://www.example.com:8080/path/to/resource?param1=value1&param2=value2#section1

省略版https://www.baidu.com(浏览器会自动补全默认值)

  • 协议: 指定访问资源所使用的通信协议 ,如 httphttps(通过安全加密的方式传输数据,常用)、ftp 等。
  • 主机名: 标识资源所在的服务器 ,可以是域名 (如 www.example.com)或IP地址。 域名 便于记忆,实际访问时会通过DNS解析为IP地址
  • 端口: 指定服务器上监听的服务端口号 ,是可选项。http 默认使用80端口https 默认使用443端口,若使用默认端口则通常省略
  • 路径: 表示资源在服务器上的具体位置,以斜杠 / 分隔层级
  • 查询参数: 用于向服务器传递额外信息 ,以 ? 开始,多个参数用&分隔(get请求)。
  • 片段标识:# 开头,用于定位页面内的某个锚点,不会发送到服务器。

2.3. 请求头

HTTP请求头客户端向服务器发送请求时附带的元数据信息,用于描述客户端环境、请求偏好和资源处理方式‌。

常见字段

  • Host(必需): 指定目标服务器的域名和端口 ,是HTTP/1.1唯一强制要求的请求头
  • User-Agent(UA): 标识客户端类型、操作系统和浏览器版本 。服务器据此返回适配的页面(如PC端或移动端)
  • Accept‌: 声明客户端可接受的内容类型 (MIME类型),如text/htmlapplication/json(优先接收JSON格式响应) 。
  • Content-Type‌:POST或PUT请求 中,说明请求体的数据格式 。常见值:application/json、multipart/form-data(文件上传)
  • Cookie:包含服务器先前设置的会话信息,用于维持登录状态等 。
  • Expires: 强缓存
  • Cache-Control‌:指令缓存机制是否存储响应或重新验证 ,强缓存。如no-cache强制重新获取
  • Connection‌:控制连接行为keep-alive 表示希望复用TCP连接以提升性能 。

3.HTTP响应报文

3.1. 常见响应头

  • Date :表示消息发送的时间,时间的描述格式由rfc822定义
  • server:服务器名称
  • Connection浏览器与服务器之间连接的类型
  • Cache-Control :控制HTTP缓存
  • content-type :表示后面的文档属于什么MIME类型

3.2. 响应码

  • 1xx(信息): 请求已接收,继续处理
  • 2xx(成功): 请求成功处理
    • 200 ‌:最常见成功状态,表示请求已正常返回数据。
    • 204请求成功但无内容返回 ,常用于DELETE操作
  • 3xx(重定向):
    • 301永久重定向,搜索引擎会更新索引并跳转新地址。
    • 302 ‌:临时重定向,原资源仍在,仅临时更换位置。
  • 4xx(客户端错误):
    • 400请求语法错误 ,如参数格式不正确
    • 401 :未提供有效认证信息,需登录或重新鉴权。
    • 403 ‌:服务器拒绝访问,即使已登录也可能因权限不足被拒。
    • 404 ‌:请求资源不存在 ,可能是URL拼写错误或页面已删除
  • 5xx(服务器错误):
    • 500 ‌:服务器内部错误 ,如代码异常或配置错误

4.HTTP1.0 、 HTTP1.1、HTTP2.0、HTTP3.0

维度 HTTP/1.0 HTTP/1.1 HTTP/2.0 HTTP/3.0
‌连接方式‌ 短连接 长连接 多路复用 QUIC 流式连接
‌数据格式‌ 纯文本 纯文本 二进制分帧 二进制帧(QUIC)
‌并发能力‌ 串行 管道化(有限) 并行多路复用 真正并行独立流
‌头部处理‌ 无压缩 无压缩 HPACK 压缩 HPACK 压缩
‌安全性‌ 可选 可选 推荐 TLS 强制加密(TLS 1.3)
‌队头阻塞‌ 应用层严重 应用层部分缓解 解决应用层 彻底解决
‌适用场景‌ 早期静态网页 主流 Web 应用 高性能网站、API 移动端、弱网环境

演进方向

维度 演进方向
‌连接方式‌ 短连 → 长连 → 多路复用 → 独立流
‌传输协议‌ TCP → TCP → TCP → ‌QUIC (UDP)‌
‌数据格式‌ 文本 → 文本 → ‌二进制帧‌ → 二进制帧
‌性能焦点‌ 基础通信 → 复用 → 并发 → ‌抗丢包 & 低延迟‌
‌安全‌ 可选 → 可选 → 推荐 → ‌强制加密‌

5.当在浏览器中输入 Google.com 并且按下回车之后发生了什么?

核心流程可概括为:DNS解析 → 建立TCP连接 → SSL/TLS加密协商(HTTPS)→ 发送HTTP请求 → 服务器响应 → 浏览器解析与渲染页面‌ 。

  • URL 解析与自动补全‌: 你输入的 google.com 会被浏览器识别为不完整的 URL 。浏览器会自动补全协议和主机名 ,通常转换为 https://www.google.com,并默认使用 HTTPS 协议(端口 443)
  • DNS 解析(域名 → IP 地址)‌: 浏览器首先检查本地缓存是否有 google.com 对应的 IP 地址 。若 ,则向本地 DNS 服务器发起查询请求 ,通过递归和迭代查询 ,最终从权威 DNS 服务器获取目标 IP 地址 。谷歌在全球部署多个服务器,DNS 可能返回离你最近的 IP 地址以优化访问速度 。
  • 建立 TCP 连接(三次握手)‌: 获取 IP 地址后,浏览器通过 TCP 协议与服务器建立连接 。这个过程包括"三次握手 ":客户端发送 SYN报文 (我想连接);服务器回应 SYN-ACK报文 (我也想连接);客户端再发送 ACK报文,确认连接建立(好,连上了) 。
  • TLS/SSL 加密握手(如使用 HTTPS)‌: 由于现代网站普遍启用 HTTPS浏览器会与服务器进行 TLS 握手,协商加密算法、交换密钥,确保后续通信安全 。
  • 发送 HTTP 请求并接收响应‌: 连接建立后,浏览器向服务器发送 HTTP GET 请求 。服务器处理请求后返回 HTML 页面内容,可能附带 CSS、JavaScript、图片等资源文件 。
  • 浏览器解析与页面渲染‌: 浏览器接收到 HTML 后开始解析文档结构,构建 DOM 树,结合 CSS 构建渲染树,并执行 JavaScript,最终将页面呈现给你 。
  • 连接关闭(四次挥手)‌:数据传输完成后 ,TCP 连接通过"四次挥手"正常关闭,释放资源 ,这个过程:客户端发送 FIN 报文 (我发完了);服务器收到后,发送一个 ACK 报文 (回复收到);服务器处理完剩余数据后,发送 FIN 报文 (我也发完了);客户端收到后,发送 ACK 报文(服务器收到后进入 ‌CLOSED‌ 状态;客户端等待 2MSL 后也进入 ‌CLOSED‌ 状态) (拜拜)。

** 三次握手为什么不是两次?**‌

防止历史连接请求突然到达造成资源浪费,第三次确认可确保双方收发能力正常 。

二、HTTPS协议

1.HTTP和HTTPS协议的区别(网络歇息)

对比维度 HTTP HTTPS
安全性 明文传输,超文本传输协议 加密传输,具有安全性的SSL加密传输协议
加密机制 无加密 使用 SSL/TLS 协议进行加密
默认端口 80 443
证书要求 不需要证书 需要由CA颁发的SSL/TLS证书
连接方式 无状态、简单连接 建立前需完成TLS握手,验证身份

2. TLS/SSL的工作原理

TLS/SSL 是在 TCP 和应用层之间添加的安全协议层,通过"握手协商 + 加密通信"保障数据的‌机密性、真实性、完整性‌。

3. HTTPS是如何保证安全的?

‌HTTPS通过TLS/SSL协议构建"身份认证---密钥协商---对称加密---完整性校验"的全链路安全机制,从根本上解决数据窃听、篡改与伪造三大风险‌。

三、DNS协议介绍

1. DNS 协议是什么

域名解析为IP地址客户端 向DNS服务器(DNS服务器有自己的IP地址)发送域名查询请求 ,DNS服务器告知 客户机Web服务器的 IP 地址

2. TCP和UDP的区别

若你追求‌数据不丢不错‌,选 ‌TCP‌;若你追求‌速度与实时性‌,能容忍少量丢包,选 ‌UDP‌。(TCP求稳不求快,UDP求快不求全‌)

‌对比维度‌ ‌TCP(传输控制协议)‌ ‌UDP(用户数据报协议)‌
连接方式 面向连接 ‌,传输前需三次握手 建立连接,结束后四次挥手断开 无连接‌ ,无需建立连接,直接发送数据报
可靠性 可靠传输 不可靠传输 ‌,不保证数据到达,可能丢包、乱序、重复
传输效率 较低 ‌高效率‌
数据传输形式 面向字节流 面向数据报‌
头部开销 20-60字节‌, 固定8字节‌
‌适用场景‌ 网页浏览(HTTP/HTTPS)、文件传输(FTP)、邮件等 视频会议、直播、在线游戏、DNS查询、IoT实时上报等
‌支持通信模式‌ 仅 ‌点对点(一对一)‌ 支持 ‌一对一、一对多、多对一、多对多‌

四、WebSocket

WebSocket = "一次握手,永久连接,双向通话"。

定义 ‌:一种基于 TCP全双工通信协议 ,允许客户端与服务器在单个长连接上双向实时交换数据。

协议标识‌:

  • ws://明文传输 ,适用于开发环境
  • wss://加密传输 (基于 TLS),生产环境‌必须使用‌

1. WebSocket 如何建立连接?

通过 HTTP Upgrade 请求完成握手,服务器返回 101 状态码

2、http和WebSocket‌区别

总结: HTTP 是"你问一次,我答一次";WebSocket 是"我们一直连着,随时都能说话"。

对比维度 ‌HTTP‌ ‌WebSocket‌
通信模式 单向:请求-响应 ‌双向全双工‌,任意一方可主动发消息
连接状态 无状态、短连接(默认) ‌有状态、长连接‌,连接持久保持
实时性 差,依赖轮询 ‌强‌,消息即时推送
服务器主动性 ❌ 无法主动推送 ✅ 可主动向客户端推送数据
协议标识 http:// 或 https:// ws:// 或 wss://(安全版)
适用场景 页面加载、表单提交等一次性请求 聊天、游戏、股票行情、实时协作等

具体使用

javascript 复制代码
// 1. 创建连接
const socket = new WebSocket('wss://example.com/socket');
// 2. 监听事件
socket.onopen = function(event) {
  console.log('连接已建立');
  socket.send('Hello Server!');
};
socket.onmessage = function(event) {
  console.log('收到消息:', event.data);
};
socket.onerror = function(event) {
  console.error('发生错误:', event);
};
socket.onclose = function(event) {
  console.log('连接关闭:', event.code, event.reason);
};
// 3. 发送与关闭
socket.send('发送数据');
socket.close(); // 可选参数: code, reason
相关推荐
左左右右左右摇晃12 小时前
计算机网络笔记整理
笔记·计算机网络
旺仔.29118 小时前
线程安全 详解
linux·计算机网络·安全
空空kkk21 小时前
计算机网络相关知识
计算机网络
Du_chong_huan1 天前
《网络是怎样连接的》精读版 第五章总述
网络·计算机网络
旺仔.2911 天前
死锁 详解
linux·开发语言·计算机网络·安全
头疼的程序员1 天前
计算机网络:自顶向下方法(第七版)第五章 学习分享(二)
学习·计算机网络
小糖学代码1 天前
计算机网络理论:4.网络层
计算机网络·智能路由器
啊阿狸不会拉杆1 天前
《计算机网络-自顶向下方法》笔记分享:第1章-「计算机网络和因特网」-1.2 网络边缘
网络·笔记·计算机网络·接入网·光纤·网络边缘·物理媒体
XuanTao772 天前
【分享】Lightroom高级版⭕Ai图片剪辑 天空修补
数码相机·计算机网络·网络安全·软件工程·软件构建