更多特训营笔记详见个人主页【面试鸭特训营】专栏
250114
1. TCP/IP 四层模型是什么?
- TCP/IP四层模型是一个基于实际网络通信的分层协议模型,主要用于描述互联网通信协议的体系结构。
- 它将网络通信过程分为四个层次,分别为:网络接口层、互联网层(网络层)、传输层、应用层。
网络接口层
- 负责在计算机和网络硬件之间传输数据。
- 负责在物理网络上发送和接受数据帧,包括以太网、Wi-Fi 等协议。
- 典型协议
- Ethernet(以太网)
- PPP(点对点协议)
- ARP(地址解析协议)
互联网层(网络层)
- 负责将数据包从源地址传递到目标地址。
- 通过 IP 协议提供数据包和路由的转发。
- 实现不同网络之间的数据传输和路由选择。
- 典型协议
- IP(互联网协议)
- IPv4(IP协议第4版)
- IPv6(IP协议第6版)
- ICMP(互联网控制消息协议)
- IGMP(互联网组管理协议)
- IP(互联网协议)
传输层
- 负责在两个主机之间提供端到端的数据传输服务(通信服务)。
- 负责数据的分段、传输和重组,确保数据可靠性。
- 典型协议
- TCP(传输控制协议)
- 面向连接,提供可靠的数据传输。
- UDP(用户数据报协议)
- 面向无连接,提供快速但不可靠的数据传输。
- TCP(传输控制协议)
应用层
- 通过各种协议提供网络应用程序的功能。
- 为用户提供应用程序接口,直接与用户交互,支持网络应用程序和服务的实现。
- 典型协议
- HTTP/HTTPS(超文本传输协议/安全超文本传输协议)
- FTP(文件传输协议)
- SMTP(简单邮件传输协议)
- DNS(域名系统)
- SSH(安全外壳协议)
分层的优点
- 简化设计与实现
- 通过将网络功能分解为不同的层,每一层只负责特定的任务,且只和相邻的上下层进行交互,简化了设计和实现的复杂性。
- 模块化
- 每一层可以独立发展和优化,不同层次之间通过标准接口记性通信,便于各层的更新和替换。
- 互操作性
- 明确定义每个层次之间的接口和协议,不同厂商或组织开发的网络设备和软件可以相互兼容,使得不同的网络设备和系统能够在不同的层次上进行无缝互操作,提升了网络的兼容性。
- 故障隔离
- 每个层次都有自己的错误检测、纠错和恢复机制,且分层结构能够帮助网络工程师定位问题所在的层次,从而更快地进行故障排除。
应用层主要包头信息和单位
- 包头信息主要字段
- HTTP:
Host
(目标主机)、User-Agent
(客户端类型)、Content-Length
(内容长度)等。 - DNS:
Transaciton ID
(事务 ID )、Flags
(标识符)、Query / Response
(查询 / 标识响应)等。
- HTTP:
- 数据单位
- 数据(Data)
传输层主要包头信息和单位
- 包头信息主要字段
- TCP:
Source Port
(源端口)、Destination Port
(目的端口)、Sequence Number
(序列号)、Acknowledgment Number
(确认号)、Flags
(控制标志)等。 - UDP:
Source Port
(源端口)、Destination Port
(目的端口)、Length
(数据包长度)、Checksum
(校验和)等。
- TCP:
- 数据单位
- 报文段(Segment)
网络层主要包头信息和单位
- 包头信息主要字段
- IP :
Source IP Address
(源 IP 地址)、Destination IP Address
(目的 IP 地址)、TTL
(生存时间)、Protocol
(上层协议类型)等。
- IP :
- 数据单位
- 数据包(Packet)
网络接口层主要包头信息和单位
- 包头信息主要字段
- 以太网 :
Source MAC Address
(源 MAC 地址)、Destination MAC Address
(目的 MAC 地址)、Type
(上层协议类型)等。
- 以太网 :
- 数据单位
- 帧(Frame)
2. Cookie、Session、Token 之间有什么区别?
Cookie
- 存储位置:存储在客户端(浏览器)。
- 数据格式:键值对,最大大小约为4KB。
- 生命周期
- 会话Cookie:浏览器关闭后失效。
- 持久Cookie:设置
Expires
或Max-Age
后可长期存储。
- 安全性
- 可设置
HttpOnly
标记,防止JavaScript访问。 - 可设置
Secure
标记,仅通过HTTPS传输。
- 可设置
- 作用域:可设置
Domain
和Path
限定适用范围。 - 主要用途:
- 存储用户偏好设置(如主题、语言)。
- 保持用户登录状态、跟踪用户行为。
- 保存会话标识符(如
Session ID
)以维持用户会话。
Session
- 存储位置:数据存储在服务器端,客户端只存储一个
Session ID
(通常通过Cookie传递)。 - 数据管理:会话数据存储在服务器内存或数据库中。
- 生命周期:通常与用户会话绑定,用户关闭浏览器或Session超时后失效。
- 安全性:比Cookie更安全,敏感数据不会暴露给客户端。
- 依赖Cookie:通过Cookie传递
Session ID
,无Cookie时可通过URL参数传递。 - 典型用途
- 服务器端会话状态管理。
- 存储用户的临时状态信息(如购物车、登录状态等)。
Token
- 存储位置:通常存储在客户端(浏览器的本地存储或会话存储,也可以通过Cookie传递)。
- 数据格式:常用
JWT(JSON Web Token)
,由Header、Payload和Signature组成。 - 自包含性:Token自身包含认证信息,无需依赖服务器存储会话状态(即无状态)。
- 安全性
- 加密性:可签名或加密,防止篡改。
- 不应直接暴露敏感信息。
- 生命周期
- Access Token(短生命周期)。
- Refresh Token(用于刷新Access Token,有较长生命周期)。
- 典型用途
- 无状态认证和授权。
- 分布式系统中的用户认证和授权。
表格对比
特性 | Cookie | Session | Token |
---|---|---|---|
存储位置 | 客户端 (浏览器) | 服务器端 (Session ID在客户端) | 客户端 (可选:Cookie或LocalStorage) |
存储数据 | 小量数据(4KB) | 任意复杂数据 | 编码后的认证信息 |
状态管理 | 无状态 | 有状态 | 无状态 |
安全性 | 易被劫持 (需配合安全措施) | 更安全 | 相对安全 (需保护Token不泄露) |
适用场景 | 用于保存用户偏好设置、Session ID、记住登录状态等小型数据 小型数据存储、标识用户 客户端状态的简单存储和跟踪 | 用于需要存储用户状态的场景,比如购物车、短期登录会话 短期用户会话 服务器端的复杂状态管理 特别是需要存储大量会话数据时 | 分布式认证、API接口调用无状态的认证和授权 特别是在分布式和跨域环境下 |
3. 从网络角度来看,用户从输入网址到网页显示,期间发生了什么?
- 浏览器解析 URL
- 浏览器会解析 URL ,根据请求信息生成对应的 HTTP 请求报文。
- DNS 解析
- 请求需要知晓浏览器对应的 IP 地址才能通信。
- 浏览器会先检查本地缓存、操作系统缓存、路由器缓存
- 如果命中 IP 缓存,则直接使用。
- 如果未命中 IP 缓存,浏览器向配置的 DNS 服务器发送查询请求, DNS 服务器递归查询,最终返回 IP 地址(如
192.0.2.1
)。
- TCP 或 UDP
- 浏览器会调用 Socket 库委托协议栈工作,根据指定的情况选择 TCP 或 UDP 。
- 如果使用 TCP ,需要通过三次握手与服务端建立连接,然后才能发送数据。
- 此时得到了封装了 HTTP 数据的 TCP 数据包。
- IP
- 在 TCP 数据包的基础上,再封装源地址 IP 和目标地址 IP 等信息,得到网络包。
- 有了 IP 就能在多个网络节点中确定数据包的传输路径,最终能找到目标服务器。
- MAC
- 得到网络包之后,需要在 IP 头部的前面加上 MAC 头部,封装发送方 MAC 地址。
- MAC 用来确保子网内设备两点之间的通信寻址(IP 是多个网络节点的传输寻址)。
- 网卡
- 这时,网络包还是存储在内存中的二进制数据。
- 网卡把二进制数据转换为电信号,通过网线进行传输。
- 交换机
- 通过网线会连接到交换机,交换机是二层网络设备。
- 交换机工作在 MAC 层,它会根据数据包中的 MAC 头找到另一个设备连接在交换机的哪个端口,然后传输。
- 如果找不到对应的端口,则会向交换机上的除源端口外的所有端口广播。
- 路由器
- 路由器是三层网络设备(包含 IP 层),也是用于进行转发。
- 利用路由器,数据在不同网络节点之间转发,最后到达服务器。
- 层层验证
- 服务器确认 MAC 地址匹配、 IP 地址匹配。
- 如果是 TCP 协议,就看看序列号是否匹配,若匹配根据端口找到对应的监听进程,此时服务器上对应的应用就接收到了数据。
- 服务器处理
- 服务器在收到请求后,处理响应的业务逻辑,生成 HTTP 响应。
- 这期间可能涉及到读取数据库、访问文件系统等。
- 最终会生成响应给客户端(一层层的封装 TCP 、 IP 、 MAC 等头部数据,得到最终传输的数据包),从网卡到交换机到路由器…
- 浏览器接收响应并渲染页面
- 经过多个路由器的转发后,浏览器最终会接收到服务器响应的数据,进行页面渲染。