TCP/IP 四层模型
一、模型概述
TCP/IP 四层模型是互联网的基础架构模型,自下而上分为四层:网络接口层、网络层、传输层、应用层。每一层负责不同的功能,通过逐层封装的方式实现端到端的网络通信。
四层结构图
┌─────────────────────────────────────────────────────┐
│ 应用层 │
│ HTTP, HTTPS, DNS, FTP, SSH │
├─────────────────────────────────────────────────────┤
│ 传输层 │
│ TCP, UDP │
├─────────────────────────────────────────────────────┤
│ 网络层 │
│ IP, ICMP, ARP │
├─────────────────────────────────────────────────────┤
│ 网络接口层 │
│ 以太网, WiFi │
└─────────────────────────────────────────────────────┘OSI 七层和 TCP/IP 四层怎么对应
很多教材会同时讲 OSI 七层模型 和 TCP/IP 四层模型。面试里如果被问到这两个模型,最好不要只会背名字,而是顺手把它们的对应关系说出来。
OSI 七层模型
自上而下分别是:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP 四层模型
自上而下分别是:
- 应用层
- 传输层
- 网络层
- 网络接口层
两者的对应关系
| OSI 七层 | TCP/IP 四层 | 说明 |
|---|---|---|
| 应用层、表示层、会话层 | 应用层 | TCP/IP 把和应用交互相关的能力合并了 |
| 传输层 | 传输层 | 负责端到端进程通信 |
| 网络层 | 网络层 | 负责 IP 寻址和路由 |
| 数据链路层、物理层 | 网络接口层 | 负责局域网传输和物理介质接入 |
为什么实际工作中更常用 TCP/IP 四层
因为 TCP/IP 更贴近真实互联网协议栈。比如:
- HTTP、DNS、SSH 这些协议直接就能放到应用层
- TCP、UDP 直接放到传输层
- IP、ICMP、ARP 放到网络层
- 以太网、WiFi 放到网络接口层
所以在面试或工作里,OSI 更适合理解抽象分层思想,TCP/IP 更适合描述真实协议落位。
生活类比
可以把网络通信想象成寄快递:
- 应用层:你写的信件内容("明天下午3点开会")
- 传输层:信封上写的收件人姓名("收发室张三收")
- 网络层:快递单上的地址("北京市海淀区XX路XX号")
- 网络接口层:快递员的交接单("先送到济南中转站")
二、网络接口层
网络接口层的实际场景
当你用网线把电脑插到路由器上,或者手机连上家里的 WiFi,这个物理连接和数据传输就是网络接口层在工作。你能看到的网卡、网线、WiFi 信号,都属于这一层的范畴。
网络接口层的核心职责
网络接口层负责在相邻设备之间传输数据。比如你的电脑和路由器之间、路由器和光猫之间。它把上层的 IP 数据包封装成「帧」,通过网卡发送出去,接收方的网卡再把帧还原成 IP 包交给上层。
MAC 地址
这一层使用 MAC 地址进行寻址。每一块网卡出厂时都被烧录了一个全球唯一的 MAC 地址,格式如 00:1A:2B:3C:4D:5E。
实际操作:在 Mac/Linux 终端输入 ifconfig,在 Windows 输入 ipconfig /all,可以看到你电脑网卡的 MAC 地址。
重要概念:MAC 地址只在局域网内有效
假设你在上海,要访问北京的百度服务器。你的电脑不知道百度服务器的 MAC 地址,也不需要知道。你只需要知道家里路由器的 MAC 地址,把数据包交给路由器就行了。路由器会帮你一站一站传下去,直到送达北京的百度机房。
你的电脑 ──→ 家庭路由器 ──→ 小区路由器 ──→ ... ──→ 百度服务器
每一跳,MAC 地址都会变:
第1跳: 源MAC=你电脑, 目标MAC=家庭路由器
第2跳: 源MAC=家庭路由器, 目标MAC=小区路由器
第N跳: 源MAC=百度机房路由器, 目标MAC=百度服务器网络接口层的典型设备
网卡:安装在电脑里,负责收发数据帧。无线网卡负责 WiFi 通信,有线网卡支持网线连接。
交换机:办公室里常见的设备,多个电脑通过网线连接到交换机,交换机根据 MAC 地址表把数据帧转发到正确的端口。
| 项目 | 内容 |
|---|---|
| 职责 | 在物理介质上传输数据帧 |
| 地址 | MAC 地址(48位硬件地址) |
| 数据单元 | 帧(Frame) |
| 协议 | 以太网、WiFi |
| 设备 | 网卡、交换机、集线器 |
三、网络层
网络层的实际场景
当你在浏览器输入 www.baidu.com,数据包需要穿过无数个网络(家庭网络→运营商网络→骨干网→百度机房)才能到达目的地。决定「走哪条路」「下一站去哪」的,就是网络层。
网络层的核心职责
IP 地址
这一层使用 IP 地址进行寻址。IPv4 地址是 32 位,写成点分十进制如 192.168.1.100。IP 地址分为网络号和主机号,通过子网掩码区分。
实际操作:在终端输入 curl ifconfig.me 可以看到你的公网 IP 地址。
IP 与 MAC 的本质区别
IP 地址像是你家的门牌地址「北京市海淀区XX路10号」,快递单上写的就是这个地址,从发货到签收都不会变。
MAC 地址像是快递中转站之间的交接凭证。从上海发往北京的快递,第一段是「上海站→济南站」,第二段变成「济南站→北京站」,每一段的交接信息都不一样。
传输过程中:
┌────────────────────────────────────────┐
│ IP头:源=你的IP, 目标=百度的IP │ ← 始终不变
├────────────────────────────────────────┤
│ MAC头:源=当前设备, 目标=下一跳设备 │ ← 每跳都换
└────────────────────────────────────────┘ARP 协议
当你的电脑知道要访问 192.168.1.1(路由器),但不知道路由器的 MAC 地址时,会发送 ARP 广播请求:「谁是 192.168.1.1?把你的 MAC 地址告诉我」。路由器收到后会回复自己的 MAC 地址。
实际操作:在终端输入 arp -a 可以看到电脑缓存的 IP→MAC 映射表。
网络层的典型设备
| 项目 | 内容 |
|---|---|
| 职责 | 跨网络路由寻址 |
| 地址 | IP 地址 |
| 数据单元 | 包/数据报(Packet) |
| 协议 | IP、ICMP、ARP |
| 设备 | 路由器 |
核心协议
| 协议 | 作用 | 实际例子 |
|---|---|---|
| IP | 寻址和路由 | 决定数据包走哪条路 |
| ICMP | 网络诊断 | ping 命令就是用它 |
| ARP | IP→MAC 解析 | 知道 IP 问 MAC |
四、传输层
传输层的实际场景
一台服务器可能同时运行着 Web 服务(端口 80)、SSH 服务(端口 22)、数据库服务(端口 3306)。当数据包到达服务器后,操作系统怎么知道这个包该交给哪个程序?答案是通过端口号,这就是传输层的工作。
传输层的核心职责
端口号
端口号是 16 位整数,范围 0-65535。可以把 IP 地址想象成一栋大楼的地址,端口号就是大楼里具体的房间号。
实际操作:在终端输入 netstat -an | head -20 可以看到当前电脑的网络连接和端口使用情况。
TCP 和 UDP
这是传输层最重要的两个协议,它们的区别就像打电话和发短信:
TCP(传输控制协议)像打电话:
- 要先拨号等对方接听(三次握手建立连接)
- 通话过程中能确认对方有没有听清(确认应答)
- 听不清会让对方重说一遍(超时重传)
- 挂电话时要互相说再见(四次挥手关闭连接)
UDP(用户数据报协议)像发短信:
- 写完直接发,不用等对方回应
- 发出去就完事了,不管对方收没收到
- 速度快,适合实时视频、游戏这种「丢几帧无所谓」的场景
TCP(可靠但慢) UDP(快速但不可靠)
┌────────────────┐ ┌────────────────┐
│ 需要三次握手 │ │ 无需建立连接 │
│ 保证数据到达 │ │ 不保证到达 │
│ 保证数据顺序 │ │ 不保证顺序 │
│ 头部 20-60 字节 │ │ 头部仅 8 字节 │
└────────────────┘ └────────────────┘
适用:HTTP、文件下载 适用:视频直播、游戏常见端口号
| 端口 | 服务 | 说明 |
|---|---|---|
| 80 | HTTP | 网页浏览 |
| 443 | HTTPS | 加密网页 |
| 22 | SSH | 远程登录 |
| 3306 | MySQL | 数据库 |
| 6379 | Redis | 缓存 |
| 项目 | 内容 |
|---|---|
| 职责 | 端到端进程通信 |
| 地址 | 端口号(0-65535) |
| 数据单元 | 段(Segment) |
| 协议 | TCP、UDP |
五、应用层
应用层的实际场景
当你在浏览器访问 https://www.baidu.com,浏览器会按照 HTTP 协议的规定构造请求(GET /index.html HTTP/1.1),百度服务器也按照 HTTP 协议的规定返回响应(200 OK + 网页内容)。这些「应用程序之间的对话规则」就是应用层协议。
应用层的核心职责
常见协议
HTTP/HTTPS:你每天浏览网页用的就是它。在浏览器地址栏输入网址,浏览器就会发送 HTTP 请求获取网页内容。HTTPS 是加密版本,网址前面是 https://。
DNS:你输入 www.baidu.com,电脑需要知道百度服务器的 IP 地址才能访问。DNS 服务就像电话簿,帮你把域名翻译成 IP 地址。
SSH:程序员远程登录服务器用的协议。在终端输入 ssh user@192.168.1.100 就是通过 SSH 连接。
FTP:传统的文件传输协议,用来在电脑和服务器之间上传下载文件。
| 协议 | 用途 | 使用的传输层 |
|---|---|---|
| HTTP | 网页浏览 | TCP |
| HTTPS | 加密网页 | TCP |
| DNS | 域名解析 | UDP(主) |
| SSH | 远程登录 | TCP |
| FTP | 文件传输 | TCP |
| 项目 | 内容 |
|---|---|
| 职责 | 为应用程序提供网络服务 |
| 数据单元 | 消息/报文(Message) |
六、数据封装过程
当你发送一个 HTTP 请求,数据会像穿衣服一样一层层「套上」协议头:
发送过程(自顶向下,逐层加头):
应用层:产生 HTTP 请求
│
▼ 传输层添加 TCP 头(源端口、目标端口、序列号)
┌───────┬──────────────────────────────┐
│ TCP头 │ HTTP 请求数据 │
└───────┴──────────────────────────────┘
│
▼ 网络层添加 IP 头(源IP、目标IP、TTL)
┌──────┬───────┬───────────────────────┐
│ IP头 │ TCP头 │ HTTP 请求数据 │
└──────┴───────┴───────────────────────┘
│
▼ 链路层添加帧头帧尾(源MAC、目标MAC、校验)
┌─────┬──────┬───────┬──────────────┬─────┐
│帧头 │ IP头 │ TCP头 │ HTTP 数据 │帧尾 │
└─────┴──────┴───────┴──────────────┴─────┘接收过程正好相反:从链路层开始,逐层剥掉协议头,最终应用程序拿到原始的 HTTP 数据。
七、各层速查表
| 层级 | 解决什么问题 | 地址 | 数据单元 | 典型设备 |
|---|---|---|---|---|
| 应用层 | 应用程序怎么对话 | URL | 消息 | - |
| 传输层 | 交给哪个进程 | 端口号 | 段 | - |
| 网络层 | 送到哪台机器 | IP地址 | 包 | 路由器 |
| 接口层 | 下一跳给谁 | MAC地址 | 帧 | 交换机 |
八、常见面试题
Q1: 为什么需要分层?
解耦、标准化、可替换、便于开发。每层专注自己的职责,比如换个网卡不影响上层应用。
Q2: IP 地址和 MAC 地址的区别?
IP 是逻辑地址,标识最终目的地,传输全程不变;MAC 是物理地址,标识下一跳设备,每经过路由器就换。
Q3: TCP 和 UDP 的区别?
TCP 面向连接、可靠、保证顺序,适合网页和文件;UDP 无连接、快速、不可靠,适合视频和游戏。
