一、OSI 七层模型
OSI(Open Systems Interconnection)将网络通信划分为七层,每层负责不同功能。
| 层级 | 名称 | 主要功能 | 常见协议或设备 | 数据单位 |
|---|---|---|---|---|
| 7 | 应用层 | 为用户应用程序提供网络服务 | HTTP、HTTPS、FTP、DNS、SMTP、SSH | 数据 |
| 6 | 表示层 | 数据格式转换、加密、压缩 | SSL/TLS、JPEG、ASCII、JSON | 数据 |
| 5 | 会话层 | 建立、管理和终止会话 | RPC、NetBIOS | 数据 |
| 4 | 传输层 | 端到端通信、可靠性、流量控制 | TCP、UDP | 段/报文段 |
| 3 | 网络层 | 逻辑寻址和路由选择 | IPv4、IPv6、ICMP、OSPF | 数据包 |
| 2 | 数据链路层 | 帧封装、MAC 寻址、差错检测 | Ethernet、ARP、PPP、VLAN | 帧 |
| 1 | 物理层 | 传输比特流和电信号 | 网线、光纤、集线器、中继器 | 比特 |
二、TCP/IP 四层模型
TCP/IP 模型是实际互联网主要采用的分层模型。
| TCP/IP 层 | 对应 OSI 层 | 主要协议 |
|---|---|---|
| 应用层 | OSI 应用层、表示层、会话层 | HTTP、DNS、FTP、SMTP、SSH |
| 传输层 | OSI 传输层 | TCP、UDP |
| 网际层 | OSI 网络层 | IP、ICMP、IGMP、路由协议 |
| 网络接口层 | OSI 数据链路层、物理层 | Ethernet、PPP、ARP、VLAN |
两种模型的关系
-
OSI 是理论参考模型,层次划分更细。
-
TCP/IP 是实际使用的协议体系,应用层合并了 OSI 的上三层。
-
TCP/IP 的网络接口层合并了 OSI 的数据链路层和物理层。
三、TCP
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠的字节流协议。
主要特点
-
面向连接:通信前必须建立连接。
-
可靠传输:通过序列号、确认、重传保证数据可靠到达。
-
字节流:TCP 不保留应用层消息边界。
-
全双工:双方可以同时发送和接收数据。
-
流量控制:通过接收窗口防止接收方缓存溢出。
-
拥塞控制:根据网络状况调整发送速率。
-
连接标识:由源 IP、源端口、目的 IP、目的端口四元组确定。
TCP 首部常见字段
-
源端口、目的端口:标识通信两端的应用程序。
-
序列号(Sequence Number):标识数据在字节流中的位置。
-
确认号(Acknowledgment Number):表示期望接收的下一个字节序号。
-
首部长度:表示 TCP 首部长度。
-
标志位:SYN、ACK、FIN、RST、PSH、URG 等。
-
接收窗口:用于流量控制。
-
校验和:检查 TCP 首部和数据是否损坏。
-
紧急指针:配合 URG 标志使用。
四、TCP 三次握手
三次握手用于建立 TCP 连接,并确认双方的发送和接收能力正常。
客户端 服务端
| ---- SYN,Seq = x --------------------> |
| <--- SYN + ACK,Seq = y,Ack = x + 1 -- |
| ---- ACK,Ack = y + 1 ----------------> |
过程
-
客户端发送 SYN,进入
SYN-SENT状态,并携带初始序列号x。 -
服务端收到 SYN 后,回复 SYN+ACK,携带自己的初始序列号
y,确认号为x+1,进入SYN-RECEIVED状态。 -
客户端发送 ACK,确认号为
y+1,双方进入ESTABLISHED状态。
为什么需要三次
-
第一次:服务端确认客户端能够发送。
-
第二次:客户端确认服务端能够接收和发送。
-
第三次:服务端确认客户端能够接收。
-
同时避免历史重复连接请求导致错误建立连接。
五、TCP 四次挥手
四次挥手用于释放 TCP 连接。TCP 是全双工的,两个方向需要分别关闭。
主动关闭方 被动关闭方
| ---- FIN,Seq = u --------------------> |
| <--- ACK,Ack = u + 1 ----------------- |
| <--- FIN,Seq = v --------------------- |
| ---- ACK,Ack = v + 1 ----------------> |
过程
-
主动关闭方发送 FIN,表示自己不再发送数据,进入
FIN-WAIT-1。 -
被动关闭方回复 ACK,连接进入半关闭状态;被动方仍可继续发送数据。
-
被动关闭方数据发送完成后发送 FIN。
-
主动关闭方回复 ACK,进入
TIME-WAIT,等待一段时间后关闭连接。
TIME-WAIT 的作用
-
确保最后一个 ACK 能够到达对端。
-
让旧连接中的延迟报文在网络中失效。
-
通常等待 2MSL(Maximum Segment Lifetime)。
RST 复位
RST 表示立即异常终止连接,例如访问未监听的端口、连接发生严重错误或应用强制关闭连接。
六、UDP
UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠的数据报协议。
主要特点
-
无需建立连接,通信开销小。
-
不保证可靠到达、不保证顺序、不自动重传。
-
保留应用层报文边界。
-
支持广播和组播。
-
传输延迟低,适合实时性要求高的业务。
-
可靠性通常由应用层自行实现。
UDP 首部
UDP 首部固定为 8 字节,包含:
-
源端口
-
目的端口
-
长度
-
校验和
七、TCP 与 UDP 对比
| 对比项 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠,有确认和重传 | 不保证可靠 |
| 数据形式 | 字节流 | 数据报 |
| 顺序保证 | 保证有序 | 不保证有序 |
| 流量控制 | 支持 | 不支持 |
| 拥塞控制 | 支持 | 不支持 |
| 广播/组播 | 不支持 | 支持 |
| 开销 | 较大 | 较小 |
| 常见应用 | Web、文件传输、邮件 | DNS、DHCP、音视频、在线游戏 |
八、常见应用层协议
| 协议 | 默认端口 | 传输层 | 主要用途 |
|---|---|---|---|
| HTTP | 80 | TCP | Web 页面和接口 |
| HTTPS | 443 | TCP | 加密 Web 通信;HTTP/3 通常基于 UDP/QUIC |
| FTP | 20/21 | TCP | 文件传输,20 用于数据,21 用于控制 |
| TFTP | 69 | UDP | 简单文件传输,常用于设备启动和配置 |
| SSH | 22 | TCP | 安全远程登录和管理 |
| Telnet | 23 | TCP | 非加密远程登录 |
| SMTP | 25、587、465 | TCP | 发送邮件 |
| POP3 | 110、995 | TCP | 下载邮件 |
| IMAP | 143、993 | TCP | 在线管理和同步邮件 |
| DNS | 53 | UDP/TCP | 域名解析;区域传送等场景使用 TCP |
| DHCP | 67/68 | UDP | 自动分配 IP、网关和 DNS |
| SNMP | 161/162 | UDP | 网络设备监控和管理 |
| NTP | 123 | UDP | 网络时间同步 |
| LDAP | 389、636 | TCP | 目录服务和身份查询 |
九、IP 报文
IPv4 首部主要字段
IPv4 首部最小长度为 20 字节,带选项时最长为 60 字节。
-
版本:IPv4 的值为 4。
-
首部长度(IHL):表示首部长度,单位为 4 字节。
-
服务类型/DSCP:用于服务质量和优先级标记。
-
总长度:IP 首部和数据部分的总长度,最大 65535 字节。
-
标识、标志、片偏移:用于分片和重组。
-
生存时间(TTL):每经过一个三层设备通常减 1,为 0 时丢弃。
-
协议:标识上层协议,例如 TCP、UDP、ICMP。
-
首部校验和:只校验 IPv4 首部。
-
源 IP 地址、目的 IP 地址。
-
选项和填充:可选字段。
IPv6 的主要变化
-
地址长度从 32 位增加到 128 位。
-
首部固定为 40 字节,结构更简洁。
-
使用 Hop Limit 代替 TTL。
-
没有首部校验和。
-
分片由源主机通过扩展首部完成,中间路由器通常不分片。
十、协议号与端口号
协议号
协议号位于 IP 首部,用于标识 IP 数据部分承载的上层协议。它不是端口号。
| 协议号 | 协议 | 说明 |
|---|---|---|
| 1 | ICMP | 网络控制和差错报告 |
| 2 | IGMP | IPv4 组播成员管理 |
| 6 | TCP | 可靠传输 |
| 17 | UDP | 无连接数据报传输 |
| 41 | IPv6 | IPv6 over IPv4 |
| 47 | GRE | 通用路由封装 |
| 50 | ESP | IPsec 加密封装 |
| 51 | AH | IPsec 认证头 |
| 89 | OSPF | 链路状态路由协议 |
端口号
端口号位于 TCP 或 UDP 首部,用于标识具体应用进程。
-
端口范围为 0~65535。
-
0~1023:知名端口,通常由系统服务使用。
-
1024~49151:注册端口,供应用程序注册使用。
-
49152~65535:动态或临时端口,通常由客户端自动分配。
协议号与端口号的区别
IP 首部:协议号 = 6 -> 表示承载 TCP
TCP 首部:目的端口 = 443 -> 表示交给 HTTPS 服务
-
协议号解决"交给哪一种传输或控制协议"。
-
端口号解决"交给该协议上的哪一个应用程序"。
-
IP 地址定位主机,端口号定位主机上的进程。
十一、数据封装与解封装
发送端数据经过逐层封装:
应用数据
-> TCP 段 / UDP 报文
-> IP 数据包
-> Ethernet 帧
-> 比特流
接收端按照相反顺序逐层解封装:
比特流
-> 帧
-> IP 数据包
-> TCP 段 / UDP 报文
-> 应用数据
十二、重点记忆
-
OSI 七层是理论模型,TCP/IP 四层是实际网络协议体系。
-
TCP 可靠但开销较大;UDP 快速但可靠性由应用层负责。
-
三次握手建立 TCP 连接,四次挥手释放 TCP 连接。
-
SYN用于建立连接,ACK用于确认,FIN用于正常关闭,RST用于异常复位。 -
IP 首部的协议号标识上层协议,TCP/UDP 首部的端口号标识应用进程。
-
IPv4 的 TCP 协议号是 6,UDP 协议号是 17,ICMP 协议号是 1。
-
常见链路:DNS 使用 53,HTTP 使用 80,HTTPS 使用 443,SSH 使用 22,DHCP 使用 67/68。