TCP/IP 模型总览
TCP/IP 模型是现实中广泛使用的网络模型,共四层,对应 OSI 七层模型如下:
|-----------|-------------|--------------------|
| TCP/IP 层级 | 对应 OSI 层级 | 功能 |
| 应用层 | 应用层、表示层、会话层 | 提供网络服务(如 HTTP、DNS) |
| 传输层 | 传输层 | 提供主机间端到端传输(如 TCP) |
| 网络层 | 网络层 | 路由转发、逻辑寻址(如 IP) |
| 网络接口层 | 数据链路层 + 物理层 | 实际数据的物理传输 |
TCP/IP 四层详解
🔹 1. 应用层(Application Layer)
- 作用:直接面向用户,提供网络应用服务。
- 常见协议:
|------------|---------------|
| 协议 | 功能说明 |
| HTTP(S) | 超文本传输协议(网页访问) |
| FTP | 文件传输协议 |
| SMTP | 邮件发送 |
| POP3/IMAP | 邮件接收 |
| DNS | 域名解析 |
| Telnet/SSH | 远程登录 |
- 示例:HTTP
-
- 请求方法:GET、POST、PUT、DELETE...
- 状态码:200 OK、301 重定向、404 未找到、500 服务器错误
- 无状态协议,可以用 Cookie/Session 保持状态
🔹 2. 传输层(Transport Layer)
- 作用:实现端到端通信,提供数据传输的可靠性或效率保证。
TCP(Transmission Control Protocol)
- 面向连接,可靠传输(有顺序、有确认、无重复)
- 三次握手建立连接,四次挥手断开连接
- 流量控制:接收窗口机制
- 拥塞控制:慢启动、拥塞避免、快重传、快恢复
三次握手(建立连接):
- 客户端发送 SYN(同步)报文
- 服务端返回 SYN-ACK
- 客户端回复 ACK,连接建立
四次挥手(断开连接):
- 客户端发送 FIN,表示要关闭连接
- 服务端回复 ACK,确认收到
- 服务端也发送 FIN
- 客户端再发 ACK,连接彻底关闭
UDP(User Datagram Protocol)
- 无连接,不可靠,但开销小、速度快
- 适用于:DNS、视频直播、语音通话、游戏等实时性强场景
- 没有拥塞控制、流量控制机制
🔹 3. 网络层(Internet Layer)
- 作用:实现不同主机/网络之间的数据转发和逻辑寻址。
IP(Internet Protocol)
- 提供逻辑地址(IP地址),实现主机间路由转发
- IPv4:32位地址,如 192.168.1.1
- IPv6:128位,解决地址不足问题
- 是不可靠、无连接的协议,依赖上层 TCP 保证可靠性
ICMP(Internet Control Message Protocol)
- 网络诊断/错误信息反馈协议
- 如:
ping
命令底层就是 ICMP Echo 请求
ARP(Address Resolution Protocol)
- IP <--> MAC 地址解析
- 局域网中使用广播询问"谁是这个 IP",目标主机回应 MAC 地址
🔹 4. 网络接口层(Link Layer)
- 作用:负责物理地址的寻址和局域网内数据帧的传输
- 包括物理传输介质、网卡驱动、MAC 层协议等
- 常见协议:
-
- Ethernet(以太网)
- Wi-Fi(无线局域网)
- 数据封装为帧(Frame) ,使用 MAC 地址作为硬件标识
TCP/IP 安全相关
- 嗅探攻击:截获明文数据包(尤其是 HTTP)
- ARP欺骗:局域网内伪造 MAC 地址进行中间人攻击
- IP欺骗:伪造 IP 地址进行攻击(如 SYN Flood)
- 防护方法:
-
- 使用 HTTPS(TLS 加密)
- 使用防火墙过滤端口
- 进行子网隔离、防ARP攻击等
三次握手
三次握手目的:
建立可靠连接,确保双方通信能力正常,序列号同步
三次握手的过程:
- 第一次握手 :客户端向服务端发送一个带有
SYN
标志位的数据包,请求建立连接,同时随机产生一个初始序列号seq = x
。 - 第二次握手 :服务端收到该请求后,确认客户端的 SYN(即
ACK = x + 1
),并向客户端发送自己的 SYN 报文段,携带初始序列号seq = y
。 - 第三次握手 :客户端收到服务端的 SYN + ACK 报文后,再次发送 ACK 报文,确认连接建立(
ACK = y + 1
)。
连接建立后,客户端与服务端即可开始数据传输。
三次握手的原因:
- 防止历史连接请求导致服务端资源浪费(如延迟或伪造的 SYN 导致的半连接)
- 确保客户端和服务端收发能力正常
- 确保双方的初始序列号互相确认,为后续可靠传输打基础
四次挥手
四次挥手目的:
可靠关闭连接,确保双方都已完成数据传输
四次挥手的过程:
- 第一次挥手 :客户端发送
FIN
报文,请求关闭连接。 - 第二次挥手 :服务端确认收到该报文,发送
ACK
报文,但此时可能还有数据未发送完毕。 - 第三次挥手 :服务端数据发送完毕后,也发送一个
FIN
报文,请求断开连接。 - 第四次挥手 :客户端确认收到服务端的
FIN
报文,发送ACK
报文,连接彻底关闭。
客户端在发送最终 ACK 后,通常会进入 TIME_WAIT
状态,等待 2 倍的最大报文生存时间(MSL),防止失效报文影响后续连接。
四次挥手的原因:
- TCP 是全双工协议,双方都需要显式关闭自己的发送通道
- 服务端可能仍需发送数据,因此 ACK 和 FIN 分开发送更灵活可靠
TIME_WAIT
阶段可确保旧连接中的延迟报文不会影响新的连接建立