目录
网络体系结构是指为实现网络功能而建立的、由一系列规则、标准和方法的集合。它定义了网络的层次结构、接口和服务,帮助不同系统间实现互操作。
为什么需要体系结构? 在主机间通信中,涉及硬件、软件、协议等多方面问题。体系结构将复杂问题模块化,便于设计、实现和标准化。
基本原则:分层、模块化、服务定义
历史背景:早期网络如 ARPANET 推动了标准化。1974 年,IBM 提出 SNA(Systems Network Architecture),这是第一个商用网络体系结构。随后,ISO 开发了 OSI 参考模型,IETF 则推动了 TCP/IP 模型的实际应用。
分层:将整个网络功能分解成多个独立层,每层只负责特定任务。数据从高层(应用相关)逐层向下封装,经过网络传输后,又从低层逐层向上解封装。层与层之间像黑盒子,上层只知道下层提供的服务,不关心内部实现。
模块化:每个层像一个独立模块,可以单独设计、测试、实现和替换。模块间通过标准接口交互,确保即插即用。
服务定义:明确规定每层向上层提供的服务,包括什么功能、接口如何调用,以及数据如何传递。服务用原语定义,确保上层能可靠调用下层。
体系结构 = 分层 + 每层功能 + 层间接口 + 同层对等体的协议
体系结构是抽象蓝图
实体是在某台计算机上运行、落实该层功能的具体软件/硬件模块
协议约定了同层实体如何通信
服务是对上层可见的能力
接口/SAP 是相邻两层交互的“接头”
计算机网络体系结构的形成
IBM 的 SNA → OSI 的提出
1974 年 IBM 推出 SNA(System Network Architecture),是早期的大型机网络体系结构,但属于封闭标准,不同厂商互不兼容
1977 年 ISO 成立工作组,设计了一个全球通用的开放标准 → OSI 参考模型(OSI/RM)
1983 年,OSI 模型正式发布,成为国际标准 ISO 7498,也叫 OSI 七层模型
开放的意思:任何厂商都能遵循这个标准互联
IBM:International Business Machines Corporation(国际商业机器公司)
ISO:International Organization for Standardization(国际标准化组织)
OSI:Open Systems Interconnection(开放系统互联)
OSI VS TCP/IP
虽然 OSI 是官方国际标准,但最后失败了,而 TCP/IP 成功了,成为事实上的国际标准。原因:
OSI 失败原因:
专家缺少实际经验,缺乏商业动力
协议太复杂,效率低
制定周期太长,设备来不及进入市场
层次划分不合理,功能重叠
TCP/IP 成功原因:
运行在互联网中,已经大规模成功应用
简单高效,部署快
被称为事实上的国际标准,虽然不是法律意义上的国际标准
OSI 和 TCP/IP 的关系
OSI:理论体系,更偏学术
TCP/IP:实践体系,主导互联网发展
现在学 OSI 是为了理解分层思想,实际应用更多用 TCP/IP
TCP/IP 全称 Transmission Control Protocol / Internet Protocol(传输控制协议 / 互联网协议)。它不是单一协议,而是一套协议家族,像一个工具箱,定义了互联网的数据传输规则。从 ARPANET 演化而来,现在是全球网络的核心。
为什么叫 TCP/IP?
TCP:确保数据可靠到达(分段、重传、拥塞控制)
IP:负责邮寄数据包(分组交换,无连接)
分段:TCP 把大块应用数据(如网页 10KB)拆分成小段(Segment),每个段加 TCP 头(20 字节,包括序号、确认号)。为什么?IP 层有 MTU(Maximum Transmission Unit,最大传输单元,通常 1500 字节),大数据直接发容易碎。
重传:TCP 用序号(Sequence Number)标记每个段,接收端发确认(ACK)。如果超时无 ACK,发送端重传丢包。
拥塞控制:网络“堵车”时,TCP 自动减速发送,避免雪上加霜。
分组交换:数据分成小包(Packet)独立发送,每包带地址(IP 头)。路由器根据地址动态路由,包可走不同路径,到达后重组。不像电路交换(电话线全程独占),分组交换共享链路,高效利用带宽。
无连接:IP 不建立连接,每个包独立发(尽力而为,Best Effort)。无握手、无状态跟踪,丢包/乱序靠上层(TCP)处理。
TCP vs IP 的互补关系
TCP 可靠,但复杂(分段 + 重传 + 拥塞 → 慢但稳)
IP 简单,但不可靠(分组 + 无连接 → 快但可能丢)
结合:TCP over IP(基于 IP 协议的 TCP 协议) = 可靠互联网传输
协议与划分层次
网络协议是什么?
在计算机网络中,数据交换必须遵循一些约定好的规则,这些规则就叫网络协议。
协议包含三个要素:
语法:数据的格式(长啥样)
语义:要做什么动作、如何响应
同步:动作发生的时序(什么时候做)
例子:你要和别人对话 → 约定语言(语法)、听懂并作答(语义)、说话的先后顺序(同步)
为什么需要分层?
传文件需要很多细节:文件准备、报文交换、网络接口、错误处理……
如果所有功能都混在一起,系统太复杂。
所以我们把大问题拆成小问题:每层只做一类功能,上层用下层提供的服务
这就是分层的思想。
分层的三个例子
第一层:文件传送
主机直接传文件 → 太复杂
第二层:通信服务模块
新增一层,负责可靠通信,上层只管发文件
第三层:网络接入模块
再加一层,负责和网络打交道
这样,每一层都有明确的功能,上层不需要管底层怎么实现
分层的好处
各层独立:只要接口(服务)不变,底层改了也不影响上层
灵活性:技术变化时,只改相关层即可
结构可分割:不同层可用不同技术实现
易实现和维护:系统被拆分成小模块,调试方便
标准化:每层功能和接口都有说明,便于不同厂商兼容
各层所要完成的功能主要有以下一些(可以只包括一种,也可以包括多种):
差错控制:保证传输可靠
流量控制:别让接收方太忙
分段与重装:把大数据切成小块传,再拼回去
复用与分用:多条数据共享一条连接
连接建立和释放:建立通信关系,再正确关闭
总结
体系结构(Architecture):抽象的设计蓝图(比如七层模型)
实现(Implementation):真正的硬件/软件系统(比如电脑上的网卡驱动+浏览器)
打个比方:
体系结构像建筑风格设计图
实现是实际建的房子。
网络体系结构是抽象的,而具体的计算机网络是实现
网络协议 = 数据交换的规则
分层 = 把复杂通信任务拆成若干小任务,每层独立、互相配合
体系结构是抽象蓝图
实现是具体系统
具有五层协议的体系结构
为什么要用五层结构阐述计算机网络原理?
7 层 (OSI) 问题:太细碎(表示层、会话层抽象),初学者易迷失
4 层 (TCP/IP) 问题:太粗糙(物理/链路混一起),忽略硬件细节
五层优势:物理独立,应用独立,中间三层覆盖 80% 核心原理。简化版 OSI,易入门
五层是教学模型,不是官方标准
各层做什么
1. 应用层
位置:五层模型的最上层
作用:直接面向用户的程序,比如浏览网页、收发邮件、视频通话
做什么:规定应用进程之间通信和交互的规则
进程 = 运行中的程序。
协议例子:
DNS:域名解析
HTTP:浏览网页
SMTP:发邮件
应用层交互的数据单位:报文 (message)
应用层就是用户想要完成的功能层,比如打开网页、收邮件
2. 运输层
作用:在两台主机的进程之间提供通用的数据传输服务
这里的通用,是指不管上面是什么应用,运输层都能帮你把数据送到对方的应用进程
为什么重要:一台主机可能有很多进程同时通信,所以运输层需要复用(多个应用共享运输服务) 和分用(运输层能把数据交给正确的应用)
常见协议:
TCP(传输控制协议)
面向连接
可靠传输(有确认、重传、顺序保证、拥塞控制)
数据单位:报文段 (segment)
UDP(用户数据报协议)
无连接
尽力而为(可能丢包、乱序)
数据单位:用户数据报
运输层就像是快递公司,不管你寄的是衣服、书还是食品,它都能帮你送到对方家里(不同应用进程)
这里的都能指的是运输层提供了从进程到进程的传输服务,而不是说一定可以送到,例如UDP
3. 网络层
作用:
负责主机到主机之间的通信
把运输层交下来的报文段(TCP/UDP 数据)再封装成 IP 数据报(也叫分组)
决定数据应该走哪条路径,直到送到目标主机
数据单位:分组 / IP 数据报
主要任务:
路由选择:算出最佳路径(像地图导航)
分组转发:路由器接到分组后,根据转发表把它送到下一个路由器或目标主机
设备:路由器工作在网络层(根据目的 IP 转发)
注意点:
不要混淆运输层的UDP 用户数据报和网络层的IP 数据报
在本专栏,为了方便,不管是哪一层的数据单元,都可笼统地用分组表示
互联网是由各种不同的网络组成的,靠路由器互联
所以核心协议就是 IP 协议,因此网络层也常叫网际层 / IP 层
网络层就像快递公司的路线规划部门,决定你的包裹从北京到上海走哪条高速、在哪些中转站转手
4. 数据链路层
作用:
负责相邻节点之间的通信(点到点)
把来自网络层的 IP 数据报 再封装成帧(frame),附上首部/尾部,含同步、源/目的 MAC 地址、差错检验 FCS等。接收端按帧界定,校验有错就丢/请求重传(依协议而定)
发送时一帧一帧地传输,接收时能区分哪一帧的开始和结束,并把里面的数据取出来交给网络层
数据单位:帧 (frame)
地址:MAC 地址决定“下一跳的哪块网卡”
设备:交换机工作在链路层
关键点:
每一帧包含:数据 + 控制信息(地址、差错检测码)
如果发现帧里有错误,链路层会直接丢弃这帧,避免浪费资源
如果需要更可靠的传输,就要设计更复杂的链路层协议(比如自动重传请求 ARQ)
数据链路层就像快递运输的每一段路(北京中转站 → 石家庄中转站)
它保证这段路上快递车送到没问题,但如果路上出了事故,它最多就是把这个包裹丢了,不会替你重新补发送到没问题是指只要帧被判定为正确,就一定能被正确交付
5. 物理层
作用:
把数据转化为比特流 (0/1),通过物理介质(电缆、光纤、无线电波)传输出去
定义电压、光脉冲、无线信号的表示方式,以及插头、引脚、传输速率等
只管怎么传信号,不管信号代表什么
数据单位:比特 (bit)
关键点:
发送方发 1(或 0),接收方就要能收到 1(或 0)
物理层本身不解释 1/0 的含义,这事是交给上层去做的
常见介质:双绞线、同轴电缆、光纤、无线信道
物理层就像高速公路,负责信号能在介质里跑起来,至于货物是什么,它不关心
数据传输的全过程
发送端(主机1)
应用层(第5层):生成数据,加应用层首部 H5
运输层(第4层):加上 H4 → 交给网络层
网络层(第3层):加上 H3 → 交给数据链路层
数据链路层(第2层):再加上首部 H2、尾部 T2 → 形成帧
物理层(第1层):把整个帧转为 0/1 比特流 → 通过电缆/光纤发出去。
中间的路由器
把比特流收进来,逐层剥掉链路层信息,看到网络层地址
根据路由表,决定发到下一个节点
再封装成新的帧,从物理层继续发出去
接收端(主机2)
一层层往上剥开:先链路层,检查无误后交给网络层 → 再交给运输层 → 最后到应用层 AP₂
应用层进程 AP₂ 收到的就是发送端 AP₁ 的原始数据
为什么其他层只加首部,不加尾部?
消息结束的位置是隐含的
应用层、传输层、网络层,都是在内存/软件协议栈里处理的
数据的边界由上层交给它的数据长度来决定
例如:
TCP 把数据交给 IP 时,会告诉 IP:“这里有 1480 字节数据”
IP 在首部写入总长度字段
接收方根据这个长度字段,就知道数据在哪里结束了
所以不需要额外的尾部来标识结束
为什么链路层必须加尾部?
链路层面临的是物理传输,在电缆里看见的就是一串“010101...”
它不知道从哪里开始、到哪里结束,所以需要:
首部 → 帧的起始标志 + 地址
尾部 → 帧的结束标志 + CRC 校验
OSI参考模型把对等层次之间传送的数据单位称为该层的协议数据单元(PDU)
每层处理数据时,都把上层交下来的数据打包成该层的数据单元
名字分别是:
应用层:报文 (message)
运输层:报文段 (segment) / 用户数据报 (UDP)
网络层:分组 / 数据报 (packet)
数据链路层:帧 (frame)
物理层:比特 (bit)
这些整体叫 PDU (Protocol Data Unit)
实体、协议、服务和服务访问点
1. 实体 (Entity)
谁在通信?
实体就是可以发送/接收数据的对象,可能是软件模块(比如浏览器里的 HTTP 模块)、也可能是硬件(比如网卡)
例子:
应用层里的 HTTP 客户端、服务器端
数据链路层里的网卡
2. 协议 (Protocol)
怎么通信?
协议是同一层里的两个实体之间的通信规则,规定了格式、顺序、怎么应答等
特点:
水平的:协议是同一层对等实体之间约定好的
比如两个浏览器的 HTTP 模块之间通信,要按照 HTTP 协议
3. 服务 (Service)
给上层提供什么能力?
每一层除了要跟对等层通信,还要对上层提供服务
特点:
垂直的:下层向上层提供服务
上层只看见服务,看不见协议是怎么实现的
举例:
运输层的 TCP 协议 → 对上层应用提供可靠的字节流服务
网络层的 IP 协议 → 对上层提供尽力而为的分组传输服务
4. 服务访问点 SAP (Service Access Point)
怎么用服务?
SAP 就像一扇门,表示上层访问下层服务的入口
类比:
就像你去银行办业务,需要到柜台窗口 → 这个窗口就是 SAP
在网络中,常见的 SAP 就是端口号。比如浏览器访问 80 端口 → 表示访问 HTTP 服务
5. SDU / PDU
数据在层间传递时叫什么?
SDU (Service Data Unit):服务数据单元,指上层交给下层的原始数据
PDU (Protocol Data Unit):协议数据单元,下层在 SDU 上加上控制信息(比如首部)之后,形成新的数据单元
举例:
运输层把报文段 segment交给 IP → 这是 SDU
IP 在外面加上首部 → 就变成 IP 分组(PDU)
TCP/IP的体系结构
相比 OSI 的七层,TCP/IP 更简单,通常分四层
应用层:提供各种应用功能,比如网页 (HTTP)、邮件 (SMTP)、域名解析 (DNS)
运输层:进程到进程的通信(TCP、UDP)
网际层:解决数据包如何跨越不同网络传到目标主机,核心协议是 IP
链路层(网络接口层):和具体的硬件打交道,比如以太网、Wi-Fi
TCP/IP 协议族的沙漏结构
图 1-22中,TCP/IP 协议就像一个 沙漏:
上面是各种各样的应用协议(HTTP、SMTP、DNS、RTP…)
下面是各种各样的物理网络(以太网、Wi-Fi、光纤…)
中间最细的部分是 IP 协议
不管上层应用多复杂,底层网络多杂乱,所有通信最终都要通过 IP 协议来承载
所以有一句话叫:
Everything over IP(一切应用都跑在 IP 上)
IP over Everything(IP 能跑在各种网络上)
这也是为什么互联网能发展到今天的全球规模,IP 把所有异构网络都统一起来了