目录
- 计算机网络背景
- 初识协议
-
- 协议分层
- [OSI 七层模型](#OSI 七层模型)
- [TCP/IP 五层(或四层)模型](#TCP/IP 五层(或四层)模型)
- 再识协议
-
- [为什么要有 TCP/IP 协议?](#为什么要有 TCP/IP 协议?)
- [什么是 TCP/IP 协议?](#什么是 TCP/IP 协议?)
- [TCP/IP 协议与操作系统的关系(宏观上,怎么实现的)](#TCP/IP 协议与操作系统的关系(宏观上,怎么实现的))
- 所以究竟什么是协议?
- 网络传输基本流程
-
- 局域网网络传输流程图
-
- 局域网(以太网为例)通信原理
- [认识 MAC 地址](#认识 MAC 地址)
- 数据包封装和分用
- 跨网络传输流程图
-
- [网络中的地址管理 - 认识 IP 地址](#网络中的地址管理 - 认识 IP 地址)
计算机网络背景
网络发展
独立模式: 计算机之间相互独立;
网络互联: 多台计算机连接在一起, 完成数据共享;
局域网 LAN : 计算机数量更多了, 通过交换机和路由器连接在一起;
广域网 WAN: 将远隔千里的计算机都连在一起;
所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也
可以看做一个比较大的局域网.
计算机是人的工具,人要协同工作,注定了网络的产生是必然的。这也是一种历史规律。
具体是什么产生的?
- 从局部产生(先有各种各样的局域网)
- 局部到整体(为了扩大网络的范围,就有了广域网)
学习网络不能只看表面,除了一些大型的网络公司,在网络发展中还有运营商(例如:联通、电信、移动)和做通信工具的公司(例如:诺基亚、华为等)两种角色。
初识协议
"协议" 是一种约定,也是一种共识.
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
思考: 只要通信的两台主机, 约定好协议就可以了么?
• 定好协议,但是你用频率表示 01,我用强弱表示 01,就好比我用中国话,你用葡萄牙语一样,虽然大家可能遵守的一套通信规则,但是语言不同,即是订好了基本的协议,也是无法正常通信的
所以,完善的协议,需要更多更细致的规定,并让参与的人都要遵守。• 计算机生产厂商 有很多;
• 计算机操作系统 , 也有很多;
• 计算机网络硬件设备 , 还是有很多;
• 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;
协议分层
协议本质也是软件,在设计上为了更好的进行模块化,解耦合 ,也是被设计成为层状结构的,分层之后,层与层之间可以进行通信,同时分层之后,可以无障碍替换掉任意一层,这就是分层之后解耦的好处。
OSI 七层模型
OSI(Open Systems Interconnection)七层模型是开放式系统互联参考模型,定义了网络通信的分层架构及各层功能,从下到上依次为:
- 物理层(Physical Layer)
核心功能:负责处理物理介质上的信号传输,定义物理连接的机械、电气、功能和规程特性。
数据单位:比特(Bit)
关键要素:传输介质(网线、光纤、无线电波等)、物理接口(RJ45、光口等)、信号编码(二进制 0/1 的电 / 光信号表示) - 数据链路层(Data Link Layer)
核心功能:将物理层的比特流封装成帧,实现相邻节点间的可靠传输,处理帧同步、差错检测与纠正、流量控制。
数据单位:帧(Frame)
关键要素:MAC 地址(物理地址)、交换机、以太网协议(Ethernet)、PPP 协议 - 网络层(Network Layer)
核心功能:实现跨网络的端到端数据转发,负责逻辑地址(IP 地址)分配、路由选择(选择最佳传输路径)。
数据单位:分组 / 数据包(Packet)
关键要素:路由器、IP 协议、路由协议(RIP、OSPF 等)、子网掩码 - 传输层(Transport Layer)
核心功能:为应用层提供端到端的可靠或不可靠数据传输服务,处理端口寻址、分段与重组、流量控制、差错恢复。
数据单位:段(Segment,TCP)/ 数据报(Datagram,UDP)
关键要素:端口号、TCP 协议(可靠传输)、UDP 协议(不可靠传输) - 会话层(Session Layer)
核心功能:建立、管理和终止应用程序之间的通信会话,提供会话同步、会话恢复等服务。
关键要素:会话标识、会话控制(半双工 / 全双工切换)、RPC(远程过程调用)协议 - 物理层(Physical Layer)表示层(Presentation Layer)
核心功能:负责数据的格式转换与加密解密,确保发送方和接收方应用层能理解相同的数据格式。
关键要素:数据编码(ASCII、UTF-8 等)、数据压缩、加密解密(SSL/TLS)、格式转换 - 应用层(Application Layer)
核心功能:为用户应用程序提供网络通信接口,是直接与用户交互的层。
关键要素:各类网络应用协议(HTTP/HTTPS、FTP、SMTP、DNS、Telnet 等)、应用程序(浏览器、邮件客户端等)
其实在网络角度,OSI 定的协议 7 层模型其实非常完善 ,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议。
TCP/IP 五层(或四层)模型
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇. TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 物理层(Physical Layer): 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层(Data Link Layer): 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.
- 网络层(Network Layer): 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层(Transport Layer): 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层(Application Layer): 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.

再识协议
为什么要有 TCP/IP 协议?
本地通信:一台主机能够运行起来,CPU设备和内存设备进行通信,磁盘设备和内存设备进行通信,这些设备是怎么进行通信的?所有设备是通过"线"连接起来通信的,想象一下,如果将每个设备放在远隔千里之外的地方,还能进行通信吗?答案是肯定的,实际上,一台主机(冯诺依曼体系)也是一个"网络结构"。
网络通信:多台主机之间进行通信,本质上也是设备和设备之间的通信(网卡和网卡之间的通信),只不过距离变长了。
距离变长会引发一些新问题:
- 通信的目的是获取数据并且处理数据,接受到该怎么处理数据吗?
- 在传输数据的过程中出现了丢失该怎么办?
- 如何定位目标主机?
- 怎么解决当下要去哪里的问题?
有了问题肯定就有解决方案, TCP/IP 协议可以解决这些问题,针对不同种类、不同性质发荣问题, TCP/IP 协议进行了分层。因此,TCP/IP 协议本质就是一种长距离传输数据而引发的新问题的解决方案。
总结: TCP/IP 协议出现的原因就是单纯的因为传输距离变长了。
什么是 TCP/IP 协议?
- TCP/IP 协议的本质是一种解决方案
- TCP/IP 协议能分层,前提是因为问题们本身能分层
TCP/IP 协议与操作系统的关系(宏观上,怎么实现的)


体系结构内部的层状结构也决定了网络协议栈也是层状结构的。
所以究竟什么是协议?
关于协议的朴素理解 :所谓协议,就是通信双方都认识的结构化的数据类型。
因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对
方的协议。
网络传输基本流程
局域网网络传输流程图
局域网(以太网为例)通信原理
- 首先回答,两台主机在同一个局域网,是否能够直接通信?是的
- 原理类似上课
- 每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac 地址
认识 MAC 地址
- MAC 地址用来识别数据链路层中相连的节点;
- 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).
不用担心 MAC 地址地址不够用的问题,48 位二进制地址的总数量约等于 2.8×10¹⁴ 个独立地址。这个数量级远超当前全球所有网络设备(包括网卡、路由器、交换机、物联网终端等)的总量。即便未来物联网设备大规模普及,设备总量增长几个数量级,48 位 MAC 地址的容量也足够支撑 。
当设备报废、淘汰后,其对应的 MAC 地址会被回收,理论上可以重新分配给新设备使用。这进一步提升了地址的利用率,不会出现 "地址耗尽" 的问题。

详细过程:主机A要向主机E发送数据,先将数据发送到局域网中,该局域网网中的设备都有都会收到这条信息,主机B解析目标mac地址不是主机B,直接丢弃该数据,主机C和主机D同样也是,主机E接收到该数据,就会解析该目标mac地址,发现MAC地址是自己,会接受该数据。
- 以太网中,任何时刻,只允许一台机器向网络中发送数据
- 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞
- 所有发送数据的主机要进行碰撞检测和碰撞避免
- 没有交换机的情况下,一个以太网就是一个碰撞域
- 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac 地址判定
以太网本质就是一种共享资源(临界资源),而碰撞检测和碰撞避免就是为了维护以太网的互斥属性。 \color{BlueViolet}以太网本质就是一种共享资源(临界资源),而碰撞检测和碰撞避免就是为了维护以太网的互斥属性。 以太网本质就是一种共享资源(临界资源),而碰撞检测和碰撞避免就是为了维护以太网的互斥属性。
初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程。

主机之间互相通信:本质上是两个协议栈在通信 \color{DarkOrchid}主机之间互相通信:本质上是两个协议栈在通信 主机之间互相通信:本质上是两个协议栈在通信
而其中每层都有协议,所以当我进行上述传输流程的时候,要进行封装和解包

这样可以实现每一层和每一层之间进行直接通信,因为我收到的就是你发的!!!
- 报头部分,就是对应协议层的结构体字段,我们一般叫做报头
- 除了报头,剩下的叫做有效载荷
- 故,报文 = 报头 + 有效载荷
明确一下不同层的完整报文的叫法
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理
在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进行向上交付。
数据包封装和分用
下图为数据封装的过程

为什么要自顶向下封装?
自定向下:不是主机在发送消息,主体是人,而人发送数据是在应用层进行操作,所以必须要贯穿操作系统,贯穿协议栈。
封装:每一层都有协议,对每一层的协议进行封装,解包和分用,实现同层之间相互通信。
从今天开始,我们学习任何协议,都要先宏观上建立这样的认识:
- 要学习的协议,是如何做到解包的?只有明确了解包,封包也就能理解
- 要学习的协议,是如何做到将自己的有效载荷,交付给上层协议的?
跨网络传输流程图
网络中的地址管理 - 认识 IP 地址
IP 协议有两个版本, IPv4 和 IPv6.
- IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
IP和MAC地址的区别:IP地址是最终目标解决得是如何定位目标主机的问题,而MAC地址是解决当前我应该去哪里的问题。
跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器.
下图两台主机进行通信


只要是网络层,就有路由的功能
然后结合封装与解包,体现路由器解包和重新封装的特点

电脑、路由器统称为主机
过程
- 用户A向用户B发送数据,用户A发送的数据进行封装,到达网络层时,通过路由,发现源目标IP不在这个局域网中,就把该数据发送给路由器,源mac地址是本主机的mac地址,目标mac地址是路由器的mac地址,在局域网当中其他的主机也能够收到该数据,但是在其他主机的数据链路层发现目标mac地址不是本主机,其他主机会自动丢弃该数据。
- 达到路由器时,发现目标mac地址是本主机,会进行解包和分用,向上交付,在网络层进行路由,再向下进行封装,源IP地址和目标IP地址不改变,修改源mac地址和目标mac地址,到达目标主机时,进行解包和分用。
数据在传输的过程中,可以看到各个主机的网络层是一样的,目标IP和源IP都没有改变,mac地址在一直改变。网络层是相同的,数据链路层可以是不同的局域网通信原理(以太网、无线LAN、令牌环网等),实现了全世界的网络都可以叫做IP网络。