一、整体认识
1. 什么是 TCP/IP 协议族
- TCP/IP 不是单指 TCP 和 IP ,而是一整套互联网协议簇
- 是当前互联网的事实标准
- 定义了计算机之间如何通信、数据如何封装、寻址、传输、路由、应用
2. TCP/IP 与 OSI 七层模型对比
表格
| OSI 七层模型 | TCP/IP 四层模型(实际用) | 核心作用 |
|---|---|---|
| 应用层 | 应用层 | HTTP、FTP、DNS、SSH 等 |
| 表示层 | (并入应用层) | 数据格式、加密、压缩 |
| 会话层 | (并入应用层) | 建立 / 管理 / 断开会话 |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网络层 | IP、ARP、ICMP、路由 |
| 数据链路层 | 网络接口层 | 以太网、MAC、帧 |
| 物理层 | (并入网络接口层) | 电气信号、光纤、网卡 |
日常开发 / 面试主流:TCP/IP 四层模型
二、TCP/IP 四层详细解析
1)网络接口层(最底层)
作用
- 负责相邻设备之间的数据传输
- 把网络层的数据包封装成帧(Frame)
- 定义电气、光信号、接口规范
核心协议 / 标准
- 以太网协议(Ethernet)
- MAC 地址:设备物理地址(48 位)
- PPP、Wi-Fi(802.11)
数据单元
帧(Frame)
2)网络层(核心层)
作用
- 主机到主机的通信
- 负责寻址、路由选择
- 定义 IP 地址,让数据包跨网络传输
核心协议
-
IP 协议(IPv4 / IPv6)
- 无连接、不可靠、尽力投递
- 负责:寻址 + 路由转发
-
ARP 协议(Address Resolution Protocol)
- IP → MAC 地址
- 局域网内通过广播获取 MAC
-
ICMP 协议(Internet Control Message Protocol)
- 用于网络诊断:
ping、traceroute - 传递错误 / 控制信息
- 用于网络诊断:
-
DHCP(应用层,但常归网络层讲)
- 自动分配 IP 地址
数据单元
数据包(Packet / IP 数据报)
3)传输层
作用
- 应用程序到应用程序的通信
- 基于端口号区分进程
- 提供可靠 / 不可靠两种传输模型
核心协议
① TCP(Transmission Control Protocol)
- 面向连接
- 可靠传输
- 字节流、全双工
- 拥塞控制、流量控制
- 面向字节流
端口范围:0~65535
- 0~1023:知名端口(HTTP:80, HTTPS:443, FTP:21, SSH:22)
- 1024~49151:注册端口
- 49152~65535:临时 / 动态端口
② UDP(User Datagram Protocol)
- 无连接
- 不可靠
- 速度快、开销小
- 面向数据报
TCP vs UDP(必背)
表格
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠(确认、重传、序号) | 不可靠 |
| 传输方式 | 字节流 | 数据报 |
| 效率 | 低 | 高 |
| 适用场景 | 文件、网页、邮件 | 直播、游戏、DNS、视频通话 |
数据单元
- TCP:段(Segment)
- UDP:数据报(Datagram)
4)应用层
作用
- 面向用户 / 应用程序
- 定义数据格式、交互规则
常见协议
- HTTP/HTTPS:网页(80/443)
- DNS:域名解析(UDP 53)
- FTP:文件传输(21)
- SSH:安全远程登录(22)
- SMTP/POP3/IMAP:邮件
- WebSocket:长连接(基于 HTTP 升级)
三、数据封装与解封装(核心流程)
1. 封装(发送方)
应用层数据↓ 加 TCP 头 / UDP 头 传输层段↓ 加 IP 头 网络层包↓ 加 以太网头 + 尾网络接口层帧→ 物理层发送比特流
2. 解封装(接收方)
物理层接收比特流→ 拆帧头帧尾 → 拆IP 头 → 拆TCP/UDP 头→ 交给对应应用程序
一句话:下层为上层提供服务,上层数据被下层层层打包。
四、IP 协议核心(IPv4)
1. IPv4 地址
- 32 位,点分十进制:
192.168.1.101 - 分为:网络位 + 主机位
2. 子网掩码
- 用来区分网络位和主机位
- 例:
255.255.255.0
3. 分类(老式)
- A 类:1~126
- B 类:128~191
- C 类:192~223
- D 类:多播
- E 类:保留
4. 私有 IP(内网)
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
5. 特殊 IP
127.0.0.1:本地回环0.0.0.0:任意地址255.255.255.255:有限广播
五、TCP 核心机制(面试爆炸点)
1. 可靠传输实现
- 序列号 + 确认号
- 超时重传
- 滑动窗口
- 流量控制
- 拥塞控制
2. 三次握手(建立连接)
目的
- 同步双方初始序列号(ISN)
- 确认双方收发能力正常
过程
- C → S:SYN=1, seq=x
- S → C:SYN=1, ACK=1, seq=y, ack=x+1
- C → S:ACK=1, seq=x+1, ack=y+1
状态变化
- Client:CLOSED → SYN_SENT → ESTABLISHED
- Server:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED
3. 四次挥手(断开连接)
双方都可以主动关闭
- A → B:FIN=1, seq=u
- B → A:ACK=1, ack=u+1
- B → A:FIN=1, seq=v
- A → B:ACK=1, ack=v+1
关键状态
- TIME_WAIT:主动关闭方最后停留
- 作用:确保对方收到最后 ACK + 防止旧报文干扰新连接
- 时间:2MSL
4. 滑动窗口
- 用来流量控制
- 接收方通过
window字段告诉发送方:你最多发多少 - 发送方窗口 = min (自身拥塞窗口,接收窗口)
5. 拥塞控制(4 阶段)
- 慢启动:指数增长
- 拥塞避免:线性增长
- 快速重传:收到 3 个重复 ACK 立即重传
- 快速恢复:降低窗口但不从头开始
六、ARP 协议(必考)
- 功能:IP → MAC
- 流程:
- 主机发送ARP 广播:谁有这个 IP?
- 目标主机单播回复 MAC
- 写入本机 ARP 缓存
七、ICMP 协议
- 用于网络探测与错误反馈
ping基于 ICMP- 可以判断:是否连通、延迟、丢包
八、DNS(应用层,但网络必考)
- 域名 → IP
- 一般用 UDP 53
- 大型查询用 TCP
- 层级:根域名 → 顶级域名 → 权威域名
九、常见面试题(直接背)
1. TCP 为什么三次握手,不是两次?
- 防止失效的连接请求报文突然又传到服务器
- 导致服务器建立无效连接,浪费资源
2. 为什么四次挥手?
- 因为 TCP 全双工
- 一方发 FIN 只是表示自己不再发数据
- 但对方可能还有数据要发,所以要分别关闭
3. TIME_WAIT 为什么是 2MSL?
- 确保最后一个 ACK 能到达对方
- 让本连接的所有报文在网络中自然消失,不影响新连接
4. TCP 粘包 / 拆包原因与解决
- 原因:TCP 是字节流,无消息边界
- 解决:
- 固定长度
- 分隔符
- 消息头 + 长度字段(最常用)
5. HTTP 属于哪一层?基于什么?
- 应用层
- 基于 TCP
6. 路由器工作在哪一层?交换机?
- 路由器:网络层(IP)
- 交换机:数据链路层(MAC)
十、极简总结
- TCP/IP 4 层:应用 → 传输 → 网络 → 网络接口
- 传输层:TCP(可靠连接)、UDP(快)
- 网络层:IP(寻址)、ARP(IP→MAC)、ICMP(ping)
- TCP 核心:三次握手、四次挥手、滑动窗口、拥塞控制
- 数据从上层到下层:层层封装 ;接收则解封装