1.计算机网络
计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。
计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性
计算机网络按分布范围和拓扑结构划分如下图所示:
- 拓扑结构
总线型(利用率低、干扰大、价格低)、星型(交换机形成的局域网、中央单元负荷大,应用最多场景比如办公室)、环型(流动方向固定、效率低扩充难)、树型(总线型的扩充、分级结构)、分布式(任意节点连接管理难成本高)
- 计算机网络按分布范围
2. 局域网和广域网协议
以太网规范IEEE 802.3 是重要的局域网协议,包括:
IEEE 802.3 标准以太网 10Mb/s 传输介质为细同轴电缆
IEEE 802.3u 快速以太网 100Mb/s 双绞线
IEEE 802.3z 千兆以太网 1000Mb/s 光纤或双绞线
IEEE 802.3ae 万兆以太网 10Gb/s 光纤
-
无线局域网WLAN技术标准: IEEE 802.11
-
广域网协议包括: PPP 点对点协议、ISDN 综合业务数字网、XDSL (DSL 数字用户线路的统称HDSL、SDSL、MVL、ADSL)、DDN 数字专线、x.25 、FR中继、ATM异步传输模式。
3.OSI 7层协议
以下是 OSI 七层模型 的详细介绍:
📌 OSI 七层模型总览
| 层级 | 名称 | 主要功能 | 数据单位(PDU) | 常见协议/标准 | 典型设备 |
|---|---|---|---|---|---|
| 7 | 应用层 | 为用户提供网络服务接口(如网页浏览、邮件等),直接面向用户应用 | 数据(Data) | HTTP, FTP, SMTP, POP3, DNS, DHCP, Telnet | 网关、终端、主机 |
| 6 | 表示层 | 负责数据格式转换、加密解密、压缩解压,确保不同系统间的数据可理解 | 数据(Data) | JPEG, GIF, MPEG, ASCII, SSL/TLS, DES | 网关 |
| 5 | 会话层 | 建立、管理和终止应用程序之间的会话(对话控制、同步点设置) | 数据(Data) | RPC, SQL, NFS, NetBIOS | 网关 |
| 4 | 传输层 | 提供端(端口)到端(进程到进程)的可靠或不可靠数据传输,负责差错控制与流量控制 | 段(Segment) (TCP) 或 数据报(Datagram)(UDP) | TCP, UDP, SCTP | 网关、防火墙(部分功能) |
| 3 | 网络层 | 负责逻辑寻址、路由选择、分组转发和拥塞控制 | 包(Packet) | IP, ICMP, IGMP, ARP, RARP | 路由器、三层交换机 |
| 2 | 数据链路层 | 在物理链路上提供可靠的数据帧传输,处理物理地址(MAC)、差错检测与流量控制 | 帧(Frame) | Ethernet (IEEE 802.3), PPP, HDLC, STP, ATM, Frame Relay | 网桥、交换机(二层) |
| 1 | 物理层 | 在物理介质上传输原始比特流,定义电气、机械、功能和规程特性 | 比特(Bit) | RS-232, RS-449, V.35, RJ-45, FDDI, 10BASE-T | 中继器、集线器(Hub) |
🔍 各层详解
7. 应用层(Application Layer)
- 作用:为应用程序提供网络服务(不是"应用程序"本身)。
- 举例:当你使用浏览器访问网站时,HTTP 协议就在这一层工作。
- 关键点:最靠近用户的一层,不提供底层通信细节。
6. 表示层(Presentation Layer)
- 作用:解决不同系统间的数据表示差异。
- 功能 :
- 数据编码/解码(如 UTF-8、ASCII)
- 加密/解密(如 TLS/SSL)
- 压缩/解压缩(如 ZIP、GIF)
- 现代实践:在 TCP/IP 模型中,这些功能通常由应用层协议实现。
5. 会话层(Session Layer)
- 作用:管理通信会话(建立、维持、同步、终止)。
- 功能 :
- 会话检查点(用于恢复)
- 单工/半双工/全双工控制
- 例子:远程登录(Telnet)中的会话保持。
4. 传输层(Transport Layer)
- 核心任务:端到端通信(进程 ↔ 进程)。
- TCP vs UDP :
- TCP:面向连接、可靠、有序、有流量/拥塞控制。
- UDP:无连接、不可靠、低延迟,适用于实时应用(如视频通话)。
- 端口号:用于标识具体应用进程(如 80 → HTTP)。
3. 网络层(Network Layer)
- 核心任务:逻辑寻址(IP 地址) + 路由。
- 关键协议 :
- IP:负责分组寻址和路由。
- ICMP :用于网络诊断(如
ping)。 - ARP:将 IP 地址解析为 MAC 地址(严格说属于链路层辅助功能)。
- 设备:路由器根据 IP 地址转发数据包。
2. 数据链路层(Data Link Layer)
- 子层 :
- LLC(逻辑链路控制):提供流量控制、差错控制。
- MAC(媒体访问控制):处理物理地址(MAC 地址)和介质访问。
- 功能 :
- 成帧(Frame)
- 差错检测(如 CRC)
- MAC 地址寻址
- 设备:交换机基于 MAC 地址转发帧。
1. 物理层(Physical Layer)
- 作用:在物理介质上传输原始比特(0 和 1)。
- 定义内容 :
- 电压、线缆类型、引脚数量(机械特性)
- 信号速率、编码方式(如曼彻斯特编码)
- 注意:不关心数据含义,只管"传比特"。
💡 补充说明
-
OSI 模型 vs TCP/IP 模型:
- OSI 是理论模型(7 层),TCP/IP 是实际使用的模型(4 层:应用、传输、网络、网络接口)。
- 实际网络(如互联网)主要遵循 TCP/IP,但 OSI 有助于教学和故障排查。
-
数据封装过程(发送端):
应用层 → 表示层 → 会话层 → 传输层(加 TCP 头)→ 网络层(加 IP 头)→ 数据链路层(加帧头/尾)→ 物理层(转为比特流) -
解封装过程(接收端):反向逐层剥离头部,还原原始数据。
如果你需要对比图、记忆口诀(如 "All People Seem To Need Data Processing")或某一层的深入案例,也可以告诉我!
4.TCP/IP 网络模型
TCP/IP 网络模型是互联网实际采用的通信架构,相比理论性的 OSI 七层模型,它更简洁、实用。虽然常被称为"四层模型",但有时也会细分为五层(将物理层单独列出)。下面以 标准四层模型 为主进行介绍,并与 OSI 模型对照说明。
🌐 TCP/IP 四层模型详解
| 层级 | 名称 | 主要功能 | 对应 OSI 层 | 常见协议/技术 | 典型设备或组件 |
|---|---|---|---|---|---|
| 4 | 应用层(Application Layer) | 为用户提供各种网络服务和应用接口(如网页、邮件、文件传输等) | 应用层 + 表示层 + 会话层 | HTTP, HTTPS, FTP, SMTP, POP3, DNS, DHCP, Telnet, SSH | 主机、服务器、客户端 |
| 3 | 传输层(Transport Layer) | 提供端到端(进程到进程)的可靠或不可靠数据传输,负责流量控制、差错控制 | 传输层 | TCP, UDP | 主机(操作系统内核) |
| 2 | 网络层(Internet Layer) | 负责逻辑寻址(IP 地址)、路由选择、分组转发,实现跨网络的数据传输 | 网络层 | IP, ICMP, IGMP, ARP* | 路由器、三层交换机 |
| 1 | 网络接口层(Network Interface Layer) (也称链路层或网络访问层) | 负责在物理网络上传输数据帧,处理硬件地址(MAC)、介质访问控制、成帧等 | 数据链路层 + 物理层 | Ethernet, Wi-Fi (802.11), PPP, ARP*, FDDI | 网卡、交换机、集线器 |
💡 注:ARP(地址解析协议)在功能上属于网络层(用于 IP → MAC 解析),但其报文封装在数据链路层帧中传输,因此有时被归入网络接口层。
网络协议三要素: 语法、语义、时序。其中语法部分规定传输数据的格式,语义部分规定所要完成的功能,时序部分规定执行各种操作的条件、顺序关系等。
-
网络层协议:
- IP:网络层最重要的核心协议,在源地址和目的地址之间传送数据报,无连接、不可靠。
- ICMP:因特网控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
- ARP和RARP:地址解析协议,ARP是将P地址转换为物理地址,RARP是将物理地址转换为IP地址。
- IGMP:网络组管理协议,允许因特网中的计算机参加多播,是计算机用做向相邻多目路由器报告多目组成员的协议,支持组播。
-
传输层协议:
- TCP:整个TCP/IP协议族中最重要的协议之一,在IP协议提供的不可靠数据数据基础上,采用了重发技术,为应用程序提供了一个可靠的、面向连接的、全双工的数据传输服务。一般用于传输数据量比较少,且对可靠性要求高的场合。
- UDP:是一种不可靠、无连接的协议,有助于提高传输速率,一般用于传输数据量大,对可靠性要求不高,但要求速度快的场合。
-
应用层协议:基于TCP的FTP、HTTP等都是可靠传输。基于UDP的DHCP、DNS等都是不可靠传输
- FTP:可靠的文件传输协议,用于因特网上的控制文件的双向传输。
- HTTP:超文本传输协议,用于从WWW服务器传输超文本到本地浏览器的传输协议。使用SSL加密后的安全网页协议为HTTPS。
- SMTP和POP3:简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,邮件报文采用ASCI格式表示。
- Telnet:远程连接协议,是因特网远程登录服务的标准协议和主要方式。
- TFTP:不可靠的、开销不大的小文件传输协议。
- SNMP:简单网络管理协议,由一组网络管理的标准协议,包含一个应用层协议、数据库模型和一组资源对象。该协议能够支持网络管理系统,泳衣监测连接到网络上的设备是否有任何引起管理师行关注的情况。
- DHCP:动态主机配置协议,基于UDP,基于C/S模型,为主机动态分配IP地址,有三种方式固定分配、动态分配、自动分配。
- DNS:域名解析协议,通过域名解析出IP地址。
-
协议端口对照表
🔍 各层详细说明
1. 应用层(Application Layer)
- 作用:直接面向用户,提供各种网络应用服务。
- 特点 :
- 不仅包含"应用",还融合了 OSI 中的表示层 (数据格式、加密)和会话层(会话管理)功能。
- 协议通常基于 TCP 或 UDP 构建。
- 典型协议举例 :
- HTTP/HTTPS:网页浏览
- DNS :域名解析(将
www.example.com转为 IP) - FTP:文件传输
- SMTP/POP3/IMAP:电子邮件
- DHCP:自动分配 IP 地址
2. 传输层(Transport Layer)
- 核心任务 :实现端到端通信(即从一台主机的某个进程到另一台主机的某个进程)。
- 两大协议 :
- TCP(Transmission Control Protocol) :
- 面向连接、可靠传输
- 保证数据顺序、无差错、不丢失、不重复
- 适用于网页、文件传输等场景
- UDP(User Datagram Protocol) :
- 无连接、不可靠但高效
- 适用于视频通话、在线游戏、DNS 查询等实时性要求高的场景
- TCP(Transmission Control Protocol) :
- 关键机制:端口号(Port Number)用于标识具体应用进程(如 80 → HTTP,53 → DNS)。
3. 网络层(Internet Layer)
- 核心协议 :IP(Internet Protocol)
- 负责将数据包从源主机发送到目的主机,跨越多个网络。
- 使用 IP 地址 (如
192.168.1.1或2001:db8::1)进行逻辑寻址。
- 其他重要协议 :
- ICMP :用于网络诊断(如
ping、traceroute) - IGMP:用于组播(Multicast)管理
- ICMP :用于网络诊断(如
- 设备 :路由器 根据 IP 地址查路由表,决定下一跳。
路由表像一张动态更新的"交通地图",告诉路由器:当收到一个去往某个目的地的数据包时,应该从哪个接口(路由表记录了出接口)转发,以及发给谁(下一跳)。
🧭 一、路由表里有什么?
路由表中的每一条记录(称为 路由条目 / route entry)通常包含以下关键字段:
| 字段 | 说明 | 示例 |
|---|---|---|
| 目的网络(Destination Network) | 目标 IP 网络地址(通常是网段,不是单个主机) | 192.168.2.0/24 |
| 子网掩码(Subnet Mask) 或 前缀长度(Prefix Length) | 表示该网络的范围大小 | /24(即 255.255.255.0) |
| 下一跳地址(Next Hop) | 数据包应转发给的下一个路由器的 IP 地址 | 192.168.1.1 |
| 出接口(Outgoing Interface) | 本路由器上用于发送该数据包的物理或逻辑接口 | GigabitEthernet0/1 |
| 管理距离(Administrative Distance, AD) | 该路由来源的可信度(值越小越优先) | 直连=0,静态=1,OSPF=110,BGP=20 |
| 度量值(Metric) | 到达该网络的"成本"(如跳数、带宽、延迟等) | RIP 跳数=2,OSPF 开销=10 |
✅ 实际设备中(如 Cisco、华为、Linux),这些字段可能名称略有不同,但逻辑一致。
🔍 二、路由器如何用路由表决定"下一跳"?
当路由器收到一个 IP 数据包时,它会执行以下步骤:
步骤 1:提取目的 IP 地址
例如:收到一个包,目的 IP 是 192.168.2.35
步骤 2:在路由表中最长前缀匹配(Longest Prefix Match)
- 路由器逐条检查路由表,找出与目的 IP 匹配且子网掩码最长(最具体) 的那条路由。
- 举例:
- 路由表中有:
192.168.2.0/24→ 下一跳10.0.0.2192.168.0.0/16→ 下一跳10.0.0.30.0.0.0/0(默认路由)→ 下一跳10.0.0.1
- 目的 IP
192.168.2.35同时匹配以上三条,但/24最长 → 选择第一条
- 路由表中有:
步骤 3:确定下一跳和出接口
- 根据匹配的路由条目,得到:
- 下一跳 IP :
10.0.0.2 - 出接口 :
G0/1
- 下一跳 IP :
步骤 4:通过 ARP 获取下一跳的 MAC 地址(如果在同一网段)
- 路由器检查:下一跳
10.0.0.2是否在自己直连的网络中?- 如果是 → 发送 ARP 请求 获取其 MAC 地址
- 如果不是 → 查找通往
10.0.0.2的路由(递归查找,现代路由器通常避免这种情况)
步骤 5:封装成新帧,从出接口转发
- 将原 IP 包封装进一个新的数据链路层帧 (如以太网帧)
- 目的 MAC = 下一跳设备的 MAC
- 源 MAC = 路由器出接口的 MAC
- 从指定接口发送出去
✅ 至此,完成一次转发!
🗺️ 三、路由表是怎么来的?(路由来源)
路由表不是凭空产生的,它的条目来自以下几种方式:
| 来源 | 说明 | 特点 |
|---|---|---|
| 1. 直连路由(Directly Connected) | 路由器接口配置了 IP(如 192.168.1.1/24),自动添加该网段路由 |
优先级最高(AD=0),无需配置 |
| 2. 静态路由(Static Route) | 管理员手动配置的路由 | 简单、可控,适合小型网络 |
| 3. 动态路由协议(Dynamic Routing Protocols) | 路由器之间自动交换路由信息 | 适合大型网络,自动适应拓扑变化 |
| -- RIP | 距离矢量协议,最大跳数15 | 简单但效率低 |
| -- OSPF | 链路状态协议,基于 Dijkstra 算法 | 快速收敛,企业常用 |
| -- BGP | 路径矢量协议,用于互联网 AS 之间 | 复杂,控制策略强 |
💡 默认路由(
0.0.0.0/0)是一种特殊的静态或动态路由,表示"所有未知目的地都走这里",常用于连接互联网。
🌐 四、举个实际例子
假设你在家(PC: 192.168.1.10)访问百度(220.181.38.148):
- PC 发包 → 目的 IP = 百度 IP
- PC 发现不在同一网段 → 发给默认网关(家用路由器,如
192.168.1.1) - 家用路由器查路由表:
- 没有匹配百度的具体路由
- 但有一条 默认路由 :
0.0.0.0/0 → 下一跳 = 运营商网关(如 100.64.0.1)
- 路由器将包转发给运营商路由器
- 运营商路由器继续查自己的路由表(可能通过 BGP 学到百度的路由)
- 经过多跳转发,最终到达百度服务器所在机房
🔄 每一跳的路由器都只关心"我的路由表告诉我下一步发给谁",而不关心全程路径。
✅ 总结
| 问题 | 答案 |
|---|---|
| 路由表里有什么? | 目的网络、子网掩码、下一跳、出接口、管理距离、度量值等 |
| 为什么路由知道下一跳? | 因为路由表提前通过直连、静态配置或动态协议学习到了"去某网络该走哪" |
| 如何选择路由? | 使用 最长前缀匹配 原则,选最具体的路由 |
| 下一跳一定是路由器吗? | 是的,在跨网段通信中,下一跳通常是另一个三层设备(路由器或三层交换机) |
网络层如何完成端到端的数据传输,并说明各协议的作用和整个流程。
🎯 网络层的核心目标
实现逻辑寻址 + 路由转发 = 跨网络通信
- 使用 IP 地址 (如
192.168.1.10)标识设备(逻辑地址) - 通过 路由器 在不同网络之间转发数据包
- 不保证可靠性(那是传输层的事),只负责"尽力而为"地传递
🔧 主要协议及其作用
| 协议 | 全称 | 作用 |
|---|---|---|
| IP(Internet Protocol) | 网际协议 | 负责将数据封装成 IP 数据包,添加源/目的 IP 地址,进行路由选择和分片重组 |
| ICMP(Internet Control Message Protocol) | 互联网控制报文协议 | 用于网络诊断与错误报告(如 ping、traceroute) |
| ARP(Address Resolution Protocol) | 地址解析协议 | 将 IP 地址 → MAC 地址(仅在同一局域网内有效) |
| RARP / DHCP(可选) | 反向 ARP / 动态主机配置协议 | 获取自己的 IP 地址(通常由应用层或链路层辅助完成) |
⚠️ 注意:ARP 严格来说属于 链路层辅助功能,但为网络层服务,常被归入网络层讨论。
🔄 完整数据传输流程(以主机 A → 主机 B 为例)
假设:
- 主机 A:IP =
192.168.1.10,MAC =AA:AA:AA:AA:AA:AA - 主机 B:IP =
10.0.0.20,MAC =BB:BB:BB:BB:BB:BB - 两者不在同一子网(需经过路由器)
步骤 1:上层数据交给网络层
- 传输层(如 TCP)将数据段交给网络层。
- 网络层封装成 IP 数据包 :
- 源 IP:
192.168.1.10 - 目的 IP:
10.0.0.20
- 源 IP:
步骤 2:判断是否在同一网络
- 主机 A 用自己的子网掩码(如
255.255.255.0)计算:- 自己网络:
192.168.1.0 - 目标网络:
10.0.0.0→ 不同网络!
- 自己网络:
- → 必须通过 默认网关(通常是路由器)转发
步骤 3:获取默认网关的 MAC 地址(使用 ARP)
- 假设默认网关 IP 是
192.168.1.1 - 主机 A 检查 ARP 缓存,若无记录,则广播 ARP 请求 : "谁有
192.168.1.1?请回复你的 MAC!" - 路由器收到后,单播回复自己的 MAC(如
RR:RR:RR:RR:RR:RR) - 主机 A 将
(192.168.1.1 → RR:RR:...)存入 ARP 缓存
步骤 4:将 IP 包交给数据链路层封装成帧
- 数据链路层创建以太网帧:
- 目的 MAC:
RR:RR:RR:RR:RR:RR(网关的 MAC) - 源 MAC:
AA:AA:AA:AA:AA:AA - 载荷:完整的 IP 数据包(含源/目的 IP)
- 目的 MAC:
- 通过物理层发送出去
步骤 5:路由器接收并转发
- 路由器收到帧,检查目的 MAC 是自己 → 接收
- 剥离帧头,提取 IP 包
- 查看目的 IP:
10.0.0.20 - 查询 路由表,决定下一跳(可能是另一个路由器或直接连接到目标网络)
- 若下一跳是直连网络(如
10.0.0.0/24),则:- 使用 ARP 获取
10.0.0.20的 MAC 地址(向该网络广播 ARP) - 收到
BB:BB:...后,重新封装新帧:- 源 MAC:路由器出口接口 MAC
- 目的 MAC:
BB:BB:BB:BB:BB:BB
- 发送帧到主机 B
- 使用 ARP 获取
步骤 6:主机 B 接收
- 主机 B 收到帧,检查 MAC 是自己 → 接收
- 剥离帧头,交给网络层
- 网络层检查 IP 目的地址是自己 → 交给传输层处理
✅ 至此,跨网络的数据包成功送达!
🛠️ ICMP 在其中的作用(辅助与诊断)
虽然 ICMP 不参与正常数据传输,但在以下场景至关重要:
-
ping命令:- 发送 ICMP Echo Request
- 目标回 ICMP Echo Reply
- 用于测试连通性
-
错误报告:
- 目标不可达(Destination Unreachable)
- 超时(Time Exceeded)→ 用于
traceroute - 参数问题等
-
路径 MTU 发现(避免分片)
💡 ICMP 报文也封装在 IP 包中传输(协议号 = 1)
📌 总结:网络层数据传输的关键点
| 关键环节 | 说明 |
|---|---|
| 逻辑寻址 | 使用 IP 地址标识源和目的 |
| 路由决策 | 路由器根据路由表选择最佳路径 |
| ARP 解析 | 将下一跳 IP 转为 MAC 地址(仅限本地网络) |
| 分片与重组 | 若链路 MTU 小于包大小,IP 可分片(IPv4),由目的主机重组 |
| 无连接 & 不可靠 | IP 不保证送达、不重传、不排序(由 TCP 补偿) |
| ICMP 辅助 | 提供诊断和错误反馈机制 |
🚗 举个生活例子(开车去朋友家):
- 你知道朋友家地址 → 相当于你知道目的 IP(10.0.0.20)→ 这是寻址
- 你打开高德地图,输入地址,开始导航 → 地图规划全程路线 → 类似端到端路径规划(但 IP 本身不做这个!)
- 但 IP 网络不是这样工作的!
- 实际上,你只关心"下一个路口怎么走":
- 到第一个路口,看到指示牌:"去市中心 → 右转" → 这就像路由器查路由表,决定下一跳
- 到下一个路口,又有新指示 → 每一跳只看下一跳
- 最终靠一连串"局部决策" 到达目的地 → 这就是"逐跳转发"(Hop-by-Hop Forwarding)
💡 所以严格来说:IP 寻址告诉你"最终目的地",而路由(在每个路由器上)告诉你"下一步往哪走"。
4. 网络接口层(Network Interface Layer)
- 作用 :将 IP 数据包封装成适合底层物理网络传输的帧(Frame)。
- 功能包括 :
- MAC 地址寻址(如
00:1A:2B:3C:4D:5E) - 成帧(Frame formatting)
- 差错检测(如 CRC)
- 介质访问控制(如 CSMA/CD 用于以太网)
- MAC 地址寻址(如
- 支持多种物理网络 :
- 有线:Ethernet(以太网)
- 无线:Wi-Fi(IEEE 802.11)
- 点对点:PPP(用于拨号、DSL)
🔄 数据封装与解封装过程
发送端(封装):
应用层数据
→ 传输层加 TCP/UDP 头(形成 Segment/Datagram)
→ 网络层加 IP 头(形成 Packet)
→ 网络接口层加帧头/尾(形成 Frame)
→ 物理层转为比特流发送
接收端(解封装):
收到比特流 → 还原为帧 → 去帧头 → 得到 IP 包 → 去 IP 头 → 得到 TCP 段 → 去 TCP 头 → 还原应用数据
📊 TCP/IP 与 OSI 模型对比
| TCP/IP 层 | 对应 OSI 层 |
|---|---|
| 应用层 | 应用层 + 表示层 + 会话层 |
| 传输层 | 传输层 |
| 网络层(Internet) | 网络层 |
| 网络接口层 | 数据链路层 + 物理层 |
✅ 为什么 TCP/IP 更流行?
因为它是为互联网实际设计的,简洁高效,而 OSI 模型过于理论化,实现复杂。
💡 小贴士:记忆口诀
- TCP/IP 四层 :"应传网接"(应用、传输、网络、接口)
- OSI 七层 :"All People Seem To Need Data Processing"
(Application, Presentation, Session, Transport, Network, Data Link, Physical)
4.1 TCP/IP 四层模型通信案列
下面以 TCP/IP 四层模型 为基础,完整梳理 从主机 A 的某个应用程序(进程)发送数据到主机 B 的对应进程 的全过程,包括每一层的作用、涉及的关键协议、数据封装/解封装流程,以及端到端通信的核心机制。
🎯 场景设定
- 主机 A 上运行一个客户端程序(如浏览器),想访问 主机 B 上的 Web 服务(如 Apache)
- 主机 A IP:
192.168.1.10,端口(临时):50000 - 主机 B IP:
203.0.113.5,Web 服务端口:80 - 使用 HTTP over TCP
📦 整体流程概览(自上而下 → 自下而上)
text
[主机 A] [主机 B]
应用层: HTTP 请求 ←→ 应用层: HTTP 响应
传输层: TCP 段(源端口50000, 目的端口80) ←→ 传输层: TCP 段
网络层: IP 包(源IP 192.168.1.10, 目的IP 203.0.113.5) ←→ 网络层: IP 包
链路层: 以太网帧(含MAC地址) ←→ 链路层: 以太网帧
物理层: 比特流(通过网线/Wi-Fi) ←→ 物理层: 比特流
💡 注意:TCP/IP 模型中,物理层被包含在"网络接口层"中,不单独列出。
🔁 分层详解(发送端 → 接收端)
第 4 层:应用层(Application Layer)
-
功能:生成用户数据,调用传输层服务
-
协议:HTTP(也可能是 FTP、SMTP、DNS 等)
-
操作 :
-
浏览器构造 HTTP 请求:
GET /index.html HTTP/1.1 Host: 203.0.113.5
-
-
交给下层 :将此数据块传递给 传输层
第 3 层:传输层(Transport Layer)
- 功能 :实现 进程到进程 的通信(通过端口号)
- 协议 :TCP(可靠)或 UDP(不可靠)
- 关键操作(以 TCP 为例) :
- 建立连接 (三次握手):
- A → B: SYN (seq=x)
- B → A: SYN-ACK (seq=y, ack=x+1)
- A → B: ACK (ack=y+1)
- 封装数据 :
- 添加 TCP 头部:
- 源端口:
50000 - 目的端口:
80 - 序号、确认号、窗口大小、校验和等
- 源端口:
- 形成 TCP 段(Segment)
- 添加 TCP 头部:
- 交给网络层
- 建立连接 (三次握手):
✅ 若使用 UDP(如 DNS 查询),则无连接,直接封装为 UDP 数据报(Datagram)
第 2 层:网络层(Internet Layer)
- 功能 :实现 主机到主机 的跨网络通信
- 核心协议 :IP(IPv4 或 IPv6)
- 操作 :
- 封装 TCP 段为 IP 数据包(Packet)
- 添加 IP 头部:
- 源 IP:
192.168.1.10 - 目的 IP:
203.0.113.5 - 协议字段:
6(表示上层是 TCP) - TTL(防环)、校验和、标识/标志/片偏移(用于分片)等
- 源 IP:
- 路由决策 :
- 查本地路由表
- 若目标不在本地网段 → 发给默认网关(路由器)
- 交给网络接口层
🔧 辅助协议:
- ARP:若下一跳在本地网络,需用 ARP 获取其 MAC 地址
- ICMP:用于错误报告(如目标不可达)或诊断(ping)
第 1 层:网络接口层(Network Interface Layer)
- 功能:在物理网络上传输帧
- 协议/技术:Ethernet、Wi-Fi (802.11)、PPP 等
- 操作 :
- 将 IP 包封装为 数据帧(Frame)
- 添加帧头/尾:
- 目的 MAC:下一跳设备的 MAC(如网关或主机 B)
- 源 MAC:主机 A 的网卡 MAC
- 类型字段:
0x0800(表示承载的是 IP) - FCS(帧校验序列)
- 通过物理介质(网线、无线电)发送 比特流
⚠️ 如果主机 A 和 B 在同一局域网:
- 目的 MAC = 主机 B 的 MAC(通过 ARP 获取)
如果跨网络:
- 目的 MAC = 默认网关的 MAC
🔄 接收端(主机 B)的逆向处理(解封装)
-
网络接口层:
- 收到帧,检查目的 MAC 是否是自己 → 是则接收
- 剥离帧头/尾,提取 IP 包,交给网络层
-
网络层:
- 检查目的 IP 是否是自己 → 是则接收
- 剥离 IP 头部,根据"协议字段"(6)交给 TCP 模块
-
传输层:
- 根据目的端口
80,将数据交给 监听 80 端口的 Web 服务进程 - TCP 执行确认、重传、排序、流量控制等(确保可靠交付)
- 根据目的端口
-
应用层:
- Web 服务器解析 HTTP 请求
- 生成 HTTP 响应(如返回 HTML 页面)
- 反向流程:封装响应数据,通过 TCP/IP 发回主机 A
📋 涉及的核心协议总结
| 层级 | 协议 | 作用 |
|---|---|---|
| 应用层 | HTTP、FTP、DNS、SMTP 等 | 提供具体网络服务 |
| 传输层 | TCP (可靠)、UDP(高效) | 进程间通信、端口寻址、可靠性保障 |
| 网络层 | IP(核心)、ICMP、ARP | 主机间通信、逻辑寻址、路由、错误报告、地址解析 |
| 网络接口层 | Ethernet、Wi-Fi、PPP | 物理传输、MAC 寻址、成帧 |
🔑 关键概念强调
- 端口号:区分同一主机上的不同进程(如 80=Web,22=SSH)
- IP 地址:标识网络中的主机
- MAC 地址:标识局域网中的物理设备
- 封装/解封装:每层加/去头部,像"套信封"
- 端到端 vs 逐跳 :
- TCP 是端到端(A 进程 ↔ B 进程)
- IP 路由 是逐跳(每台路由器只管下一跳)
✅ 总结一句话:
在 TCP/IP 模型中,主机 A 的进程通过"应用层生成数据 → 传输层加端口 → 网络层加 IP 地址 → 接口层加 MAC 地址"完成封装并发送;主机 B 则逆向解封装,最终将数据精准交付给目标进程。整个过程依赖 HTTP/TCP/IP/ARP 等协议协同工作,实现跨网络的可靠进程通信。
如果你希望看到 Wireshark 抓包示例 、三次握手细节 ,或者想了解 UDP 场景(如 DNS 查询)的流程对比,也可以告诉我!
4.2 MAC地址
4.2.1 MAC 地址
MAC 地址(Media Access Control Address ,媒体访问控制地址)是网络通信中非常基础且关键的概念。它的核心作用是在 局域网(LAN)内部 唯一标识一个网络接口设备(如网卡),并确保数据帧能准确送达目标设备。
🎯 MAC 地址的核心作用
1. 在数据链路层实现设备寻址
- IP 地址用于 跨网络的逻辑寻址(网络层)
- MAC 地址用于 同一物理网络内的物理寻址(数据链路层)
- 路由器根据 IP 地址决定"下一跳",但实际发送时必须知道 下一跳设备的 MAC 地址
✅ 简单说:IP 告诉你"去哪",MAC 告诉你"发给谁"(在本地网络中)
2. 支持帧的准确投递
- 在以太网等局域网中,数据以 帧(Frame) 的形式传输
- 每个帧都包含:
- 目的 MAC 地址
- 源 MAC 地址
- 交换机或网卡收到帧后,会检查目的 MAC:
- 如果是自己 → 接收并向上层传递
- 如果不是 → 丢弃(交换机会根据 MAC 表智能转发)
3. 支撑 ARP 协议工作
-
当主机知道目标 IP,但不知道其 MAC 时,使用 ARP(Address Resolution Protocol)
text"谁有 192.168.1.10?请回复你的 MAC!" → 广播 192.168.1.10 回复:"我是 AA:BB:CC:DD:EE:FF" → 单播 -
主机将 IP-MAC 映射存入 ARP 缓存表,后续通信直接使用
🔁 反向过程(RARP/BOOTP/DHCP)用于无盘工作站获取 IP,现已基本被 DHCP 取代
4. 交换机学习与转发的基础
-
交换机通过观察帧的 源 MAC 地址 ,建立 MAC 地址表(CAM 表)
MAC 地址 接口 AA:BB:CC:DD:EE:FF Fa0/1 11:22:33:44:55:66 Fa0/3 -
当收到发往某 MAC 的帧时,交换机查表,只从对应接口转发(而非广播),提高效率和安全性
📌 MAC 地址的特点
| 特性 | 说明 |
|---|---|
| 长度 | 48 位(6 字节),通常写作 XX:XX:XX:XX:XX:XX(如 00:1A:2B:3C:4D:5E) |
| 唯一性 | 由 IEEE 分配厂商前缀(OUI),厂商保证后 24 位唯一(理论上全球唯一) |
| 固化性 | 通常烧录在网卡硬件中(但可软件修改,称为"MAC 伪装") |
| 作用范围 | 仅在同一个广播域(如同一个 VLAN 或局域网)内有效,跨路由器不传播 |
❗ 注意:MAC 地址 不会穿越路由器 !
路由器在转发 IP 包时,会重新封装帧,使用新出接口的 MAC 作为源,下一跳的 MAC 作为目的。
🌐 举个例子:主机 A → 主机 B(同局域网)
- A 想发数据给 B(IP:
192.168.1.20) - A 查 ARP 表,若无记录 → 广播 ARP 请求
- B 回复自己的 MAC:
BB:BB:BB:BB:BB:BB - A 构造以太网帧:
- 目的 MAC:
BB:BB:BB:BB:BB:BB - 源 MAC:
AA:AA:AA:AA:AA:AA - 载荷:IP 包
- 目的 MAC:
- 交换机收到后,根据目的 MAC 从对应端口转发给 B
✅ 没有 MAC 地址,局域网内的设备就无法互相识别和通信!
🆚 MAC 地址 vs IP 地址
| 对比项 | MAC 地址 | IP 地址 |
|---|---|---|
| 所属层级 | 数据链路层(Layer 2) | 网络层(Layer 3) |
| 地址类型 | 物理地址(硬件地址) | 逻辑地址(可配置) |
| 作用范围 | 局域网内(广播域) | 全球互联网(跨网络) |
| 是否可变 | 通常固定(可 spoof) | 可动态分配(DHCP) |
| 寻址方式 | 用于帧的本地投递 | 用于包的路由转发 |
✅ 总结
MAC 地址是局域网通信的"身份证",它让数据帧能在同一物理网络中精准找到目标设备。虽然它不出现在跨网络通信的全程中,但每一段本地传输都离不开它------就像快递员送包裹到小区后,仍需门牌号(MAC)才能送到具体住户。
4.2.2 为什么实际发送时必须知道下一跳设备的 MAC 地址
"为什么实际发送时必须知道下一跳设备的 MAC 地址?" ------ 这背后涉及 网络分层模型的本质 和 数据在物理网络中如何真正传输 的原理。
下面从底层逻辑一步步解释:
🧱 核心原因:物理网络只认 MAC,不认 IP
💡 IP 地址是"逻辑地址",用于跨网络寻址;
MAC 地址是"物理地址",用于本地链路传输。
1. 数据最终要通过物理介质传输
- 无论你发的是网页、视频还是邮件,最终在网络上传输的都是 电信号、光信号或无线电波(即比特流)。
- 这些信号承载的是 数据链路层的帧(Frame),比如以太网帧。
- 以太网帧的头部必须包含目的 MAC 地址,否则交换机/网卡不知道该把帧交给谁。
✅ 换句话说:没有 MAC 地址,数据连"出家门"都做不到!
2. 局域网(LAN)是一个共享或交换式广播域
- 在同一个局域网中(如同一个 Wi-Fi 或有线网段),所有设备通过 MAC 地址 互相识别。
- 当主机 A 要发送数据:
- 如果目标在同一网段 → 直接发给目标主机的 MAC
- 如果目标在其他网段 → 发给 默认网关(路由器)的 MAC
- 无论哪种情况,最终都要封装成一个带有目的 MAC 的帧,才能被网卡发出。
🔌 就像寄快递:
- IP 地址 = 收件人全国地址(北京市朝阳区XXX)
- MAC 地址 = 小区门口快递柜编号 或 快递员工牌号
即使你要寄到上海,第一步也得先把包裹交给 本小区的快递员(网关) ------ 而你必须知道他的工牌(MAC)!
3. 网卡和交换机只看 MAC 地址
- 主机的网卡(NIC)收到帧后,第一件事就是检查 目的 MAC 是否是自己 (或广播/组播地址)。
- 如果是 → 接收并交给上层(如 IP 模块)
- 如果不是 → 直接丢弃(省电、安全)
- 交换机也一样:它维护一张 MAC 地址表,根据目的 MAC 决定从哪个端口转发。
❗ 如果帧里没有正确的 MAC 地址,设备根本不会处理这个包!
4. IP 协议本身无法直接驱动硬件
- IP 是网络层协议,它定义了"源 IP"和"目的 IP",但 IP 包不能直接在网线上跑。
- 必须由 数据链路层(如以太网) 将 IP 包封装进帧中,加上 MAC 头尾,才能发送。
- 这个过程叫 帧封装(Framing),是操作系统网络栈自动完成的。
text
[应用数据]
↓
[TCP 头] → TCP 段
↓
[IP 头] → IP 包
↓
[以太网头(含MAC) + 以太网尾] → 帧(可在物理网络传输!)
🔄 实际例子:跨网络通信
假设主机 A(192.168.1.10)要访问百度(220.181.38.148):
- A 发现目标不在本地网段 → 需要发给 默认网关 (如
192.168.1.1) - A 查 ARP 表:"192.168.1.1 对应的 MAC 是什么?"
- 若没有 → 广播 ARP 请求
- 路由器回复:
MAC = RR:RR:RR:RR:RR:RR
- A 构造以太网帧:
- 目的 MAC =
RR:RR:RR:RR:RR:RR(路由器的接口 MAC) - 源 MAC =
AA:AA:AA:AA:AA:AA - 载荷 = IP 包(源 IP=192.168.1.10,目的 IP=220.181.38.148)
- 目的 MAC =
- 网卡将此帧转为电信号,发送出去
- 路由器收到帧 → 检查 MAC 是自己 → 接收 → 剥离帧头 → 处理 IP 包
✅ 注意:IP 包里的目的 IP 始终是百度,但每一跳的帧中,目的 MAC 都是"下一跳设备"的 MAC!
❓ 常见疑问解答
Q:为什么不能直接用 IP 地址代替 MAC?
- 因为 不同物理网络使用不同的链路层协议 :
- 以太网用 MAC
- PPP(点对点)不需要 MAC
- Wi-Fi 也有自己的 MAC
- IP 是通用的,但底层传输机制各异。MAC 是以太网/Wi-Fi 等多路访问网络的必需标识。
Q:路由器转发时会改 MAC 吗?
- 会!而且每次都会重写!
- 入站帧:目的 MAC = 路由器入接口 MAC
- 出站帧:源 MAC = 路由器出接口 MAC,目的 MAC = 下一跳设备的 MAC
- IP 地址在整个过程中保持不变(除非 NAT)
✅ 总结一句话:
因为物理网络设备(网卡、交换机)只能识别 MAC 地址,而 IP 地址只是逻辑标识。要让数据真正"跑起来",就必须在每一跳的本地链路上,用 MAC 地址告诉硬件"这个帧该给谁"。
这正是 "IP 负责端到端,MAC 负责跳到跳" 的精髓所在。
如果你还想了解:
- ARP 缓存如何工作?
- 交换机如何学习 MAC 地址?
- 在 Wi-Fi 或虚拟化环境中 MAC 如何变化?
欢迎继续提问!