文章目录
-
- [1. 网络引入](#1. 网络引入)
- [2. 初识协议(Protocol)](#2. 初识协议(Protocol))
-
- [2.1 协议是分层的](#2.1 协议是分层的)
- [2.2 OSI 七层模型(了解即可)](#2.2 OSI 七层模型(了解即可))
- [2.3 TCP / IP 协议模型](#2.3 TCP / IP 协议模型)
-
- [2.3.1 为什么要有 TCP/IP 协议?](#2.3.1 为什么要有 TCP/IP 协议?)
-
- [通过本地通信 vs 网络通信理解](#通过本地通信 vs 网络通信理解)
- [2.3.2 TCP/IP 协议和操作系统的关系](#2.3.2 TCP/IP 协议和操作系统的关系)
- [2.3.3 协议的本质](#2.3.3 协议的本质)
- [3. 局域网的传输流程](#3. 局域网的传输流程)
-
- [3.1 理解局域网](#3.1 理解局域网)
- [3.2 局域网通信核心结论](#3.2 局域网通信核心结论)
- [3.3 MAC 地址认知](#3.3 MAC 地址认知)
- [3.4 局域网通信原理(以太网)](#3.4 局域网通信原理(以太网))
- [3.5 同一个网段内的两台主机进行发送消息的过程](#3.5 同一个网段内的两台主机进行发送消息的过程)
- [3.6 对齐颗粒度](#3.6 对齐颗粒度)
- [4. 跨网络传输流程(对比局域网)](#4. 跨网络传输流程(对比局域网))
-
- [4.1 对齐颗粒度](#4.1 对齐颗粒度)
- [4.2 通过网络传输理解IP地址和mac地址](#4.2 通过网络传输理解IP地址和mac地址)
- [5. 总结](#5. 总结)
1. 网络引入
Q:为什么会产生网络?
A:计算机产生之初,只存在小范围使用 ,多用于实验室、研究室等场景。
后来,不同研究室之间出现了数据交换需求,再加上计算机的大范围普及且:
- 人工进行数据交换 → 繁琐、低效、易出错
- 数据交换需求 → 越来越频繁、越来越规模化
网络由此诞生
结论:
网络的发展过程:从局部 → 整体
2. 初识协议(Protocol)
多台主机进行通信,必须遵守统一的规则 ,就像两个人交流,必须使用同一种语言一样。
对于人与人之间: 协议 = 一种约定
Q:计算机之间如何进行约定?
A:网络协议
-
从 硬件到软件 都必须遵守
-
协议的核心作用:
- 降低通信成本
- 快速形成共识
📌 补充说明
网络协议一般由 国际标准化组织 发布
能够制定标准的组织或公司,必须是:
业界公认的龙头
2.1 协议是分层的

上述例子中,"协议" 只有两层:
- 🗣️ 语言层
- 🔌 通信设备层
假设我们只更换语言:
- 汉语 → 英语
- 通信设备层 完全不需要改动
结论:
网络协议分层的意义:解耦 → 易维护 → 易扩展
2.2 OSI 七层模型(了解即可)
国际标准化组织 ISO 提出的 OSI 七层模型

2.3 TCP / IP 协议模型
现实中使用的是 TCP/IP 五层模型:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层

2.3.1 为什么要有 TCP/IP 协议?
先回答问题:
TCP/IP 协议意义是:解决长距离网络通信。
通过本地通信 vs 网络通信理解
我们PC的内存,CPU,网卡等硬件都通过线路连接,因此可以实现本地通信。
现在假设一台 PC:
- CPU 在东北
- 硬盘在西藏
- 网卡在浙江
- 通过足够长的线路连接
Q:这台PC还能通信吗?
A:可以。
结论:
PC内部的冯诺依曼体系本身就是一个 网络结构 ,将远处的CPU、硬盘、网卡想象成执行相应工作的大公司,那这些大公司本质也可以看成一个大型计算机。
Q:那为什么还需要网络通信?直接用线路连接起来不就可以了?
- PC 内部通信距离 有限
- 多台主机通信 → 距离被无限拉长
📌 距离变长,问题就来了:
1️⃣ 数据丢了怎么办?
2️⃣ 如何定位目标主机?
3️⃣ 下一跳该去哪里?
4️⃣ 数据如何被正确处理?
由此就产生了TCP/IP 协议
2.3.2 TCP/IP 协议和操作系统的关系

- 对齐理解颗粒度:
OS是分层的,而网络协议栈也是分层的。层级如下:
| 层级 | 归属 |
|---|---|
| 网卡 | 硬件 |
| 数据链路层 | 驱动程序(解决当下数据应该发送到哪里的问题) |
| 网络层 / 传输层 | 操作系统(分别解决数据如何定位 and 数据丢失的问的问题) |
| 应用层 | 用户态 (解决处理数据的问题) |
- 重要结论
结论 1:网络是操作系统的一部分
结论 2:不同 OS 的网络部分一定相同
这就是:
- Windows
- Linux
- macOS / iOS
👉 可以互相通信的根本原因,因为他们的网络部分一定是一样的。
2.3.3 协议的本质
协议的本质:约定好的结构体,通信双方都认识的结构化数据类型。
因为协议是分层的,所以每层都有双方的协议,并且同层之间相互认识。
举个例子:比如快递单,收发双方都能够认识,这个快递单如果用C语言来表示,就是 struct 结构体,而快递单子就是双方的协议。
3. 局域网的传输流程
目前主流的局域网形式:
- 以太网
- 无线 LAN
- 令牌环网(基本淘汰)
3.1 理解局域网
简单认识一下局域网,举个生活中的例子:
同学们在同一间教室上课,老师喊了学生A,老师和学生A双方都认为是一对一的在通信,但其他学生都听到了老师的消息,但是不做回应。只有学生A对老师的消息做出回应。因为学生A是具有唯一性的,老师喊了谁,那老师的消息就是由该学生接收的。
对于局域网,就好比这间教室,而局域网内的每台pc就是每名学生,每台pc是通过MAC地址来标识自己的唯一性的!
注:MAC地址是在网卡出厂时就确定了,且全球唯一!不可更改!
3.2 局域网通信核心结论
- 同一局域网内 → 各台主机可以直接通信
- 各个主机的唯一标识 → MAC 地址
3.3 MAC 地址认知
-
ipconfig /all可以查看自己的IP信息
-
mac地址用来识别数据链路层中相连的结点
-
mac地址长度为6Bytes(48位),一般用16进制数字+冒号的形式表示(如:08:00:27:03:fb:19)
-
mac地址在网卡出厂时就确定了,一般不能修改。mac地址通常是唯一的(虚拟中的mac地址不是真实的mac地址,可能会冲突)
3.4 局域网通信原理(以太网)

当主机A发送数据时,会将目标地址填到dst中。
其他主机会根据自己的src地址进行对比,不同则不做处理。
src与dst地址相同则做处理,因此只有主机E会做回应。
结论:
-
以太网中,任何时刻,只允许一台机器向网络中发送数据。
-
如果由多台同时发送,会发生数据干扰,我们称之为数据碰撞。
-
没有交换机的情况下,一个以太网就是一个碰撞域。
-
所有发送数据的主机要进行碰撞检测 和碰撞避免。
所以以太网本质是: 共享资源(任何时候只允许一台主机向以太网中发送数据) ,也就是 临界资源 ,因此需要维持互斥属性。
3.5 同一个网段内的两台主机进行发送消息的过程
同一网段就是指同一局域网下。局域网内不同pc之间如何通过网络实现数据的传递的?
之所以这么问,首先需要明确一点:那就是90%的网络通信是用户之间进行的,是人借助pc和网络进行通信!
而用户(人)无论在操作系统还是网络系统中,都是处于用户层的!

因此:两台局域网内pc之间通过网络进行数据传递应当是,由用户层自顶而下,经过网卡A传递给网卡B时,再由网卡B自底而上交付给用户层。
数据传输流程图:

• 对于左边发送方:
- 每层都有 协议 。
- 报文 = 报头 + 有效载荷(实实在在的数据)
- 报头是协议的 "信息载体",协议是报头的 "设计依据"。协议是看不见的规则,报头是看得见的信息结构。
想一个收快递的例子:我们收到的快递本身是一个盒子加上盒子上的一张信息纸,而不是物品本身。报头就是盒子上的那张纸。我们想买的物品就是盒子里的东西,但是我们收到的会比我们需要的多一部分。
-
报文在每一层传递时,会从上向下传递。因此每一层的报文都是:当前层的协议报头 + 上一层的报文。这实际上就是报文封装的过程。

-
自顶向下的封装,经网卡 传递给pc2。
由此解释自顶向下封装的原因:操作系统是硬件的管理者,所以必须贯穿整个操作系统,也就是贯穿协议栈。
• 对于右边接收方:
-
需要做解包 和分用 ,将当前层的报头和有效载荷(上一层的报文)分离,再将有效载荷交付给上层,

-
这样层层解包分离,最终两台不同pc之间在同层看到了相同的报头和报文。
- 结论1:不考虑应用层协议,任何协议在实现时,必须做到:
a. 报头必须要能做到:和有效载荷进行分离的能力
b. 报头中必须包含:如何将自己的有效载荷,交付给上层的哪一个协议的能力。
注:每一层有很多协议构成
- 结论2:数据链路层收到报文,对比mac地址,该报文不是发给该主机,数据链路层就会直接丢弃该报文。
注:数据链路层存储当前pc的MAC地址和目标pc的MAC地址
- 结论3:封装的过程其实就是入栈的过程,解包和分用是出栈的过程,所以把网络的分层叫做协议栈。
这里太妙了,网络的分层结构就是一个栈!!
3.6 对齐颗粒度
-
应用层 的报文又叫 请求与应答
-
传输层 的报文又叫 数据段
-
网络层 的报文又叫 数据报
-
数据链路层 的报文又叫 数据帧 (传数据时,又叫传了一个数据帧)
-
混杂模式是指:不做差别接收所有局域网中的数据(数据链路层不再对比mac地址,而是将所有的报文全部都向上传输) 这也就是 抓包的本质,就是设置了网卡模式
4. 跨网络传输流程(对比局域网)
4.1 对齐颗粒度
- IP 协议有两个版本, IPv4 和 IPv6 ,我们一般讨论IPv4。
- IP 地址是在 IP 协议中用来标识网络中不同主机的地址。
- 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数。
- 我们通常使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255。
- IP地址是用来标识全球范围内,主机的唯一性(这里的IP地址指的是公网IP)
注:公网和内网是用来解决IP地址不足的问题。公网下的IP地址不允许重复,内网可以(这里的内网重复是指不同公网下的内网可以重复)。
Q:IP地址是标识主机唯一性的,MAC地址也是,二者有什么区别?
A:IP地址是最初起点到最后终点,IP地址从始至终不改变,意义是路由的参考依据。而MAC地址是中间站的起点和终点。对于长距离网络通信,IP地址的终点和起点始终是不变的,而源mac地址和目标mac地址一直在变。
Q:为什么有了mac还要有ip地址??
- 网络是从局部到整体发展的,也就是说:刚开始只有局域网,也就只有mac地址。但是随着发展出现了IP地址,总不能将之前的mac地址废除。
- 之前pc之间的通信只存在于局域网之间,并且数量也不多,所以通过交换机查表就可以找到对应的pc,但是随着网络发展,出现了很多局域网,局域网之间如果只通过mac地址通信效率很低,所以增加了ip地址。有点像页目录和页表的关系。
4.2 通过网络传输理解IP地址和mac地址

对齐颗粒度:
- 路由器的作用是用来桥接两个子网的。
- 路由器也存在IP地址。
- 路由器也是支持多层的,有数据链路层和网络层,当代路由器已经可以到应用层了。
- 路由器有多张网卡。
两个主机之间的通信实际上两个协议栈之间的通信。

流程分析:
- 对于用户A,他想经主机A、主机B将数据发送给用户B时,首先会在主机A进行封装操作,到网络层时,会将主机A的IP地址和主机B的IP地址(即目标地址)纳入报文中。
此时网络层必须具备一种功能:识别目标IP地址是否在当前局域网内!
如果主机B的IP不在当前局域网内,那么主机A在向下层封装时,数据链路层会将路由器的MAC地址作为目标地址。经网卡将报文发送给路由器。(主机A能和路由器直接通信的原因是:二者处在同一个局域网)
注:根据IP地址的前几位来识别是否处于同一局域网内。

-
路由器收到报文后,对报文进行解包分离,路由器在网络层就看到了主机A的IP和主机B的IP。路由器在另一张网卡中,根据主机B的前几位IP地址,来确定主机B的MAC地址,数据链路层存储了路由器中另一个网卡的MAC地址和主机B的MAC地址,再经网卡将报文传给主机B
-
主机B进行解包分离操作后,用户B最终得到用户A的数据。
• 知识补充:
-
电脑没联网的情况下是没有IP地址的。当接入网络后路由器给电脑分配IP地址。路由器具有构造子网的功能。
-
IP地址可以更改,在家和在学校的IP地址不同。mac由网卡决定,出厂时就决定,不可更改。
5. 总结

网络层+IP的本质意义:给网络提供了一层虚拟化层,让世界上所有的网络都叫做IP网路。这也是从局部到整体的精髓。
完