计算机网络v2

OSI 七层模型(Open Systems Interconnection)

国际标准化组织制定的网络通信分层标准,把网络功能从低到高分成 7 层,每层只负责一部分工作,方便不同设备兼容通信。

  1. 物理层(Physical Layer)
  • 单位:比特(bit)

  • 作用:负责硬件层面传输,只关心 0 和 1 的电信号、光信号传输。

  • 典型设备:网线、光纤、集线器、网卡接口

  1. 数据链路层(Data Link Layer)
  • 单位:帧(Frame)

  • 作用:把比特组成帧,做差错检测、MAC 地址寻址,控制相邻节点间传输。

  • 典型设备:交换机、网卡

  • 协议:以太网、PPP、ARP

  1. 网络层(Network Layer)
  • 单位:数据包(Packet)

  • 作用:路由选择、IP 寻址,决定数据包从源到目的走哪条路径。

  • 典型设备:路由器

  • 协议:IP、ICMP、OSPF、 BGP

  1. 传输层(Transport Layer)
  • 单位:数据段(Segment)

  • 作用:负责端到端可靠传输,控制流量、差错重传、端口寻址。

  • 核心协议:

    • TCP:可靠、面向连接

    • UDP:不可靠、速度快

  1. 会话层(Session Layer)
  • 作用:建立、管理、断开应用之间的会话,保证通信不混乱。

  • 功能:会话同步、断点续传控制

  1. 表示层(Presentation Layer)
  • 作用:负责数据格式转换、加密解密、压缩解压,让双方能看懂对方数据。

  • 例子:图片编码、SSL/TLS 加密、文本编码

  1. 应用层(Application Layer)
  • 作用:直接为用户应用程序提供服务,是用户能接触到的一层。

  • 典型协议:HTTP/HTTPS、FTP、DNS、SMTP、POP3

快速记忆口诀

物 数 网 传 会 表 应(物理 → 数据链路 → 网络 → 传输 → 会话 → 表示 → 应用)

TCP/IP 四层模型

也叫互联网协议套件模型,是实际互联网真正在用的模型,比 OSI 更简洁实用。

四层结构(从下到上)

  1. 网络接口层(Network Interface Layer)

  2. 网际层(Internet Layer)

  3. 传输层(Transport Layer)

  4. 应用层(Application Layer)

每层作用

  1. 网络接口层
  • 负责与物理硬件打交道

  • 处理帧、MAC 地址、网卡、网线、交换机等

  • 对应 OSI 的:物理层 + 数据链路层

  1. 网际层
  • 负责IP 寻址、路由选择

  • 核心协议:IP、ICMP、ARP

  • 对应 OSI 的:网络层

  1. 传输层
  • 负责端到端数据传输

  • 核心协议:TCP、UDP

  • 对应 OSI 的:传输层

  1. 应用层
  • 直接给应用程序提供服务

  • 协议:HTTP、HTTPS、FTP、DNS、SMTP 等

  • 对应 OSI 的:会话层 + 表示层 + 应用层

OSI 七层模型 TCP/IP 四层模型
7 应用层 4 应用层
6 表示层 ↑ 合并到应用层
5 会话层 ↑ 合并到应用层
4 传输层 3 传输层
3 网络层 2 网际层
2 数据链路层 1 网络接口层
1 物理层 ↑ 合并到网络接口层

一句话速记

  • OSI:物数网传会表应

  • TCP/IP:网接 → 网际 → 传输 → 应用

  • 中间两层一一对应,上下各合并三层。

IP 地址、MAC 地址 超清晰总结

一、什么是 MAC 地址?

MAC 地址(Media Access Control 地址)

  • 也叫:物理地址、硬件地址

  • 长度:48 位二进制 ,通常写成 16 进制例:00:1A:2B:3C:4D:5E

  • 特点:出厂就烧在网卡里,全球唯一,一般不能改

MAC 地址作用

  • 标识同一局域网内的设备

  • 用于交换机寻址:在同一个内网里找具体设备

  • 只在本地链路有效,出了路由器就没用

二、什么是 IP 地址?

IP 地址(Internet Protocol 地址)

  • 逻辑地址,用来在整个互联网定位一台主机

  • 常见:

    • IPv4:192.168.1.100(32 位)

    • IPv6:更长,解决地址不够用

IP 地址作用

  • 标识网络中的主机位置

  • 用于路由器跨网络寻址:从一个网传到另一个网

  • 可以动态变化(DHCP 自动分配)

对比项 MAC 地址 IP 地址
全称 Media Access Control Internet Protocol
别称 物理地址、硬件地址 逻辑地址、网络地址
长度 48 位(6 字节) 32 位(IPv4)/128 位(IPv6)
位置 网卡硬件中 系统网络配置中
是否可改 基本固定,可伪装但不建议 可动态分配、手动修改
作用范围 同一局域网内 整个互联网
工作层次 数据链路层(OSI 第 2 层) 网络层(OSI 第 3 层)
负责设备 交换机 路由器
通俗比喻 设备身份证号(终身不变) 设备家庭住址(可搬家换地址)

四、一句话理解它们的关系

  • MAC 地址:标识 "你是谁"

  • IP 地址:标识 "你在哪"

数据传输时:先通过 IP 地址找到目标网络 ,再通过 MAC 地址找到目标设备

端口 & 端口号

  1. 什么是端口?

可以把一台电脑 想象成一栋大楼

  • IP 地址 = 大楼地址(找到这栋楼)

  • 端口号 = 房间号(找到具体房间 / 程序)

端口 就是设备上用于区分不同应用程序 的 "通道编号"。一台电脑只有一个 IP,但可以同时跑很多程序(QQ、浏览器、游戏、网盘......),靠端口号区分数据该发给谁。

  1. 端口号是什么?
  • 是一个 16 位数字

  • 范围:0 ~ 65535

  • 写在 IP 后面,用冒号分隔例:192.168.1.100:80

  1. 为什么需要端口号?

一句话:只有 IP 只能找到电脑,有了端口才能找到具体程序。

详细原因:

  1. 一台主机同时运行多个网络程序(浏览器、微信、游戏等)

  2. 数据包到达电脑后,系统不知道该交给哪个软件

  3. 通过端口号,操作系统就能精准分发数据

  4. 实现一个 IP 同时支持多个网络服务

  5. 常见默认端口(必背)

  • 80:HTTP 网页

  • 443:HTTPS 加密网页

  • 21:FTP 文件传输

  • 22:SSH 远程登录

  • 25:SMTP 发邮件

  • 53:DNS 域名解析

  • 3389:Windows 远程桌面

  1. 端口分类

  2. **知名端口(0~1023)**系统固定分配给常用服务,一般程序不能随便用

  3. **注册端口(1024~49151)**给普通应用程序使用

  4. **动态 / 私有端口(49152~65535)**客户端临时使用,连接断开就回收

  5. 一句话总结

  • IP 地址:找到哪台设备

  • 端口号:找到设备上哪个程序

  • 没有端口,电脑收到数据也不知道该给浏览器还是 QQ。

常见协议默认端口

  • HTTP:80
  • HTTPS:443
  • FTP:21
  • SSH:22
  • MySQL:3306
  • Redis:6379
  • DNS:53
  • Tomcat:8080
  • PostgreSQL:5432
  • SQL Server:1433
  • MongoDB:27017

什么是局域网、广域网、网关、子网掩码

  1. 局域网(LAN)
  • 全称:Local Area Network

  • 范围:小范围网络(家里、公司、学校、机房)

  • 特点:

    • 距离近、速度快、延迟低

    • 一般用交换机连接

    • IP 通常是内网 IP(如 192.168.x.x、10.x.x.x)

  • 例子:家里几台手机电脑连同一个 Wi-Fi

  1. 广域网(WAN)
  • 全称:Wide Area Network

  • 范围:跨地域的大范围网络

  • 特点:

    • 距离远、速度相对慢

    • 靠路由器、运营商线路连接

  • 例子:互联网、跨城市的公司专线

一句话区分:局域网 = 小圈子内部网 广域网 = 大网络 / 互联网

  1. 网关(Gateway)

通俗理解:内网通往外网的 "大门"

  • 作用:让局域网设备能访问外部网络数据包要出内网,必须经过网关

  • 通常就是:路由器的 IP 例如:192.168.1.1

一句话:网关就是内网的 "出口管理员"

  1. 子网掩码(Subnet Mask)

作用:判断两个 IP 是不是在同一个局域网里

  • 格式和 IP 一样,如 255.255.255.0

  • 机器通过 IP & 子网掩码 计算出网络号

    • 网络号相同 → 同一局域网,直接通信

    • 网络号不同 → 不在同一网,必须走网关

最常见:

  • 255.255.255.0(家用 / 小型公司)

一句话:子网掩码用来划分 "哪些 IP 是自己人"

快速总结(必背)

  • 局域网:小范围内部网

  • 广域网:大范围外部网 / 互联网

  • 网关:内网访问外网的出口

  • 子网掩码:判断两个 IP 是否在同一局域网

DNS 域名系统

  1. 什么是 DNS?

DNS = Domain Name System,域名系统 。作用就是:把域名翻译成 IP 地址

  • 人记域名:baidu.com

  • 机器只认 IP:110.242.68.66

  • DNS 就是中间的 "翻译官"

  1. DNS 作用

  2. 域名 → IP 地址转换(正向解析)

  3. 让用户不用记复杂 IP,只记好记的域名

  4. 实现负载均衡、智能解析(就近访问)

  5. DNS 查询过程(递归 + 迭代,面试 / 考试必考)

你在浏览器输入 www.baidu.com,流程如下:

  1. 浏览器查本地缓存之前访问过,直接用缓存 IP。

  2. 查操作系统缓存(hosts 文件) Windows:C:\Windows\System32\drivers\etc\hosts

  3. 请求本地 DNS 服务器(运营商 DNS,如 114.114.114.114)本地 DNS 先查自己缓存,有就直接返回。

  4. **本地 DNS 去问根域名服务器(Root)**根服务器说:我不知道,但我知道 ** 顶级域服务器(.com)** 在哪。

  5. 问 .com 顶级域服务器 .com 服务器说:我不知道,但我知道百度的权威 DNS在哪。

  6. 问百度权威 DNS 服务器 权威 DNS 直接返回:www.baidu.com 对应的 IP。

  7. 本地 DNS 把结果返回给你的电脑同时缓存下来,下次直接用。

  8. 浏览器拿着 IP 去访问目标服务器

一句话速记

DNS = 域名翻译官 查询流程:浏览器 → 系统 → 本地 DNS → 根 DNS → 顶级 DNS → 权威 DNS → 拿到 IP

常用公共 DNS

  • 114.114.114.114

  • 8.8.8.8(谷歌)

  • 223.5.5.5 / 223.6.6.6(阿里)

  • 1.1.1.1(Cloudflare)

HTTP 是什么

HTTP = HyperText Transfer Protocol(超文本传输协议)

  • 互联网上网页传输最常用的协议

  • 用于浏览器和服务器之间通信,请求文字、图片、视频等资源

  • 特点:无连接、无状态、明文传输

  1. 属于哪一层
  • OSI 七层模型第 7 层 应用层

  • TCP/IP 四层模型应用层

  1. 简单补充(常考点)
  • 对应端口:80

  • HTTPS = HTTP + TLS/SSL 加密,端口 443

  • 基于 TCP 可靠传输

HTTP 1.0 / 1.1 / 2.0 / 3.0 区别

HTTP 从 1.0 到 3.0 的核心演进,是解决连接效率、队头阻塞、传输性能 三大问题的过程。下面用表格 + 要点讲清区别,面试 / 考试直接背。

特性 HTTP/1.0 (1996) HTTP/1.1 (1999) HTTP/2 (2015) HTTP/3 (2022)
底层协议 TCP TCP TCP UDP + QUIC
连接机制 短连接(每请求新建 TCP) 持久连接(Keep‑Alive,默认) 多路复用(单 TCP) 多路复用(QUIC,无队头阻塞)
传输格式 纯文本 纯文本 二进制分帧 二进制分帧
头部压缩 ❌ 无 ❌ 无 HPACK QPACK
队头阻塞 ✅ 严重 ✅ 存在(管道化仍阻塞) ❌ 应用层解决,但TCP 层仍有 彻底解决(流独立)
服务器推送 ✅ 支持 ✅ 支持
加密 可选(HTTPS) 可选(HTTPS) 强制 TLS 1.3
核心痛点 连接开销大 队头阻塞、头部冗余 TCP 层队头阻塞 无(终极方案)

二、各版本详细区别

  1. HTTP/1.0
  • 连接短连接,每发一个请求就新建一次 TCP 连接(三次握手 + 四次挥手),开销极大。

  • 特点

    • 引入请求头、响应头、状态码、Content‑Type。

    • 支持 GET/POST/HEAD 方法。

    • 无持久连接、无头部压缩、无并发优化。

  • 问题:加载一个网页要建 N 次连接,速度极慢。

  1. HTTP/1.1(里程碑,至今主流)
  • 核心改进

    • 持久连接(Keep‑Alive):默认开启,一个 TCP 连接可发多个请求,大幅减少握手开销。

    • 管道化(Pipeline) :可连续发多个请求,但响应必须按序返回 → 仍有队头阻塞

    • Host 头:支持一台服务器部署多个网站(虚拟主机)。

    • 缓存增强:Cache‑Control、ETag、If‑None‑Match 等。

    • 分块传输:Transfer‑Encoding: chunked,支持大文件流式传输。

    • 新增方法:PUT/DELETE/OPTIONS/PATCH 等。

  • 遗留问题

    • 队头阻塞:一个请求慢,后面全堵。

    • 头部无压缩,Cookie/User‑Agent 重复传输,浪费带宽。

    • 浏览器同域名最多开 6--8 个连接,并发有限。

  1. HTTP/2(性能飞跃)
  • 核心突破

    • 二进制分帧:把报文拆成二进制 "帧",解析更快、更紧凑。

    • 多路复用(Multiplexing)单 TCP 连接并行传输多个请求 / 响应 ,帧可乱序,按流 ID 重组 → 解决应用层队头阻塞

    • HPACK 头部压缩:静态表 + 动态表 + 哈夫曼编码,头部体积减少 50%--80%。

    • 服务器推送(Server Push):服务器可主动推送资源(如 HTML → 自动推 CSS/JS)。

    • 流优先级:可设置请求优先级(如先加载关键资源)。

  • 遗留问题

    • 底层还是 TCP → TCP 层队头阻塞依然存在(一个包丢了,整个连接等待重传)。
  1. HTTP/3(终极方案)
  • 底层革命抛弃 TCP,改用 QUIC 协议(基于 UDP)

  • 核心优势

    • 彻底解决队头阻塞 :QUIC 实现流级独立,一个流丢包不影响其他流。

    • 0‑RTT 握手:首次连接后,后续可 0 延迟建立连接。

    • 更快的连接迁移:Wi‑Fi/4G 切换不中断连接。

    • QPACK 头部压缩:适配 QUIC 多路复用的头部压缩。

    • 强制 TLS 1.3:更安全、更快的加密。

  • 现状:Chrome、Firefox、Cloudflare 已支持,正在普及。

三、一句话总结演进

  • 1.0 → 1.1 :从短连接长连接,解决连接开销。

  • 1.1 → 2 :从文本 + 串行二进制 + 多路复用,解决应用层队头阻塞。

  • 2 → 3 :从TCPQUIC(UDP) ,彻底解决TCP 层队头阻塞,速度与稳定性拉满。

HTTP 请求方法有哪些?GET 和 POST 区别

一、HTTP 常见请求方法

  • GET:查询、获取资源

  • POST:提交数据、创建资源

  • PUT:修改 / 更新资源(整体替换)

  • PATCH:局部更新资源

  • DELETE:删除资源

  • HEAD:只获取响应头,不返回 body

  • OPTIONS:查询服务器支持哪些方法(跨域预检用)

  • TRACE:追踪请求路径(一般禁用)

  • CONNECT:建立隧道(代理用)

二、GET 和 POST 核心区别(面试必背)

  1. 作用不同
  • GET :用于查询、获取数据,不修改服务器

  • POST :用于提交、新增、修改数据,会产生副作用

  1. 参数位置
  • GET :参数放在URL里,可见

  • POST:参数放在 ** 请求体(body)** 里,相对隐蔽

  1. 数据大小
  • GET:受 URL 长度限制,一般几 KB

  • POST:理论无限制,适合传大量数据 / 文件

  1. 安全性
  • GET :明文可见,不安全,不能传敏感信息

  • POST:相对安全,但不加密,仍需 HTTPS

  1. 缓存
  • GET会被浏览器缓存

  • POST:默认不缓存

  1. 历史记录 / 书签
  • GET:会保留在历史记录,可收藏为书签

  • POST:不会

  1. 幂等性
  • GET幂等(多次请求结果一样)

  • POST非幂等(多次提交可能重复创建)

  1. 编码类型
  • GET :只支持 URL 编码

  • POST:支持 form-data、json、文件等多种类型

极简背诵版

  • GET:查数据,URL 传参,长度有限,可缓存,不安全,幂等

  • POST:交数据,Body 传参,无大小限制,不缓存,相对安全,非幂等

HTTP 状态码分类:1xx、2xx、3xx、4xx、5xx 分别代表什么

一、五大类含义

  • 1xx:信息性状态码 服务器收到请求,继续处理

  • 2xx:成功状态码 请求正常处理完成

  • 3xx:重定向状态码 需要进一步操作,跳转其他地址

  • 4xx:客户端错误 客户端发的请求有问题,服务器无法处理

  • 5xx:服务器错误 请求没问题,但服务器自己挂了 / 出错了

二、每类常见状态码(必背)

1xx 信息类

  • 100 Continue:继续发送请求

2xx 成功

  • 200 OK:请求成功(最常见)

  • 201 Created:创建成功(如新建用户)

  • 204 No Content:成功,但无返回内容

3xx 重定向

  • 301 Moved Permanently:永久重定向

  • 302 Found:临时重定向

  • 304 Not Modified:资源未修改,使用缓存(非常高频)

4xx 客户端错误

  • 400 Bad Request:请求参数错误

  • 401 Unauthorized:未登录 / 未授权

  • 403 Forbidden:拒绝访问(有权限也不让进)

  • 404 Not Found:资源不存在

  • 405 Method Not Allowed:请求方法不支持

  • 429 Too Many Requests:请求太频繁

5xx 服务器错误

  • 500 Internal Server Error:服务器内部错误

  • 502 Bad Gateway:网关错误

  • 503 Service Unavailable:服务不可用 / 超载

  • 504 Gateway Timeout:网关超时

一句话速记

  • 1xx:等一等

  • 2xx:成了

  • 3xx:走这边

  • 4xx:你错了

  • 5xx:我炸了

常见 HTTP 状态码含义

  • 200 OK请求成功,正常返回数据。

  • 301 Moved Permanently 永久重定向,旧地址废弃,推荐用新地址。

  • 302 Found 临时重定向,只是暂时跳转,以后还可能变。

  • 304 Not Modified 资源未修改,直接用本地缓存,不用重新下载。

  • 400 Bad Request请求参数错误、格式不对,服务器看不懂。

  • 401 Unauthorized 未登录、token 无效,需要身份验证

  • 403 Forbidden 服务器拒绝访问,权限不足

  • 404 Not Found资源不存在,页面 / 接口找不到。

  • 500 Internal Server Error服务器代码报错、异常,后台挂了。

  • 502 Bad Gateway网关错误,服务器作为网关 / 代理收到无效响应。

HTTPS 是什么?加密原理

  1. HTTPS 是什么

HTTPS = HTTP + SSL/TLS 加密

  • 安全版的 HTTP

  • 默认端口:443

  • 作用:保证传输过程加密、防窃听、防篡改、防冒充

  1. 加密原理(面试必背)

HTTPS 用的是对称加密 + 非对称加密 结合的方式,也叫混合加密

① 对称加密

  • 加密解密用同一把密钥

  • 速度快

  • 问题:密钥在网络传输时容易被窃听

② 非对称加密

公钥 + 私钥一对:

  • 公钥:公开给所有人

  • 私钥:自己保存,绝不外传

  • 公钥加密 → 只能私钥解密

  • 私钥加密 → 只能公钥解密

  • 优点:安全

  • 缺点:速度慢

  1. HTTPS 完整握手流程(极简版)

  2. 客户端发起请求,支持的 TLS 版本、加密套件

  3. 服务器返回数字证书(包含服务器公钥)

  4. 客户端验证证书真伪(由 CA 机构颁发)

  5. 客户端生成一个随机对称密钥

  6. 服务器公钥加密这个对称密钥,发给服务器

  7. 服务器用私钥解密,得到对称密钥

  8. 之后双方都用这个对称密钥加密传输数据

一句话总结:用非对称加密安全交换对称密钥,再用对称加密高速传输数据。

  1. 额外作用
  • 身份验证:证书确保你访问的是真实服务器

  • 数据完整性:防止内容被篡改

  • 防中间人攻击

HTTP 与 HTTPS 核心区别

  1. 安全性

    • HTTP:明文传输,数据易被窃听、篡改、劫持

    • HTTPS:加密传输,防窃听、防篡改、防冒充

  2. 协议与端口

    • HTTP :超文本传输协议,端口 80

    • HTTPS :HTTP + TLS/SSL,端口 443

  3. 加密方式

    • HTTP:无加密

    • HTTPS:对称加密 + 非对称加密混合加密

  4. 是否需要证书

    • HTTP:不需要证书

    • HTTPS :需要 CA 颁发的数字证书

  5. 性能

    • HTTP:开销小、速度快

    • HTTPS:握手加密有开销,稍慢一点

  6. 搜索引擎与浏览器

    • HTTP:浏览器标 "不安全",SEO 排名低

    • HTTPS:标安全锁,搜索引擎更友好

一句话速记

HTTP 明文 80 不安全,HTTPS 加密 443 更安全,需要证书。

HTTPS 握手过程简单描述

这里给你一段最简单、面试直接背的 HTTPS 握手过程,不绕弯子:

  1. 客户端说:我要建立 HTTPS 连接,把支持的加密方式发给服务器。

  2. 服务器回应:选一种加密方式,并把 ** 数字证书(含公钥)** 发给客户端。

  3. 客户端验证证书是否合法有效。

  4. 客户端生成一个随机对称密钥 ,用服务器的公钥加密后发过去。

  5. 服务器用自己的私钥解密,拿到对称密钥。

  6. 之后双方都用这个对称密钥加密通信,握手完成。

超简一句话版

客户端验证证书 → 生成对称密钥 → 用公钥加密传给服务器 → 双方用对称密钥加密传输。

  1. 简单一句话
  • Cookie:数据存在客户端(浏览器)

  • Session:数据存在服务器,客户端只存一个 SessionID

  1. 详细对比

Cookie

  • 存储位置:浏览器

  • 容量:很小,一般 4KB 左右

  • 生命周期:可设置过期时间,关闭浏览器不一定消失

  • 安全性:,明文可见,能被篡改、伪造

  • 传输:每次请求都会自动带上 Cookie

  • 用途:记住用户名、主题、广告追踪、购物车等

Session

  • 存储位置:服务器(内存 / 数据库 / 缓存)

  • 容量:几乎无限制

  • 生命周期:默认随会话结束(关闭浏览器或超时失效)

  • 安全性:,数据在服务器,客户端只有 ID

  • 传输:只传一个 SessionID(通常放在 Cookie 里)

  • 用途:登录状态、用户信息、权限等敏感数据

  1. 核心区别总结表
对比项 Cookie Session
存储位置 客户端浏览器 服务器端
安全性 较低,可查看修改 较高,数据不暴露
存储大小 小(≤4KB)
服务器压力 无压力 占用服务器资源
生命周期 可长期保存 临时会话,超时销毁
支持禁用 可被浏览器禁用 依赖 Cookie 传递 SessionID
  1. 它们怎么配合工作?(登录流程)

  2. 用户登录成功

  3. 服务器创建 Session,保存用户信息

  4. 服务器把 SessionID 通过 Cookie 发给浏览器

  5. 浏览器之后每次请求自动带上这个 Cookie

  6. 服务器根据 SessionID 找到对应的 Session,识别用户

  7. 超简背诵版

  • Cookie 存在客户端,小、不安全、可持久

  • Session 存在服务端,大、安全、临时

  • Session 通常靠 Cookie 传递 SessionID 工作

Token 是什么?与 Session 区别

  1. Token 是什么

Token = 令牌

  • 是一串加密字符串(如 JWT),相当于服务器给用户发的 "通行证"

  • 登录成功后,服务器生成并签发 Token,返回给客户端

  • 客户端自己保存(localStorage / Cookie)

  • 后续请求时主动带上,服务器验证通过就放行

  1. Token 与 Session 核心区别
对比项 Session Token
存储位置 信息存在服务器 信息加密存在客户端
状态 有状态:服务器要存会话 无状态:服务器不存会话
扩展性 差,集群需同步 Session 好,分布式 / 微服务天然适用
跨域 / 跨端 麻烦,依赖 Cookie 方便,APP / 小程序 / 跨域都能用
安全性 依赖 SessionID,易被劫持 可加密、过期、签名,防篡改
压力 占服务器内存 / 缓存 几乎不占服务器存储
  1. 一句话总结
  • Session:服务器记着你是谁,你只带个编号

  • Token:服务器不记你,通行证里自己带着身份信息,验签就行

  1. 最简单记忆
  • Session:有状态,服务器存,集群麻烦

  • Token:无状态,客户端存,分布式友好

浏览器输入 URL → 页面显示 全过程

  1. 解析 URL
  • 判断是域名还是 IP

  • 补全协议(默认 HTTP/HTTPS)

  • 拆分出:协议、域名、端口、路径、参数

  1. DNS 域名解析(域名 → IP)

  2. 查浏览器缓存

  3. 查系统 hosts

  4. 查本地 DNS 服务器

  5. 依次请求:根 DNS → 顶级域 DNS → 权威 DNS

  6. 得到目标服务器 IP

  7. 建立传输层连接

  • 如果是 HTTP :建立 TCP 连接(三次握手)

  • 如果是 HTTPS :先 TCP 握手,再进行 TLS 握手,建立加密通道

  1. 浏览器发送 HTTP 请求
  • 构造请求行、请求头、请求体

  • 发送 GET/POST 等请求到服务器 IP

  1. 服务器处理请求并返回响应
  • 服务器接收请求

  • 处理业务逻辑、查询数据库

  • 返回 HTTP 响应(状态码、响应头、HTML 等内容)

  1. 关闭连接(可选)
  • HTTP/1.1 默认 Keep-Alive,不断开

  • 否则进行 TCP 四次挥手

  1. 浏览器解析渲染页面(核心)

  2. 解析 HTML ,生成 DOM 树

  3. 解析 CSS ,生成 CSSOM 树

  4. 结合 DOM + CSSOM 生成 渲染树(Render Tree)

  5. 布局(Layout/Reflow):计算元素位置大小

  6. 绘制(Paint):填充像素、颜色、图片

  7. 合成(Composite):将多层合成显示

  8. 加载额外资源

  • 遇到 CSS、JS、图片、字体等继续发起请求

  • JS 执行可能阻塞渲染

  • 图片异步加载,加载完成后重新绘制

  1. 页面最终展示给用户

超简背诵版(考场 / 面试口述版)

  1. 解析 URL

  2. DNS 解析域名成 IP

  3. TCP 三次握手建立连接

  4. HTTPS 则进行 TLS 握手

  5. 浏览器发 HTTP 请求

  6. 服务器处理并返回响应

  7. 浏览器解析 HTML → DOM 树

  8. 解析 CSS → CSSOM 树

  9. 生成渲染树 → 布局 → 绘制 → 合成

  10. 加载静态资源,最终显示页面

TCP 和 UDP 区别 + 适用场景

一、TCP 与 UDP 核心区别

对比项 TCP 传输控制协议 UDP 用户数据报协议
连接性 面向连接(必须先建立连接) 无连接(发完拉倒)
可靠性 可靠传输,不丢包、不乱序 不可靠,可能丢包、乱序
重传机制 有,丢包自动重传
流量 / 拥塞控制
传输效率 慢,开销大 快,开销极小
数据形式 字节流 数据报
双工性 全双工 支持一对一、一对多、多对多

二、简单一句话理解

  • TCP :像打电话,先拨号接通,再说内容,保证你听得清清楚楚。

  • UDP :像寄平信 / 广播,直接发出去,不管对方收没收到、顺序对不对。

三、适用场景

TCP 适用:要求可靠、不能丢数据

  • HTTP/HTTPS(网页)

  • FTP(文件传输)

  • SMTP/POP3(邮件)

  • MySQL、Redis(数据库连接)

  • 文件下载、登录支付

UDP 适用:要求快、允许少量丢包

  • 直播、点播

  • 网络游戏

  • 视频通话(微信 / QQ 视频)

  • DNS 域名解析

  • 在线语音聊天

四、超简背诵版

  • TCP:面向连接、可靠、慢、适合对数据完整性要求高的场景。

  • UDP:无连接、不可靠、快、适合实时性要求高的场景。

TCP 三次握手

一、三次握手过程(通俗 + 专业版)

目的:建立可靠的 TCP 连接

第一次握手(客户端 → 服务器)

  • 客户端发送:SYN 包

  • 含义:"我想连接你,我的初始序列号是 x。"

第二次握手(服务器 → 客户端)

  • 服务器回复:SYN + ACK 包

  • 含义:"收到了,我同意连接。我的初始序列号是 y,并且确认收到你的 x(ACK=x+1)。"

第三次握手(客户端 → 服务器)

  • 客户端发送:ACK 包

  • 含义:"收到你的确认,我已准备好,确认收到你的 y(ACK=y+1)。"

之后连接正式建立,开始传输数据。

二、为什么必须是三次?不能两次、不能四次?

核心目的只有一个:

确保双方的【发送能力】和【接收能力】都正常。

一步步看:

  1. 第一次握手 服务器知道:→ 客户端能发 → 自己能收

  2. 第二次握手 客户端知道:→ 自己能发、能收→ 服务器能发、能收但服务器还不确定客户端能不能收

  3. 第三次握手 服务器终于知道:→ 客户端能收→ 双方收发都没问题

总结为什么要三次

  • 两次 :只能确认客户端没问题,服务器不知道客户端能不能收,不可靠。

  • 四次:多余,浪费资源。

  • 三次 :刚好能同时确认客户端、服务器双方收发都正常,是最小可靠次数。

超简背诵版

  1. 客户端发 SYN → 服务端

  2. 服务端回 SYN+ACK → 客户端

  3. 客户端发 ACK → 服务端连接建立。

为什么三次? 确保客户端和服务器双方的发送、接收能力都正常,最少可靠次数。

TCP 四次挥手

一、作用

用于可靠关闭 TCP 连接,保证双方数据都传输完毕再断开。

二、四次挥手过程(通俗版)

第一次挥手:客户端 → 服务器(FIN 包)

  • 客户端说:我发完数据了,请求关闭连接

  • 客户端进入 FIN_WAIT_1 状态。

第二次挥手:服务器 → 客户端(ACK 包)

  • 服务器说:收到你的关闭请求,我知道了

  • 服务器进入 CLOSE_WAIT ,客户端进入 FIN_WAIT_2

  • 此时:客户端不能发,但服务器还能发剩余数据

第三次挥手:服务器 → 客户端(FIN 包)

  • 服务器说:我也发完了,现在可以正式关闭

  • 服务器进入 LAST_ACK

第四次挥手:客户端 → 服务器(ACK 包)

  • 客户端说:收到,同意关闭

  • 客户端进入 TIME_WAIT,等待 2MSL 后彻底关闭。

  • 服务器收到后直接关闭。

三、为什么需要四次挥手?

一句话核心:TCP 是全双工通信,双方要各自关闭 "发送通道",各发一次 FIN + ACK。

展开说:

  1. TCP 连接双方都能独立收发数据

  2. 客户端先关自己的发送端(第一次 FIN)

  3. 服务器回复 ACK 确认(第二次 ACK)

  4. 但服务器可能还有数据要发,不能马上关

  5. 等服务器发完,再主动关闭它的发送端(第三次 FIN)

  6. 客户端最后回复 ACK(第四次 ACK)

所以必须四次

  • 客户端:FIN → ACK

  • 服务器:ACK → FIN

不像三次握手可以把 SYN 和 ACK 合并成一次,挥手时不能合并,因为服务器不一定立刻关闭。

四、超简背诵版

  1. 客户端发 FIN,请求关闭

  2. 服务器回 ACK,收到请求

  3. 服务器发 FIN,也准备关闭

  4. 客户端回 ACK,连接关闭

为什么四次? 因为 TCP 是全双工 ,双方要各自独立关闭发送通道,不能合并。

TIME_WAIT 是什么?为什么要等 2MSL

  1. TIME_WAIT 是什么?
  • 出现在四次挥手的主动关闭方(通常是客户端)

  • 发送完最后一个 ACK 后,不会立刻关闭,而是进入 TIME_WAIT 状态

  • 等待时间:2MSL

  1. 什么是 MSL?
  • MSL = Maximum Segment Lifetime

  • 报文最大生存时间(一个数据包在网络上最多能活多久)

  • 超过这个时间,数据包会被路由器丢弃

  • 不同系统一般设为 30s / 60s / 120s

所以 2MSL 就是:数据包一来一回最长可能需要的时间

  1. 为什么要等 2MSL?(两个核心原因)

① 防止最后一个 ACK 丢失,导致对方无法正常关闭

  • 如果客户端发完 ACK 立刻关闭

  • 万一 ACK 在网络中丢了

  • 服务器收不到 ACK,会以为 FIN 丢了,重发 FIN

  • 客户端已经关闭,会回复 RST,导致服务器报错

等待 2MSL 可以确保:即使最后一个 ACK 丢了,服务器重发的 FIN 也能在 2MSL 内回来,客户端可以再次 ACK。

② 让本次连接的所有 "残留数据包" 在网络中自然消失

  • 网络中可能还有延迟到达的旧数据包

  • 如果不等它们消失,立刻用相同端口建立新连接

  • 旧包可能被新连接错误接收,导致数据混乱

2MSL 能保证:本次连接的所有报文都已消失在网络中,不会干扰下一次连接。

极简背诵版

  • TIME_WAIT :主动关闭连接后,等待 2MSL 的状态

  • 为什么等 2MSL

    1. 确保最后一个 ACK 不丢失,让对方正常关闭

    2. 让网络中旧数据包全部过期消失,避免影响新连接

粘包、拆包 超清晰讲解

一、什么是粘包、拆包?

基于 TCP 是流式协议(像水流一样连续),没有消息边界,所以会出现:

  1. 粘包
  • 发送方发了两条独立消息:消息A消息B

  • 接收方一次性收到:消息A+消息B 连在一起→ 这就是粘包

  1. 拆包
  • 发送方发了一条完整消息:消息A

  • 接收方分成两次收到:消息A的一部分 + 消息A剩下的部分→ 这就是拆包

二、为什么会发生?

  1. TCP 是流式协议,不保留消息边界,只保证字节有序可靠

  2. 发送缓冲区累积数据,一次性发出去 → 粘包

  3. 发送数据超过 MSS/MTU,被分片发送 → 拆包

  4. Nagle 算法(合并小包发送)也会导致粘包

三、怎么解决?(三种经典方案)

核心思路:给数据加上 "边界",让接收方能分清一条消息从哪开始、到哪结束

  1. 固定消息长度(不常用)
  • 每条消息固定长度,不足补空格

  • 缺点:不灵活,浪费带宽

  1. 固定包头 + 包体长度(最常用)
  • 包头固定 4 字节,表示包体长度

  • 接收流程:

    1. 先读包头,拿到长度 N

    2. 再精确读取 N 字节包体

  • 优点:高效、通用,几乎所有项目都用这个

  1. 特殊分隔符分隔
  • 每条消息末尾加特殊符号:\n\r\n

  • 接收方读到分隔符就认为一条消息结束

  • 优点:简单

  • 缺点:内容里不能出现分隔符,需转义

极简背诵版

  • 粘包:多条消息拼成一条收到

  • 拆包:一条消息分成多次收到

  • 原因:TCP 是流式协议,无消息边界

  • 解决

    1. 固定长度

    2. 消息头 + 长度 + 消息体(主流)

    3. 特殊分隔符

TCP 可靠传输机制

  1. 确认应答(ACK)
  • 每收到一段数据,接收方就返回一个 ACK 确认号

  • 告诉发送方:"我收到了,下次从这里发"

  • 保证数据不丢失、不乱序

  1. 超时重传
  • 发送方发完数据启动定时器

  • 超时未收到 ACK ,认为丢包,重新发送

  • 保证即使丢包也能恢复

  1. 滑动窗口
  • 不用每发一段就等 ACK,一次性连续发多段

  • 窗口大小表示可发送但未确认的数据量

  • 提升传输效率,同时保持可靠

  1. 流量控制
  • 作用:防止发送方发太快,把接收方撑爆

  • 接收方在 ACK 中告诉对方自己的接收窗口大小(rwnd)

  • 发送方根据窗口调整发送速度

  1. 拥塞控制
  • 作用:防止网络拥堵、雪崩

  • 发送方维护 拥塞窗口 cwnd,根据网络状况调整

  • 包含四个阶段:

    1. 慢启动(指数增长)

    2. 拥塞避免(线性增长)

    3. 快重传(连续 3 个重复 ACK 立即重传)

    4. 快恢复(丢包后不从头开始)

一句话总结

TCP 通过 ACK 确认、超时重传 保证不丢不乱;通过 滑动窗口 提高效率;通过 流量控制 保护接收方;通过 拥塞控制 保护整个网络。

TCP 拥塞控制 4 个阶段

  1. 慢启动(Slow Start)
  • 刚连接时,拥塞窗口 cwnd 很小

  • 每收到一个 ACK,cwnd 指数增长(1→2→4→8...)

  • 快速试探网络能承受多大流量

  1. 拥塞避免(Congestion Avoidance)
  • 达到慢启动门限 ssthresh 后,进入此阶段

  • cwnd 不再暴增,改为线性增长(加 1)

  • 平稳提升速度,避免突然拥塞

  1. 快重传(Fast Retransmit)
  • 收到 连续 3 个重复 ACK ,判定为丢包

  • 不等定时器超时,立刻重传丢失的包

  • 减少等待时间,提高效率

  1. 快恢复(Fast Recovery)
  • 快重传后,不进入慢启动

  • 把门限 ssthresh 设为当前 cwnd 的一半

  • cwnd 设为新门限,直接进入拥塞避免

  • 不用从头开始,恢复更快

一句话口诀

慢启动暴增,拥塞避免缓增; 快重传立即补发,快恢复不从头来。

半连接队列 & 全连接队列

  1. 半连接队列(SYN Queue)
  • 存放状态 :服务端收到客户端 SYN ,回复 SYN+ACK 后,连接处于 SYN_RCVD

  • 作用 :存储还没完成三次握手的连接

  • 什么时候移出 :收到客户端最后一次 ACK,完成三次握手,移入全连接队列

一句话:还没握完手的连接,在半连接队列等着。

  1. 全连接队列(Accept Queue)
  • 存放状态 :已经完成三次握手,建立好的 TCP 连接

  • 作用 :等待应用程序调用 accept() 取走连接

  • 什么时候移出 :应用层 accept() 处理连接后移出

一句话:已经握完手、可以正式用的连接,在全连接队列等着被处理。

超简总结

  • 半连接队列 :三次握手进行中(SYN_RCVD)

  • 全连接队列 :三次握手已完成(ESTABLISHED),等待应用处理

对应的攻击:

  • 半连接队列被占满 → SYN Flood 攻击

SYN 洪水攻击原理

  1. 攻击原理

攻击者伪造大量不存在的 IP ,向服务器不停发送 SYN 包(第一次握手)。

服务器收到后:

  • 回复 SYN+ACK(第二次握手)

  • 把这个半开连接放入半连接队列(SYN 队列)

  • 等待客户端的 ACK,并重试超时重发

但攻击者根本不会回复 ACK,这些连接就一直占着半连接队列,直到超时。

  1. 最终结果

半连接队列很快被占满 ,正常用户的 SYN 进不来,服务器无法建立新连接 → 服务不可用

一句话总结

攻击者大量发送伪造 SYN 包,不回 ACK,占满半连接队列,让服务器无法处理正常连接。

IP 协议作用

IP 协议属于网络层协议,核心就两件事:

  1. 寻址 给每个主机分配 IP 地址,确定数据要发给谁、从哪发来。

  2. 路由选择 根据目标 IP,选择路径,让数据包能穿过多个路由器,从源主机传到目标主机。

一句话总结

IP 协议负责寻址和路由,让数据包能在网络中找到目的地,但不保证可靠、不保证顺序。

补充:

  • 无连接:发数据包不需要先建立连接

  • 不可靠:可能丢包、乱序,可靠性靠上层 TCP 实现

IPv4 与 IPv6 核心区别

  1. 地址长度与数量
  • IPv4 :32 位,约 42 亿 个地址,早已不够用

  • IPv6:128 位,地址数量近乎无限,彻底解决地址短缺

  1. 地址表示
  • IPv4 :点分十进制,如 192.168.1.1

  • IPv6 :冒分十六进制,如 2001:db8::1

  1. 路由与性能
  • IPv4:路由表大,转发效率低

  • IPv6:路由层次更优,转发更快

  1. 安全性
  • IPv4:无内置安全,需额外加密

  • IPv6 :原生支持 IPSec,更安全

  1. 自动配置
  • IPv4:需 DHCP 或手动配置

  • IPv6:支持无状态自动配置,即插即用

  1. 组播与移动性
  • IPv6 比 IPv4 支持更好,适合物联网、移动设备

一句话速记

IPv4 地址少、32 位、不安全;IPv6 地址无限、128 位、原生安全、自动配置。

ARP 协议

  1. 作用

根据目标 IP 地址,获取对应的 MAC 地址,实现局域网内通信。

  1. 工作过程

  2. 主机 A 想和主机 B 通信,知道主机 B 的 IP,但不知道 MAC。

  3. 主机 A 在局域网内发送 ARP 请求广播:"谁的 IP 是 ×××,请把 MAC 告诉我!"

  4. 同一局域网内所有主机都收到,只有主机 B 响应。

  5. 主机 B 发送 ARP 应答单播,把自己的 MAC 发给主机 A。

  6. 主机 A 收到后,将 IP 与 MAC 的映射存入 ARP 缓存,后续直接使用。

一句话总结

ARP:IP → MAC 地址解析,先广播问,再单播回,缓存起来。

RARP、ICMP、IGMP

  1. RARP 协议(反向地址解析协议)
  • 作用 :与 ARP 相反,根据 MAC 地址 → 获取 IP 地址

  • 场景:无盘工作站启动,不知道自己 IP,只知道网卡 MAC

  • 现在基本被 DHCP 取代

  1. ICMP 协议(互联网控制报文协议)
  • 作用 :网络层的 "差错检测 + 网络诊断"

  • 用来传递网络异常信息(不可达、超时、重定向等)

  • 典型应用

    • ping 命令(检测网络通不通)

    • traceroute(追踪路由路径)

  1. IGMP 协议(网际组管理协议)
  • 作用 :实现 IP 组播(多播)

  • 主机和路由器之间用,告诉路由器:"我要加入 / 退出某个组播组"

  • 场景:直播、视频会议、IPTV 等一对多传输

一句话速记

  • ARP:IP → MAC

  • RARP:MAC → IP

  • ICMP:网络报错、ping 用

  • IGMP:组播管理,一对多

Ping 命令使用协议 & 工作原理

  1. 使用协议

ICMP 协议(互联网控制报文协议)

  1. 工作原理

  2. 源主机向目标主机发送 ICMP 回显请求报文(Echo Request)

  3. 目标主机收到后,回复 ICMP 回显应答报文(Echo Reply)

  4. 如果源主机收到应答,说明网络连通;超时或收不到则说明不通 / 丢包。

  5. 简单一句话

Ping 就是发送 ICMP 请求,等对方 ICMP 回复,用来测试网络是否通、延迟多少。

静态路由 vs 动态路由

  1. 静态路由
  • 管理员手动配置路由条目

  • 不会自动适应网络变化

  • 优点:简单、稳定、不占带宽、安全

  • 缺点:网络拓扑变了要手动改,不适合大型网络

  • 适用:小型网络、固定拓扑网络

  1. 动态路由
  • 路由器之间自动学习、交换路由信息,自动生成路由表

  • 网络故障或拓扑变化时自动调整

  • 优点:自适应、扩展性好、适合大型网络

  • 缺点:占用带宽、配置复杂、安全性稍差

  • 常见协议:RIP、OSPF、IS-IS、BGP

一句话总结

静态路由:手动配、不变、简单; 动态路由:自动学、自适应、适合大型网络。

什么是子网划分

  • 把一个大网络,拆分成多个更小的子网,分别管理。

  • 目的:

    • 减少广播风暴,提高网络效率

    • 节约 IP 地址,避免浪费

    • 方便网络管理与安全隔离

  • 原理:借位,把主机位 拿出一部分当子网位使用。

  1. CIDR 是什么?

CIDR = 无类别域间路由(Classless Inter-Domain Routing)

  • 废除传统 A/B/C 类地址限制,用 前缀长度 表示子网掩码

  • 表示形式:IP地址/前缀位数例:192.168.1.0/24

  • /24 等价于子网掩码:255.255.255.0

  • 作用:

    • 更灵活地分配 IP,减少地址浪费

    • 简化路由表,支持路由聚合

一句话总结

  • 子网划分:把大网切小网,更高效安全。

  • CIDR :用 /数字 表示子网掩码,灵活分配 IP。

NAT 是什么、作用、优缺点

  1. NAT 是什么

网络地址转换(Network Address Translation) 路由器把内网私有 IP外网公网 IP 互相转换,实现内网设备访问互联网。

  1. 作用
  • 缓解 IPv4 公网地址不足,多个内网设备共用一个公网 IP

  • 隐藏内网拓扑,提高内网安全性

  • 节省公网 IP 资源,降低成本

  1. 优点
  • 节约公网 IPv4 地址

  • 保护内网主机,外部无法直接访问

  • 内网 IP 可自由规划,方便管理

  1. 缺点
  • 某些 P2P、视频通话、游戏等端对端应用无法直接穿透

  • 增加转发延迟

  • 不支持端到端加密(IPSec 等受影响)

  • 不利于服务器对外提供服务

一句话速记

NAT 实现内外网地址转换,节约公网 IP、隐藏内网;但影响 P2P,有转发损耗。

数据链路层作用

  1. 组帧 :将网络层的 IP 数据包封装成,添加帧头帧尾,划分数据边界。

  2. 物理寻址 :使用 MAC 地址 标识设备,实现局域网内节点通信。

  3. 差错检测 :通过 CRC 等机制检测传输错误,保证帧正确。

  4. 流量控制:协调收发速率,防止接收方来不及处理。

  5. 访问控制:协调多个设备共享信道(如 CSMA/CD)。

一句话总结:在相邻节点间可靠传输帧,用 MAC 寻址,负责差错检测与信道控制。

MAC 地址

MAC 地址 是网卡的物理地址 / 硬件地址,全球唯一,用来标识网络设备。

特点

  • 长度:48 位(6 字节)

  • 表示:XX:XX:XX:XX:XX:XX 十六进制

  • 前 24 位:厂商编号(OUI)

  • 后 24 位:设备序列号

  • 工作在数据链路层

  • 出厂固化在网卡,一般不可更改

作用

局域网内实现设备之间的寻址与通信(IP 是逻辑地址,MAC 是物理身份)。

一句话速记:MAC 是网卡硬件地址,全球唯一,用于局域网寻址。

以太网帧结构

按顺序记:

  1. 前导码 + 帧开始定界符同步时钟,告诉接收方 "帧要来了"。

  2. 目的 MAC 地址(6 字节)接收设备的硬件地址。

  3. 源 MAC 地址(6 字节)发送设备的硬件地址。

  4. 类型 / 长度(2 字节)标识上层协议:

    • 0x0800 → IPv4

    • 0x0806 → ARP

  5. 数据字段(46~1500 字节)IP 数据包,不足 46 字节要填充。

  6. FCS 帧校验序列(4 字节)CRC 校验,用于检测传输错误。

极简记忆版

前导码 → 目的 MAC → 源 MAC → 类型 → 数据 → FCS

冲突域 vs 广播域

  1. 冲突域(Collision Domain)
  • 范围:同一域内设备同时发送数据会产生冲突

  • 特点:共享带宽,冲突会降低效率

  • 设备影响:

    • 集线器(Hub) 所有端口在同一个冲突域

    • 交换机、路由器 每个端口是独立冲突域

一句话:会发生数据碰撞的范围 = 冲突域

  1. 广播域(Broadcast Domain)
  • 范围:广播帧(广播包)能传到的所有设备范围

  • 特点:广播会被域内所有设备接收

  • 设备影响:

    • 交换机 所有端口在同一个广播域

    • 路由器 每个接口是独立广播域(隔离广播)

一句话:广播包能到达的范围 = 广播域

核心区别总结

  • 冲突域 :解决冲突,交换机可隔离

  • 广播域 :解决广播风暴,只有路由器能隔离

记忆口诀:冲突域交换机隔,广播域路由器隔。

交换机 vs 路由器

  1. 工作层次
  • 交换机 :工作在数据链路层(二层)

  • 路由器 :工作在网络层(三层)

  1. 寻址依据
  • 交换机 :基于 MAC 地址 转发

  • 路由器 :基于 IP 地址 转发

  1. 主要作用
  • 交换机 :连接局域网内设备,扩展接口,同一网段通信

  • 路由器 :连接不同网络,实现跨网段通信、寻址、选路

  1. 冲突域 / 广播域
  • 交换机 :隔离冲突域,不隔离广播域

  • 路由器 :隔离冲突域 + 广播域

  1. 其他功能
  • 交换机:简单转发,无 NAT、无路由选择

  • 路由器:路由选择、NAT、防火墙、DHCP 等

一句话记忆

交换机用 MAC 连内网,路由器用 IP 连外网;交换机隔冲突,路由器隔广播。

集线器、交换机、路由器分别工作在哪一层

  • 集线器(Hub)物理层(第一层)

  • 交换机(Switch)数据链路层(第二层)

  • 路由器(Router)网络层(第三层)

一句话速记:集线一、交换二、路由三。

浏览器输入 URL 到页面显示全过程

真实网络流程一步步走,条理清晰,直接背诵:

  1. 解析 URL
  • 判断协议:http/https/ftp

  • 域名:www.xxx.com

  • 端口、路径、参数等

  • 检查是否为非法地址、是否需要跳转

  1. 浏览器缓存查找
  • 先查浏览器自身缓存(之前访问过的 DNS)

  • 没有 → 查系统 hosts 文件

  • 没有 → 发起 DNS 请求

  1. DNS 域名解析(域名 → IP)

  2. 浏览器向本地 DNS 服务器发送查询请求

  3. 本地 DNS 查自己缓存,没有就向上级查

  4. 根 DNS 服务器 → 顶级域名服务器(.com)

  5. 最终查到目标权威 DNS ,得到对应服务器 IP

  6. DNS 结果返回给浏览器

  7. 封装 HTTP/HTTPS 请求

  • 构造请求行、请求头、请求体

  • 如果是 HTTPS

    • 发起 TLS 握手

    • 协商加密套件、交换密钥、验证证书

    • 建立加密通道

  1. 操作系统协议栈封装

  2. 应用层:HTTP/HTTPS 报文

  3. 传输层:加上 TCP 头(源端口、目标端口)

  4. 网络层:加上 IP 头(源 IP、目标 IP)

  5. 数据链路层:加上 MAC 头(源 MAC、网关 MAC)

  6. 物理层:转为比特流传输

  7. 建立 TCP 连接(三次握手)

  8. 浏览器 → 服务器:SYN

  9. 服务器 → 浏览器:SYN+ACK

  10. 浏览器 → 服务器:ACK连接建立,开始传输数据。

  11. 数据在网络中传输

  • 数据包经过交换机、路由器、网关

  • 路由器根据目标 IP 进行路由选择

  • 经过多层转发到达目标服务器

  1. 服务器处理请求
  • 服务器端口(80/443)接收请求

  • Nginx/Apache 转发请求到后端服务

  • 后端处理业务、查询数据库

  • 生成响应数据(HTML/CSS/JS/JSON)

  1. 服务器返回响应
  • 状态码:200/301/302/404/500 等

  • 响应头 + 响应体

  • 沿原网络路径返回客户端

  1. TCP 断开连接(四次挥手)

  2. 浏览器 → 服务器:FIN

  3. 服务器 → 浏览器:ACK

  4. 服务器 → 浏览器:FIN

  5. 浏览器 → 服务器:ACK连接关闭

  6. 浏览器解析渲染页面

  7. 解析 HTML → 生成 DOM 树

  8. 解析 CSS → 生成 CSSOM 树

  9. 合并为 渲染树(Render Tree)

  10. 布局(Layout):计算位置大小

  11. 绘制(Paint):像素绘制

  12. 加载 JS、图片、字体等资源

  13. 页面最终展示

极简流程口诀

URL 解析 → 查缓存 → DNS 查 IP → HTTPS 握手 → TCP 三次握手 → 发包路由转发 → 服务器处理 → 响应返回 → TCP 四次挥手 → 浏览器渲染显示

HTTPS 建立连接完整流程

  1. 客户端 → 服务端:Client Hello
  • 支持的 TLS 版本

  • 客户端随机数 Random_C

  • 支持的加密套件列表(Cipher Suite)

  • 会话 ID(用于会话复用)

  1. 服务端 → 客户端:Server Hello
  • 选定 TLS 版本

  • 服务端随机数 Random_S

  • 选定一个加密套件

  • 会话 ID

  1. 服务端 → 客户端:发送证书
  • 发送服务器数字证书(包含公钥、域名、颁发机构等)

  • 客户端会验证证书合法性(有效期、域名、CA 签名)

4.(可选)Server Key Exchange

  • 如使用 DHE/ECDHE 算法,会发送密钥交换参数
  1. 服务端 → 客户端:Server Hello Done
  • 表示服务端握手消息结束,等待客户端回复
  1. 客户端验证证书
  • 验证证书是否被信任 CA 签发

  • 检查域名、有效期、是否吊销

  • 验证通过则取出服务器公钥

  1. 客户端 → 服务端:Client Key Exchange
  • 生成预主密钥 Pre-Master Secret

  • 服务器公钥加密后发送给服务端

  1. 双方生成会话密钥

客户端与服务端各自通过:

  • Random_C

  • Random_S

  • Pre-Master Secret

使用相同算法算出:

  • 主密钥 Master Secret

  • 最终生成对称加密密钥(用于后续数据加密)

  1. 客户端 → 服务端:Change Cipher Spec
  • 通知服务端:后续消息将加密传输
  1. 客户端 → 服务端:Encrypted Handshake Message
  • 发送加密的握手结束消息,验证加密通道是否正常
  1. 服务端 → 客户端:Change Cipher Spec
  • 通知客户端:我也开始加密
  1. 服务端 → 客户端:Encrypted Handshake Message
  • 握手完成,开始正式传输 HTTP 数据

极简总结(背诵版)

  1. 双方 Hello 交换随机数、加密套件

  2. 服务器发证书,客户端验证书取公钥

  3. 客户端加密发送预主密钥

  4. 双方算出相同对称密钥

  5. 切换加密模式,开始安全传输

一句话:HTTPS = TCP 三次握手 + TLS 握手,用非对称加密交换密钥,对称加密传输数据。

TCP 如何保证可靠传输

TCP 依靠以下核心机制实现可靠、有序、无重复、无丢失的数据传输:

  1. 面向连接
  • 传输前必须通过三次握手建立连接

  • 传输后通过四次挥手正常断开

  • 确保双方状态同步,才开始传输数据

  1. 序列号 + 确认应答(ACK)
  • 每个字节数据都有唯一序列号(Seq)

  • 接收方收到后返回确认号(ACK),表示收到哪一段数据

  • 发送方知道数据已被正确接收

  1. 超时重传
  • 发送方发出数据后启动定时器

  • 超时未收到 ACK ,认为数据丢失,自动重传

  1. 流量控制(滑动窗口)
  • 接收方在 ACK 中告知自己接收窗口大小

  • 发送方根据窗口控制发送速率

  • 防止发送过快导致接收方处理不过来

  1. 拥塞控制
  • 网络拥堵时降低发送速率,避免大量丢包

  • 包含:慢启动、拥塞避免、快重传、快恢复

  1. 差错校验
  • 每个报文段有校验和

  • 接收方检测到错误直接丢弃,等待重传

  1. 去重与排序
  • 依靠序列号对数据重新排序

  • 重复的报文段直接丢弃,保证数据唯一

  1. 面向字节流
  • 数据以字节流形式传输,边界清晰,不丢失不混乱

极简背诵版

TCP 靠:连接建立、序列号 + ACK、超时重传、滑动窗口、拥塞控制、校验和、排序去重,保证可靠传输。

拥塞控制 vs 流量控制

  1. 流量控制(Flow Control)
  • 解决问题发送方发太快,接收方处理不过来

  • 作用范围端到端(只在发送方和接收方之间)

  • 实现方式 :接收方在 ACK 中告诉发送方自己的窗口大小(rwnd)

  • 核心目的:不让接收方溢出

一句话:你收不收得完?我慢点发。

  1. 拥塞控制(Congestion Control)
  • 解决问题网络本身拥堵,路由器扛不住,大量丢包

  • 作用范围整个网络(关注链路、路由器状况)

  • 实现方式:发送方通过丢包、延迟等感知网络状况,用 ** 拥塞窗口(cwnd)** 控制速率

  • 核心目的:不让网络崩溃

一句话:网络堵不堵?我慢点发。

核心区别总结

  • 流量控制 :点对点,防止接收方溢出

  • 拥塞控制 :全局,防止网络拥堵

  • 共同配合:发送窗口 = min (rwnd, cwnd)

极简口诀

流量控制管接收方,拥塞控制管整个网。

大量 TIME_WAIT / CLOSE_WAIT 原因

一、大量 TIME_WAIT

  1. 出现在谁身上?

主动关闭连接的一方(通常是客户端、Nginx、Tomcat)

  1. 产生原因
  • 主动调用 close() 发送 FIN,收到对方 FIN 并 ACK 后进入

  • 持续时间:2MSL(一般 30s~2min)

  • 本质:防止最后一个 ACK 丢包,让旧报文在网络中自然消失

  1. 为什么会大量出现?
  • 短连接并发极高(大量 HTTP 请求、频繁新建 + 关闭连接)

  • 服务端主动断开连接(如 Nginx 后端回收连接)

  • 单机并发连接数巨大,关闭后堆积

  1. 危害
  • 占用大量端口、内存,导致无法新建连接
  1. 解决
  • 开启 tcp_tw_reusetcp_timestamps

  • 调小 tcp_fin_timeout

  • 改用长连接(HTTP keep-alive)

二、大量 CLOSE_WAIT

  1. 出现在谁身上?

被动关闭方(收到对方 FIN,但自己没调用 close)

  1. 产生原因
  • 对方已经关闭连接(发了 FIN)

  • 本方应用程序没有及时关闭 socket

  • 代码问题:没读到 EOF、死循环、线程阻塞、逻辑漏写 close

一句话:对方走了,你还拿着连接不放手。

  1. 典型场景
  • 后端服务业务逻辑阻塞

  • 线程池满,无法处理关闭

  • 代码 bug:读完数据忘记 close()

  • Tomcat/Nginx 后端应用没正确处理连接关闭

  1. 危害

占用文件描述符(fd),最终导致 "too many open files" 无法建立新连接

  1. 解决
  • 查代码:确保异常 / 读完后一定 close()

  • 检查线程池、超时设置

  • 抓包 / 看日志定位哪里没关闭连接

一句话区分

  • TIME_WAIT 多 = 正常但并发太高

  • CLOSE_WAIT 多 = 代码 / 应用没关连接,基本是 bug

DDoS 攻击

  1. 定义

DDoS = 分布式拒绝服务攻击 攻击者控制大量傀儡机(肉鸡) ,同时向目标服务器发送海量请求,耗尽服务器资源,导致正常用户无法访问

  1. 核心原理
  • 利用分布式节点发起攻击,流量巨大,难以防御

  • 目标:占满带宽、CPU、内存、连接数,使服务瘫痪

  1. 常见类型
  • 流量型:占满带宽(UDP 洪水、ICMP 洪水)

  • 协议型:耗尽连接资源(SYN 洪水)

  • 应用层:模拟正常请求耗尽服务(HTTP 洪水、CC 攻击)

  1. 与 DoS 的区别
  • DoS:单台机器攻击,流量小

  • DDoS:多台机器协同攻击,流量极大,难防御

一句话总结

控制大量机器同时发起请求,耗尽服务器资源,让服务瘫痪无法响应正常用户

HTTP 长连接 vs 短连接

  1. 短连接(HTTP/1.0 默认)
  • 流程:请求 → 建立 TCP 连接 → 传输 → 立即关闭

  • 每发起一个 HTTP 请求,就新建一次 TCP 三次握手、四次挥手

  • 特点:

    • 连接用完就关

    • 开销大、延迟高

    • 高并发下容易产生大量 TIME_WAIT

  1. 长连接(HTTP/1.1 默认,Keep-Alive)
  • 流程:建立一次 TCP 连接 → 连续传输多个 HTTP 请求 / 响应 → 超时再关闭

  • 通过请求头 Connection: keep-alive 实现

  • 特点:

    • 复用 TCP 连接

    • 减少握手挥手开销,延迟更低

    • 减轻服务器压力

  1. 核心区别
  • 短连接:一请求一连接,开销大

  • 长连接:多请求复用一个连接,高效

  1. 适用场景
  • 短连接:并发极低、一次性请求

  • 长连接:高并发、Web 网站、API 接口、移动端请求

一句话速记

短连接:一次请求一次 TCP;长连接:多次请求复用一个 TCP。

跨域、原因、解决方案

  1. 什么是跨域?

浏览器出于安全,限制一个源的 JS 去访问另一个源 的资源,只要协议、域名、端口任意一个不同,就是跨域。

  1. 为什么会跨域?

浏览器 ** 同源策略(Same-Origin Policy)** 限制:

  • 防止恶意网站窃取 Cookie、 localStorage、发送伪造请求

  • 只限制 AJAX/fetch ,不限制 <script>、<img>、<link> 等标签

  1. 如何解决跨域?(最常用)

① CORS(后端配置,最标准)

服务端设置响应头:

  • Access-Control-Allow-Origin

  • Access-Control-Allow-Methods

  • Access-Control-Allow-Headers

② 代理服务器(开发最常用)

  • Webpack DevServer proxy

  • Nginx 反向代理原理:浏览器请求同域代理 → 代理转发跨域请求,浏览器不限制后端之间请求。

③ JSONP(老方案,仅支持 GET)

利用 <script src> 不受跨域限制,后端返回函数调用。

④ Nginx 配置跨域

通过 Nginx 统一入口,转发不同服务,让浏览器看起来是同源。

⑤ postMessage

iframe / 多窗口之间跨域通信。

极简背诵版

跨域 = 协议 / 域名 / 端口不一致,受浏览器同源策略限制。 解决:CORS、代理、JSONP、Nginx、postMessage。

相关推荐
编程牛马姐10 小时前
独立站SEO流量增长:提高Google排名的优化方法
前端·javascript·网络
2401_8734794011 小时前
如何从零搭建私有化IP查询平台?数据采集、清洗、建库到API发布全流程
服务器·网络·tcp/ip
FS_Marking12 小时前
CWDM vs DWDM:区别是什么?
网络
Vis-Lin13 小时前
BLE 协议栈:ATT 协议详解
网络·物联网·网络协议·iot·ble
lcxc13 小时前
Mac M4超流畅运行Win版同花顺教程
网络
W.A委员会14 小时前
常见网络攻击
网络·http·网络安全
zmj32032414 小时前
CAN数据帧详解
网络·can·canfd·数据帧
无心水14 小时前
OpenClaw技术文档/代码评审/测试用例生成深度实战
网络·后端·架构·测试用例·openclaw·养龙虾
深蓝海拓15 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十)框架初成的阶段总结
网络·笔记·python·学习·ui·plc