Administrator
Administrator
发布于 2026-04-09 / 6 阅读
0
0

TCP/IP 参考模型

TCP/IP 模型是互联网的“操作系统”,它定义了数据如何在网络中从一台设备传输到另一台设备。

一、为什么需要 TCP/IP 模型?

20 世纪 70 年代,各种计算机网络使用不同的硬件和协议,就像不同国家说不同的语言,无法互通。美国国防部高级研究计划局(ARPA)希望建立一个能够容忍部分网络被摧毁(比如核战争)的通信网络。于是他们设计了 TCP/IP 协议族,核心思想是:

  1. 分组交换:数据切割成小包,各自寻找路径传输。

  2. 端到端原则:中间网络只管转发,纠错和可靠由端系统负责。

  3. 统一的网络层:所有网络都通过 IP 协议互联。

后来 TCP/IP 成为互联网的标准,而 OSI 七层模型因为过于复杂,实际中很少完全实现。


二、TCP/IP 模型的层次结构

TCP/IP 通常描述为 四层模型,但为了与物理媒体更好对接,教学中常使用 五层模型。我们采用五层模型(从上到下):

层次

名称

主要功能

数据单元

常见协议/设备

5

应用层

提供应用程序网络服务,如网页、邮件、文件传输

报文

HTTP, HTTPS, SMTP, FTP, DNS, SSH

4

传输层

端到端的可靠/不可靠传输,端口寻址,流量控制

段(TCP)/ 数据报(UDP)

TCP, UDP

3

网络层

跨网络寻址和路由,定义 IP 地址

包(数据报)

IP, ICMP, ARP*, 路由器

2

数据链路层

相邻节点间帧传输,MAC 地址,差错检测

以太网, Wi-Fi, PPP, 交换机

1

物理层

比特流在物理介质上的传输,电气/光学特性

比特

网线, 光纤, 无线, 集线器

*ARP 协议有时被认为介于网络层和数据链路层之间。


三、逐层详细解析 + 生活案例 + 技术细节

第 1 层:物理层

核心职责

  • 把二进制比特(0/1)转换成物理信号(电压高低、光脉冲、无线电波频率)。

  • 定义连接器的形状、引脚排列、线缆材质、传输速率、最大传输距离。

  • 不关心数据内容,只关心比特的“搬运”。

常见介质与编码

  • 双绞线(网线):用差分电压表示比特,例如 +2.5V 表示 1,-2.5V 表示 0。

  • 光纤:有光脉冲表示 1,无光表示 0。

  • Wi-Fi:通过调制无线电波的幅度或相位来编码比特。

现实案例:插网线下载电影

当你把网线插入电脑网口,物理层负责:

  1. 网线中的 8 根铜线按照 T568B 标准排列。

  2. 网卡内部的 PHY 芯片将内存中的比特流转换成曼彻斯特编码或 PAM5 信号,施加到网线上。

  3. 对端交换机接收到电压变化,还原成比特流。

如果网线长度超过 100 米,信号衰减严重,物理层会出现“比特错误”——但物理层不会重传,它只负责把坏比特交给上层。

关键设备

  • 中继器:放大信号,延长传输距离。

  • 集线器:多端口的中继器,收到信号就广播到所有端口(已淘汰)。

  • 网卡:实现物理层和数据链路层功能。


第 2 层:数据链路层

核心职责

  • 把物理层的比特组织成(Frame),每一帧有明确的开始和结束。

  • 使用 MAC 地址(48 位,如 00:1A:2B:3C:4D:5E)标识同一局域网内的设备。

  • 提供差错检测(CRC 校验),如果帧损坏就丢弃。

  • 控制对物理介质的访问(CSMA/CD 用于以太网,CSMA/CA 用于 Wi-Fi)。

帧的结构(以以太网为例)

前导码

帧开始符

目的 MAC

源 MAC

类型/长度

数据(IP 包)

填充

CRC

  • 前导码:7 字节,10101010 交替,用于同步时钟。

  • 帧开始符:1 字节,10101011,标志帧正式开始。

  • MAC 地址:如 AA:BB:CC:DD:EE:FF

  • 类型:0x0800 表示上层是 IP 协议。

  • CRC:循环冗余校验,如果计算出的校验和与帧尾不一致,则丢弃帧。

现实案例:局域网内传文件

假设两台电脑通过交换机连接:

  • 电脑 A 想发送一个文件给电脑 B。A 的数据链路层把网络层传来的 IP 包封装成帧,目的 MAC 填 B 的 MAC 地址。

  • 交换机收到帧,查看目的 MAC,查找自己的 MAC 地址表,只转发到 B 所在的端口。

  • B 收到帧,检查 CRC 正确,剥掉帧头帧尾,把 IP 包交给网络层。

如果 A 不知道 B 的 MAC 地址怎么办?它会在局域网内广播一个 ARP 请求(“谁拥有 IP 192.168.1.2?请告诉我你的 MAC”),B 回复自己的 MAC。ARP 协议工作在数据链路层与网络层之间。

关键设备

  • 交换机:根据 MAC 地址表转发帧,隔离冲突域。

  • 网桥:连接两个局域网段。

  • 无线 AP:把有线帧转换成无线帧。


第 3 层:网络层

核心职责

  • 跨网络路由:把数据包从源 IP 地址送到目的 IP 地址,可能经过多个路由器。

  • 定义 IP 地址(IPv4 32 位,IPv6 128 位)。

  • 分片与重组:如果数据包太大,超过下一跳链路的 MTU,就拆分成多个小包,到达目的地后再重组。

  • 错误报告:使用 ICMP 协议报告不可达、超时等。

IP 数据报格式(IPv4)

版本

首部长度

服务类型

总长度

标识

标志

片偏移

生存时间(TTL)

协议

首部校验和

源 IP 地址

目的 IP 地址

选项(可选)

数据(TCP/UDP 段)

  • TTL:每经过一个路由器减 1,变为 0 时丢弃,防止循环。

  • 协议:6 表示 TCP,17 表示 UDP,1 表示 ICMP。

现实案例:访问国外网站

你的电脑 IP 是 192.168.1.100(私有地址),路由器做了 NAT 转换,公网 IP 为 203.0.113.5。你想访问 93.184.216.34

  1. 网络层封装 IP 数据报:源 IP = 203.0.113.5,目的 IP = 93.184.216.34。

  2. 你的路由器查路由表,发现下一跳是 ISP 网关(如 202.96.128.86)。

  3. 数据报经过多个路由器,每个路由器只查看目的 IP,转发给下一跳。

  4. 最终到达目的服务器,服务器回复时,源/目的 IP 互换。

路由协议

路由器之间通过 OSPFBGP 等协议动态交换路由信息,形成路由表。

关键设备

  • 路由器:连接不同网络,根据 IP 地址转发数据包。

  • 三层交换机:具备路由功能的交换机。


第 4 层:传输层

核心职责

  • 提供端到端的通信,即从发送方的一个进程到接收方的一个进程

  • 使用端口号(16 位,0-65535)区分不同进程。

    • 知名端口:HTTP 80,HTTPS 443,SSH 22,DNS 53。

    • 注册端口:1024-49151。

    • 动态端口:49152-65535,通常客户端使用。

  • 两个核心协议:TCP 和 UDP。

TCP(传输控制协议)

  • 面向连接:通信前必须建立连接(三次握手)。

  • 可靠:使用序列号、确认号、重传机制保证数据完整、有序。

  • 流量控制:滑动窗口机制,避免接收方被淹没。

  • 拥塞控制:慢启动、拥塞避免、快重传、快恢复,防止网络过载。

TCP 段格式

源端口

目的端口

序列号

确认号

数据偏移

保留

标志位(SYN, ACK, FIN, RST, PSH, URG)

窗口大小

校验和

紧急指针

选项

数据

  • 标志位

    • SYN:同步序列号,用于建立连接。

    • ACK:确认号有效。

    • FIN:关闭连接。

    • RST:重置连接。

三次握手与四次挥手
  • 三次握手

    1. 客户端发送 SYN(seq=x)。

    2. 服务器回复 SYN+ACK(seq=y, ack=x+1)。

    3. 客户端发送 ACK(seq=x+1, ack=y+1)。

  • 四次挥手

    1. 主动关闭方发送 FIN。

    2. 被动方回复 ACK。

    3. 被动方发送 FIN。

    4. 主动方回复 ACK。

UDP(用户数据报协议)

  • 无连接:直接发送,不建立连接。

  • 不可靠:不保证到达,不重传,不排序。

  • 轻量:只有 8 字节头部(源端口、目的端口、长度、校验和)。

  • 适用于实时性要求高的场景:视频会议、在线游戏、DNS 查询。

现实案例:浏览网页 vs 直播

  • 浏览网页:浏览器使用 TCP 连接 Web 服务器。TCP 把 HTTP 请求分割成段,编号,发送。服务器收到后确认。如果某一段丢失,TCP 会重传。保证你看到的网页是完整的。

  • 观看直播:播放器使用 UDP 接收视频流。服务器持续发送 UDP 数据报,可能丢包。播放器直接渲染收到的数据,丢失的包就出现短暂花屏或卡顿,但不会因为等待重传而延迟增加。

端口的作用

  • 当你访问网站时,你的浏览器随机占用一个临时端口(如 54321),目的端口是 80(HTTP)。服务器响应时,源端口 80,目的端口 54321,你的传输层就知道这是给哪个浏览器进程的数据。


第 5 层:应用层

核心职责

  • 为应用程序提供网络服务接口。

  • 定义具体的数据格式和通信规则(协议)。

  • 常见的应用层协议:

协议

用途

端口

传输层

HTTP/HTTPS

网页浏览

80/443

TCP

SMTP

发送邮件

25

TCP

POP3/IMAP

接收邮件

110/143

TCP

FTP

文件传输

20,21

TCP

DNS

域名解析

53

UDP(也支持TCP)

SSH

安全远程登录

22

TCP

现实案例:访问百度

  1. DNS 查询:浏览器调用 gethostbyname(),应用层构造 DNS 请求报文(域名 www.baidu.com),交给传输层(UDP 发送到 DNS 服务器的 53 端口)。DNS 服务器返回 IP 地址 110.242.68.66

  2. HTTP 请求:浏览器构造 HTTP GET 请求报文,包含请求行(GET /index.html HTTP/1.1)、头部(Host: www.baidu.com)、空行、可选消息体。

  3. 数据通过 TCP 发送。

  4. 服务器返回 HTTP 响应报文,包含状态行(200 OK)、头部、HTML 正文。

  5. 浏览器解析 HTML,可能继续请求 CSS、JS、图片(每个都需要新的 HTTP 请求,但可以用同一个 TCP 连接复用——HTTP/1.1 的 keep-alive 或 HTTP/2 的多路复用)。

应用层与表示层、会话层的合并

  • 表示层功能:加密(HTTPS 中的 TLS)、压缩(Gzip)、数据格式转换(XML/JSON)通常放在应用层内部实现。

  • 会话层功能:断点续传、会话恢复往往由应用层协议自己实现(如 FTP 的 REST 命令,HTTP 的 Range 头)。


四、完整的数据传输旅程:从输入网址到看到页面

假设你的电脑(IP 192.168.1.100,MAC AA:AA:AA:AA:AA:01)通过家庭路由器(公网 IP 203.0.113.5)访问 http://www.example.com(IP 93.184.216.34)。

步骤 1:应用层——生成 HTTP 请求

  • 浏览器确定需要访问 www.example.com,首先进行 DNS 解析(为了简洁,假设 hosts 文件已缓存 IP)。

  • 构造 HTTP 请求报文:

    text

    GET / HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0 ...
    (空行)

步骤 2:传输层——TCP 封装

  • HTTP 报文交给 TCP,TCP 添加源端口(随机 54321)和目的端口(80)。

  • 与服务器建立 TCP 连接(三次握手):

    1. 发送 SYN 段(seq=1000)。

    2. 接收 SYN+ACK(seq=5000, ack=1001)。

    3. 发送 ACK(seq=1001, ack=5001)。

  • 连接建立后,发送 HTTP 数据段:序列号 1001,数据为 HTTP 请求。

步骤 3:网络层——IP 封装

  • TCP 段交给 IP 层,添加 IP 头部:源 IP = 203.0.113.5(经过 NAT 转换),目的 IP = 93.184.216.34。

  • 检查路由表:默认网关是路由器内网 IP 192.168.1.1,所以下一跳 MAC 地址需要知道。

  • 使用 ARP 获得网关的 MAC(假设已缓存)。

步骤 4:数据链路层——以太网帧封装

  • IP 数据报交给以太网驱动,添加以太网帧头:源 MAC = AA:AA:AA:AA:AA:01,目的 MAC = 路由器 MAC BB:BB:BB:BB:BB:01

  • 添加帧尾 CRC。

步骤 5:物理层——发送比特

  • 网卡将帧的比特转换成电信号,发送到网线上。

步骤 6:路由器转发

  • 路由器收到帧,检查 CRC 正确,剥去帧头,取出 IP 包。

  • 查看目的 IP 93.184.216.34,查询路由表,发现出口是 WAN 口。

  • 将 IP 包重新封装成新的帧(源 MAC 改为路由器 WAN 口 MAC,目的 MAC 改为 ISP 下一跳路由器 MAC),发送到互联网。

步骤 7:经过多个路由器

  • 每个路由器重复上述过程,TTL 递减,最终到达 93.184.216.34 的服务器。

步骤 8:服务器接收并回复

  • 服务器从物理层向上解封装,最终得到 HTTP 请求。

  • 服务器生成 HTTP 响应,按照同样的封装过程发回你的电脑。

步骤 9:你的浏览器接收并渲染

  • 收到 HTTP 响应,解析 HTML,可能请求 CSS、JS、图片等。

  • 最终显示网页。


五、TCP/IP 模型的关键设计原则

  1. 分层独立:每一层只关心自己的职责,不依赖上下层的实现细节。例如你可以把以太网换成 Wi-Fi,IP 层和 TCP 层完全无感知。

  2. 封装:每一层在数据前加上自己的头部,就像快递包裹不断加包装。

  3. 端到端原则:可靠性由传输层(TCP)保证,中间网络节点只做尽力转发。这简化了路由器,增强了网络的鲁棒性。

  4. 沙漏模型:IP 层是中间的“细腰”,所有上层协议都封装在 IP 中,所有下层协议都承载 IP。正是这种统一使得互联网能够互联异构网络。


六、常见问题深入解析

Q1:为什么有时候 ping 不通但网页能打开?

  • ping 使用 ICMP 协议,如果防火墙禁用了 ICMP,就会超时。但 HTTP 使用 TCP 80 端口,可能被放行。所以两者不能互相替代。

Q2:什么是 MTU?如何影响传输?

  • 最大传输单元(MTU)是数据链路层能承载的最大 IP 包大小,以太网通常是 1500 字节。如果 IP 包超过 1500,网络层会分片。但分片会降低效率,所以 TCP 会进行 MSS(最大段大小)协商,主动将 TCP 段控制在 MTU 以内。

Q3:NAT 是如何工作的?

  • NAT(网络地址转换)将私有 IP(如 192.168.x.x)映射到公网 IP。路由器维护一个转换表,记录内网 IP:端口 与 公网 IP:端口的对应关系。当公网回复时,路由器根据转换表把数据包送给内网正确的主机。

Q4:为什么有时下载速度慢?可能涉及哪一层?

  • 物理层:信号差、网线老化。

  • 数据链路层:Wi-Fi 冲突严重,CRC 错误多。

  • 网络层:路由路径长、丢包导致 TCP 重传。

  • 传输层:TCP 拥塞控制启动,窗口变小。

  • 应用层:服务器限速、HTTP 连接数限制。


七、总结表:每一层的核心关注点

问的问题

忽略的问题

应用层

数据是什么格式?用户请求了什么?

数据如何到达?

传输层

数据是否完整到达?顺序对不对?

数据经过哪些路由器?

网络层

数据应该往哪个方向走?

数据是否在局域网内?

数据链路层

数据如何通过相邻节点?

数据是否跨网络?

物理层

如何用物理信号表示比特?

数据是否有意义?


评论