面试时,你被问到过 TCP/IP 协议吗?
Category(分类): NET Protocol Status: 优
1. 什么是 TCP/IP?
TCP/IP 不是只包含 TCP 和 IP 两个协议,而是一组用于网络通信的协议族(protocol suite)。TCP 和 IP 是其中最核心、最常见的协议,因此人们通常用 TCP/IP 泛指这一整套互联网协议。
1.1 TCP/IP 四层模型
传统上,TCP/IP 常被抽象为四层:
| TCP/IP 层 | 主要职责 | 常见协议或技术 |
|---|---|---|
| 应用层 | 为应用程序提供网络服务和数据格式 | HTTP、DNS、DHCP、SMTP、SSH |
| 传输层 | 在主机之间向具体进程提供传输服务 | TCP、UDP、SCTP |
| 网际层 | IP 寻址、路由和数据包转发 | IPv4、IPv6、ICMP、IGMP |
| 网络接口层 | 在本地链路上传输帧和比特 | Ethernet、Wi-Fi、ARP 相关链路操作 |

不同教材也会采用五层模型,把网络接口层拆成数据链路层和物理层。OSI 七层模型则是另一种更细的理论划分。模型的目的主要是帮助理解职责边界,真实协议不一定严格对应某一层。
1)网络接口层
网络接口层大致对应 OSI 模型的数据链路层和物理层,负责在相邻节点之间传输数据,常见内容包括:
- 以太网、无线局域网等链路技术;
- MAC 地址和帧格式;
- 链路层差错检测;
- 网卡、网线、光纤和无线信号等物理介质。
因此,网络接口层不只是“电缆”等物理设备,也包含数据链路协议和帧的处理。
2)网际层
网际层提供独立于具体硬件的逻辑寻址、路由和数据包转发,使数据能够跨越多个网络到达目标主机。
TCP/IP 协议族中常见的网际层或网络控制协议包括:
- IP(Internet Protocol,网际协议);
- ICMP(Internet Control Message Protocol,互联网控制报文协议);
- IGMP(Internet Group Management Protocol,互联网组管理协议)。
IP 负责尽力而为地传递数据报,但不保证数据一定到达、按序到达或只到达一次。可靠性主要由 TCP 或应用层协议提供。
IP 地址与 MAC 地址之间的解析通常由 ARP(IPv4)或 IPv6 Neighbor Discovery(NDP)完成,不能简单说成网际层负责“物理地址与逻辑地址的转换”。
3)传输层
传输层负责把主机之间的数据交付给目标主机上的具体进程,端口号是其中的重要组成部分。
常见传输协议包括:
- TCP:面向连接、可靠、有序的字节流;
- UDP:无连接、面向数据报的尽力而为传输;
- SCTP:支持多流和多宿主等能力;
- QUIC:运行在 UDP 之上,提供可靠传输、多路复用和连接迁移等能力,HTTP/3 使用 QUIC。
流量控制、重传、确认和拥塞控制主要是 TCP 的能力,不能笼统地归于所有传输层协议。
4)应用层
应用层直接为应用程序提供网络服务、数据格式和交互语义,包含网页浏览、域名解析、文件传输、邮件、远程登录、时间同步等协议。
2. 数据封装与解封装
在发送数据时,数据通常从应用层向下传递;在接收数据时,再从网络接口层逐层向上处理。这个过程分别称为封装(encapsulation)和解封装(decapsulation)。
封装过程中,每个协议层可能在上层数据外增加自己的控制信息,例如首部、尾部或标签:
应用层数据
↓ 添加 TCP/UDP 首部
TCP 段 / UDP 数据报
↓ 添加 IP 首部
IP 数据报
↓ 添加链路层首部和尾部
链路层帧
各层数据单元通常可以称为:
- 应用层:数据(data);
- 传输层:TCP 段(segment)或 UDP 数据报(datagram);
- 网际层:IP 数据报(packet/datagram);
- 网络接口层:帧(frame)。

接收端会根据目标协议逐层检查并移除相应的首部或尾部,将有效载荷交给上一层。这个过程有点像俄罗斯套娃,因此也常用俄罗斯套娃来形容协议封装:

需要注意:路由器通常只会去掉收到的链路层帧,读取 IP 首部并根据路由表转发,再为下一条链路重新封装链路层帧;它不会把整个端到端 TCP 或应用层数据完全拆开后再转发。
3. 网络接口层
网络接口层主要负责相邻网络节点之间的数据传输,例如以太网和无线局域网。它通常处理:
- 帧的封装和解析;
- 本地链路地址,例如 MAC 地址;
- 链路层广播和组播;
- 帧校验和碰撞或介质访问控制;
- 将帧转换为物理介质上的信号。
MAC 地址只在相应链路或局域网范围内发挥作用。跨越路由器后,链路层帧通常会重新封装,源 MAC 和目的 MAC 也可能发生变化;IP 源地址和目的地址通常保持端到端的逻辑意义,但 NAT 等设备可能修改地址。
4. 网际层
网际层主要负责 IP 寻址、路由选择和数据包转发。
4.1 IPv4 和 IPv6
目前常见的 IP 版本包括:
- IPv4:地址长度为 32 位,例如
192.168.0.1; - IPv6:地址长度为 128 位,例如
2001:db8::1。
IPv4 地址通常写成四段十进制数,每段 8 位,取值范围是 0 到 255。IPv6 地址空间更大,并提供了不同的地址配置和邻居发现机制。
一个网络接口不一定只有一个 IP 地址,也不一定拥有全球唯一地址。它可能同时拥有私有地址、链路本地地址、临时地址和多个 IPv6 地址。私有 IPv4 地址还可以在不同局域网中重复使用。
4.2 IPv4 地址与 CIDR
早期 IPv4 使用 A、B、C 类地址进行分类网络划分:
- A 类:首位为
0,传统默认前缀为/8; - B 类:前两位为
10,传统默认前缀为/16; - C 类:前三位为
110,传统默认前缀为/24; - D 类:
224.0.0.0/4,用于组播; - E 类:
240.0.0.0/4,保留或实验用途。
按照首个十进制数,历史上大致可以这样判断:
1到126:传统 A 类范围,但其中有特殊地址;128到191:传统 B 类范围;192到223:传统 C 类范围;224到239:D 类组播;240到255:E 类或特殊保留范围。

不过,现代网络已经普遍使用 CIDR(Classless Inter-Domain Routing,无类别域间路由)和前缀长度,例如:
192.168.1.0/24
10.0.0.0/8
172.16.0.0/12
现代网络中,网络部分和主机部分由前缀长度或子网掩码决定,而不是由 A、B、C 类固定决定。A/B/C 类地址更适合作为历史背景,不应作为现代网络规划的主要方法。
4.3 网络地址、主机地址和广播地址
在某个具体的 IPv4 子网中,通常可以把地址分成网络前缀和主机部分:
- 主机部分全为
0,通常表示网络地址; - 主机部分全为
1,通常表示该子网的定向广播地址; - 其他主机部分表示可分配给主机的地址,但还要遵循具体网络的保留规则。
例如,在明确使用 130.100.0.0/16 时:
网络地址:130.100.0.0
广播地址:130.100.255.255
这里的结论依赖 /16 前缀。如果使用其他子网掩码,网络地址和广播地址可能不同。并不是所有网络都允许使用定向广播,很多设备会默认禁用它以降低广播攻击风险。
IPv4 的 255.255.255.255 是受限广播地址,用于当前本地网络,不能简单理解为某个普通子网的定向广播地址。
以十进制 127 开头的整个 127.0.0.0/8 都是 IPv4 环回地址。目的地址为环回地址的数据由本机协议栈处理,不会通过真实网卡发送,常用地址是 127.0.0.1。IPv6 的环回地址是 ::1。
4.4 地址解析协议 ARP
ARP(Address Resolution Protocol,地址解析协议)用于在 IPv4 局域网中,把下一跳 IPv4 地址解析为链路层 MAC 地址。
例如,主机要向同一局域网中的 192.168.1.20 发送数据,但不知道对方的 MAC 地址,就会通过 ARP 请求查询。若目标主机位于其他网络,主机通常解析默认网关的 MAC 地址,然后把 IP 数据包交给网关转发。
需要注意:
- ARP 只解决本地链路的下一跳解析,不负责跨互联网路由;
- ARP 不适用于 IPv6,IPv6 使用 Neighbor Discovery Protocol(NDP);
- RARP(Reverse ARP)曾用于根据 MAC 获取 IP,但现在基本被 BOOTP、DHCP 等机制取代;
- ARP 可能受到 ARP 欺骗攻击,实际网络可以使用静态绑定、交换机安全功能或加密协议降低风险。
4.5 子网与子网掩码
传统分类网络中,A 类和 B 类网络的主机数量可能非常大。例如,100.0.0.0/8 的地址空间包含大量地址,直接作为一个广播域并不现实,也不利于管理。
子网划分就是把一个较大的地址块划分为多个更小的网络。现代网络使用前缀长度或子网掩码表示网络部分。
以历史上的 A 类地址 99.10.10.10 为例,如果明确配置为 /8:
网络前缀:99
主机部分:10.10.10
网络地址:99.0.0.0/8
但如果配置为 /24,结果就会不同:
IP 地址:192.168.1.130/24
网络地址:192.168.1.0
广播地址:192.168.1.255
主机范围:192.168.1.1 - 192.168.1.254
因此,不能只根据 IP 地址的历史类别判断网络部分,必须结合子网掩码或 CIDR 前缀。

IPv4 子网掩码是 32 位数,用 1 表示网络前缀,用 0 表示主机部分,并且标准子网掩码中的 1 通常必须连续出现在左侧:
255.255.255.0 = /24
11111111.11111111.11111111.00000000
将 IP 地址与子网掩码进行按位与运算,可以得到网络地址:
192.168.1.130
AND 255.255.255.0
= 192.168.1.0

“子网 IP”不是一个足够准确的术语,实际应区分网络前缀、网络地址、主机地址、广播地址和可分配地址范围。
5. 传输层
传输层不是负责“到达目标网络”,那是网际层的主要工作。传输层主要负责把数据交付给目标主机上的具体进程,通常通过端口号实现。
5.1 TCP 与 UDP
TCP(Transmission Control Protocol)
TCP 是面向连接、可靠、有序的字节流协议,主要提供:
- 三次握手和连接状态管理;
- 序列号和确认号;
- 超时重传;
- 按序交付和重复数据处理;
- 接收窗口和流量控制;
- 拥塞控制;
- 半关闭和连接释放。
TCP 的“可靠”是指协议会尽力通过重传和排序等机制提供可靠字节流,并不代表网络或应用业务一定成功。
UDP(User Datagram Protocol)
UDP 是无连接、面向数据报的协议,主要特点是:
- 不需要建立连接;
- 保留应用数据报边界;
- 头部开销较小;
- 不保证可靠到达、按序到达或不重复;
- 不提供 TCP 那样的重传、流量控制和拥塞控制。
UDP 具有校验和能力,但校验和主要用于检测传输错误,不负责恢复丢失的数据。IPv4 中 UDP 校验和在传统规范下可以为零,IPv6 中通常要求使用校验和。
UDP 长度字段为 16 位,理论上整个 UDP 数据报最大为 65535 字节,扣除 UDP 首部后,IPv4 的有效载荷通常不超过 65507 字节。但实际发送还会受到 MTU、路径分片和网络设备限制,通常不建议发送接近 64K 的 UDP 数据报。
5.2 TCP 和 UDP 的对比
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 数据模型 | 字节流,没有消息边界 | 数据报,保留边界 |
| 可靠性 | 提供确认、重传和排序 | 不保证可靠到达 |
| 流量控制 | 有 | 无 TCP 式流量控制 |
| 拥塞控制 | 有 | 协议本身没有统一的 TCP 式拥塞控制 |
| 适用场景 | HTTP/1.1、HTTP/2、文件传输、邮件 | DNS、DHCP、音视频、实时通信等 |
不能简单说 UDP 一定比 TCP 快,或者 TCP 一定比 UDP 慢。实际性能取决于网络质量、数据大小、应用协议、重传机制、拥塞控制和实现方式。
TCP 也不是“数据大小无限制”。TCP 是连续字节流,应用可以持续写入较多数据,但实际会受到序列号空间、接收窗口、拥塞窗口、socket 缓冲区、MSS 和 MTU 等限制。TCP 会把数据拆分为多个 TCP 段传输。
6. 应用层
应用层是 TCP/IP 模型中最接近应用程序的一层,负责定义应用之间交换的数据格式和交互语义。
6.1 常见运行在 TCP 之上的协议
- HTTP/1.1:超文本传输协议,常用于 Web;
- HTTP/2:通常运行在 TCP 之上;
- HTTPS:HTTP over TLS,即运行在 TLS 之上的 HTTP,现代系统使用 TLS 1.2 或 TLS 1.3;
- FTP:文件传输协议,通常包含控制连接和数据连接;
- POP3:邮局协议第 3 版,用于收取邮件;
- SMTP:简单邮件传输协议,用于发送和转发邮件;
- TELNET:远程终端协议,明文传输,安全性较差;
- SSH:安全远程登录和远程操作协议,常用于替代 TELNET。
HTTP/3 不运行在 TCP 之上,而是运行在 QUIC 之上,QUIC 使用 UDP 作为底层传输。
6.2 常见运行在 UDP 之上的协议
- BOOTP:早期的启动配置协议;
- NTP:网络时间协议;
- DHCP:动态主机配置协议,通常使用 UDP 67/68 端口;
- DNS:传统查询通常优先使用 UDP,但在特定情况下也会使用 TCP。
6.3 其他协议
- DNS(Domain Name System,域名系统):用于域名解析和邮件服务器查找;
- DNS over TLS(DoT):运行在 TLS 之上的 DNS;
- DNS over HTTPS(DoH):通过 HTTPS 传输 DNS 查询;
- ECHO:回显协议,用于测试和测量响应时间,现已较少使用;
- SNMP:简单网络管理协议,传统上主要使用 UDP,也存在其他传输方式。
ARP 不属于应用层协议,它主要用于 IPv4 局域网中的下一跳地址解析。ICMP 和 IGMP 也通常归入网际层或网络控制协议,而不是应用层。
总结
TCP/IP 是一组协议族,常用四层模型进行理解:
- 网络接口层负责相邻节点之间的帧和物理传输;
- 网际层负责 IP 寻址、路由和数据包转发;
- 传输层负责进程之间的 TCP/UDP 等传输;
- 应用层负责 HTTP、DNS、DHCP 等应用协议。
数据发送时通常从应用层向下封装,接收时从网络接口层向上解封装。现代网络已经使用 CIDR 进行无类别寻址,A/B/C 类地址主要作为历史概念了解。ARP 负责 IPv4 局域网中的地址解析,IPv6 使用 NDP;TCP 提供可靠有序的字节流,UDP 提供轻量的无连接数据报服务。
参考资料
- RFC 791:Internet Protocol
- RFC 8200:Internet Protocol, Version 6
- RFC 4632:Classless Inter-domain Routing
- RFC 826:An Ethernet Address Resolution Protocol
- RFC 768:User Datagram Protocol
- RFC 9293:Transmission Control Protocol
原文作者博客:blog.csdn.net/yulyu