技术知识文章集合TECHNICAL ARCHIVE · 457 DOCUMENTS

显示模式

登录
ARCHIVE DOCUMENTNET

面试时,你被问到过 TCP/IP 协议吗?

所属馆藏
NET Protocol
文件格式
Markdown
原始路径
NET Protocol/38-面试时,你被问到过 TCP IP 协议吗
本文目录12 个章节
  1. 1.1 TCP/IP 四层模型
  2. 4.1 IPv4 和 IPv6
  3. 4.2 IPv4 地址与 CIDR
  4. 4.3 网络地址、主机地址和广播地址
  5. 4.4 地址解析协议 ARP
  6. 4.5 子网与子网掩码
  7. 5.1 TCP 与 UDP
  8. 5.2 TCP 和 UDP 的对比
  9. 6.1 常见运行在 TCP 之上的协议
  10. 6.2 常见运行在 UDP 之上的协议
  11. 6.3 其他协议
  12. 参考资料

面试时,你被问到过 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 相关链路操作

TCP/IP 四层模型

不同教材也会采用五层模型,把网络接口层拆成数据链路层和物理层。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)。

TCP/IP 数据封装示意图

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

TCP/IP 数据解封装示意图

需要注意:路由器通常只会去掉收到的链路层帧,读取 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 位,取值范围是 0255。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,保留或实验用途。

按照首个十进制数,历史上大致可以这样判断:

  • 1126:传统 A 类范围,但其中有特殊地址;
  • 128191:传统 B 类范围;
  • 192223:传统 C 类范围;
  • 224239:D 类组播;
  • 240255:E 类或特殊保留范围。

IPv4 历史分类地址示意图

不过,现代网络已经普遍使用 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 历史分类与子网示意图

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

IPv4 子网掩码示意图

“子网 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 的对比

特性TCPUDP
连接面向连接无连接
数据模型字节流,没有消息边界数据报,保留边界
可靠性提供确认、重传和排序不保证可靠到达
流量控制无 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 提供轻量的无连接数据报服务。

参考资料

原文作者博客:blog.csdn.net/yulyu

457 DOCUMENTS · 10 COLLECTIONS
ARCHIVE SEARCH457 篇文章

SEARCH GUIDE

输入关键词开始搜索

支持搜索文章标题、所属分类和原始文档路径。

按分类浏览

10 COLLECTIONS