TCP/IP 模型是互联网的“操作系统”,它定义了数据如何在网络中从一台设备传输到另一台设备。
一、为什么需要 TCP/IP 模型?
20 世纪 70 年代,各种计算机网络使用不同的硬件和协议,就像不同国家说不同的语言,无法互通。美国国防部高级研究计划局(ARPA)希望建立一个能够容忍部分网络被摧毁(比如核战争)的通信网络。于是他们设计了 TCP/IP 协议族,核心思想是:
分组交换:数据切割成小包,各自寻找路径传输。
端到端原则:中间网络只管转发,纠错和可靠由端系统负责。
统一的网络层:所有网络都通过 IP 协议互联。
后来 TCP/IP 成为互联网的标准,而 OSI 七层模型因为过于复杂,实际中很少完全实现。
二、TCP/IP 模型的层次结构
TCP/IP 通常描述为 四层模型,但为了与物理媒体更好对接,教学中常使用 五层模型。我们采用五层模型(从上到下):
*ARP 协议有时被认为介于网络层和数据链路层之间。
三、逐层详细解析 + 生活案例 + 技术细节
第 1 层:物理层
核心职责
把二进制比特(0/1)转换成物理信号(电压高低、光脉冲、无线电波频率)。
定义连接器的形状、引脚排列、线缆材质、传输速率、最大传输距离。
不关心数据内容,只关心比特的“搬运”。
常见介质与编码
双绞线(网线):用差分电压表示比特,例如 +2.5V 表示 1,-2.5V 表示 0。
光纤:有光脉冲表示 1,无光表示 0。
Wi-Fi:通过调制无线电波的幅度或相位来编码比特。
现实案例:插网线下载电影
当你把网线插入电脑网口,物理层负责:
网线中的 8 根铜线按照 T568B 标准排列。
网卡内部的 PHY 芯片将内存中的比特流转换成曼彻斯特编码或 PAM5 信号,施加到网线上。
对端交换机接收到电压变化,还原成比特流。
如果网线长度超过 100 米,信号衰减严重,物理层会出现“比特错误”——但物理层不会重传,它只负责把坏比特交给上层。
关键设备
中继器:放大信号,延长传输距离。
集线器:多端口的中继器,收到信号就广播到所有端口(已淘汰)。
网卡:实现物理层和数据链路层功能。
第 2 层:数据链路层
核心职责
把物理层的比特组织成帧(Frame),每一帧有明确的开始和结束。
使用 MAC 地址(48 位,如
00:1A:2B:3C:4D:5E)标识同一局域网内的设备。提供差错检测(CRC 校验),如果帧损坏就丢弃。
控制对物理介质的访问(CSMA/CD 用于以太网,CSMA/CA 用于 Wi-Fi)。
帧的结构(以以太网为例)
前导码: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:每经过一个路由器减 1,变为 0 时丢弃,防止循环。
协议:6 表示 TCP,17 表示 UDP,1 表示 ICMP。
现实案例:访问国外网站
你的电脑 IP 是 192.168.1.100(私有地址),路由器做了 NAT 转换,公网 IP 为 203.0.113.5。你想访问 93.184.216.34。
网络层封装 IP 数据报:源 IP = 203.0.113.5,目的 IP = 93.184.216.34。
你的路由器查路由表,发现下一跳是 ISP 网关(如
202.96.128.86)。数据报经过多个路由器,每个路由器只查看目的 IP,转发给下一跳。
最终到达目的服务器,服务器回复时,源/目的 IP 互换。
路由协议
路由器之间通过 OSPF、BGP 等协议动态交换路由信息,形成路由表。
关键设备
路由器:连接不同网络,根据 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:重置连接。
三次握手与四次挥手
三次握手:
客户端发送 SYN(seq=x)。
服务器回复 SYN+ACK(seq=y, ack=x+1)。
客户端发送 ACK(seq=x+1, ack=y+1)。
四次挥手:
主动关闭方发送 FIN。
被动方回复 ACK。
被动方发送 FIN。
主动方回复 ACK。
UDP(用户数据报协议)
无连接:直接发送,不建立连接。
不可靠:不保证到达,不重传,不排序。
轻量:只有 8 字节头部(源端口、目的端口、长度、校验和)。
适用于实时性要求高的场景:视频会议、在线游戏、DNS 查询。
现实案例:浏览网页 vs 直播
浏览网页:浏览器使用 TCP 连接 Web 服务器。TCP 把 HTTP 请求分割成段,编号,发送。服务器收到后确认。如果某一段丢失,TCP 会重传。保证你看到的网页是完整的。
观看直播:播放器使用 UDP 接收视频流。服务器持续发送 UDP 数据报,可能丢包。播放器直接渲染收到的数据,丢失的包就出现短暂花屏或卡顿,但不会因为等待重传而延迟增加。
端口的作用
当你访问网站时,你的浏览器随机占用一个临时端口(如 54321),目的端口是 80(HTTP)。服务器响应时,源端口 80,目的端口 54321,你的传输层就知道这是给哪个浏览器进程的数据。
第 5 层:应用层
核心职责
为应用程序提供网络服务接口。
定义具体的数据格式和通信规则(协议)。
常见的应用层协议:
现实案例:访问百度
DNS 查询:浏览器调用
gethostbyname(),应用层构造 DNS 请求报文(域名www.baidu.com),交给传输层(UDP 发送到 DNS 服务器的 53 端口)。DNS 服务器返回 IP 地址110.242.68.66。HTTP 请求:浏览器构造 HTTP GET 请求报文,包含请求行(
GET /index.html HTTP/1.1)、头部(Host: www.baidu.com)、空行、可选消息体。数据通过 TCP 发送。
服务器返回 HTTP 响应报文,包含状态行(
200 OK)、头部、HTML 正文。浏览器解析 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 连接(三次握手):
发送 SYN 段(seq=1000)。
接收 SYN+ACK(seq=5000, ack=1001)。
发送 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 = 路由器 MACBB: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 模型的关键设计原则
分层独立:每一层只关心自己的职责,不依赖上下层的实现细节。例如你可以把以太网换成 Wi-Fi,IP 层和 TCP 层完全无感知。
封装:每一层在数据前加上自己的头部,就像快递包裹不断加包装。
端到端原则:可靠性由传输层(TCP)保证,中间网络节点只做尽力转发。这简化了路由器,增强了网络的鲁棒性。
沙漏模型: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 连接数限制。