第三章 数据链路层
数据链路层功能
使用物理层提供的比特传输
为网络层提供服务,把IP分组封装成帧
物理链路:传输介质(0层)+物理层(1层),实现了相邻节点的物理链路
逻辑链路(数据链路):数据链路层需要基于物理链路,实现相邻节点间逻辑上无差错的数据链路
组帧(封装成帧)
- 帧定界 物理层把一串二进制交给数据链路层时,数据链路层如何确定帧的界限,把二进制拆分成帧
- 透明传输 接收方链路层要从收到的帧内恢复原始SDU,让网络层感受不到将分组封装成帧的过程,对于网络层透明
差错控制:发现并解决一个帧内的“bit位错误” - 解决方案1:发现差错,丢帧重传 采用检错编码
- 解决方案2:接收方发现并纠正bit错误 采用纠错编码
可靠传输:发现并解决“帧错误”假设发送方发送1234
- 帧丢失 收到 124
- 帧重复 收到 12334
- 帧失序 收到 1324
流量控制:让发送方发送帧别太快,防止接收方来不及接收
介质(物理传输介质)访问控制:
- 广播信道 需要实现访问控制,总线型拓扑,多个节点争抢传输介质的使用权
- 点对点信道 通常不需要实现访问控制,节点之间有专属传输介质
组帧
主要问题:
- 帧定界
- 透明传输
解决方法:
- 字符计数法
原理:每个帧开头,用一个定长计数字段表示帧长
缺点: 任何一个计数字段出错都会导致后续帧无法定界
帧长=计数字段长度+帧的数据部分长度
| 定长计数字段 | 帧的数据部分 |
|---|---|
| 1字节 | 6字节 |
- 字节填充法
原理:使用SOH(Start of Header)和EOT(End of Transmission)这两个控制字符作为帧的开始和结束
缺点:如果帧的数据部分包括这两个控制字符,帧定界就发生了错误,使用转义字符ESC解决这个问题,数据部分包含这两个控制字符,就在数据部分的控制字符前面加上转义字符。这时又出现问题,如果数据部分包含ESC这个转义字符,情况和前面相同,这时在ESC转义字符前面再加上一个转义字符
发送方添加转义字符
接收方删除转义字符
| 控制字符 SOH | 帧的数据部分 | 控制字符EOT |
|---|---|---|
| 1字节 | 6字节 | 1字节 |
- 零比特填充法
原理:使用特殊比特串表示帧开始/结束 0111110(连续的6个1)
发送方对帧的数据部分进行处理,每遇到连续5个1,就在后面添加一个零
接收方遇到连续5个1,就把后面的一个0删除
HDLC协议和PPP协议使用 - 违规编码法(基于曼彻斯特编码)
原理:曼彻斯特编码会在时钟周期中间进行跳变,如果中间不跳变,就违规,
在物理层在帧前后插入一个违规时钟信号
差错控制
目标:发现并解决帧内部的位错误
检错编码
- 奇偶校验码 通过在有效信息位内添加0或1,使其满足奇校验(或偶校验)的规则
| 校验位/冗余位 | 有效信息位 |
|---|---|
| 1位 | n位 |
奇校验:整个校验码中1的个数为奇数个
偶校验:整个校验码中1的个数为偶数个
使用异或运算进行实现
缺点:有偶数个bit位发生错误,就检测不出来
- 循环冗余校验码CRC:数据发送方、接收方约定一个除数,K+R位作为被除数,添加校验位后要确保余数为0
| 信息位 | 校验位 |
|---|---|
| K位 | R位 |
| 生成多项式:G(x)= |
|
| 其中系数为0(这一项不存在)或1 | |
| 校验位取决于最高项的次数n,计算(构造)CRC码校验位(它自己)时全部补0 | |
| 校验码(除数)取决于每一位的系数 (abcd..pq)这一串二进制数 |
使用模2除进行计算,最终得到的余数位数只比校验码少一位,把这个余数作为校验位
若生成多项式选择得当,且
纠错编码
第四章 网络层
网络层功能
异构网络互联
路由与转发
路由:各个路由器互相配合,规划ip数据报的最佳转发路径
转发:一台路由器,根据自己的转发表,将收到的IP数据从合适的接口转发出去
拥塞控制
拥塞:网络上出现过量分组,超负荷,引起网络性能下降
控制方法:
- 开环控制(静态):部署网络时提前设计好预防方法
- 闭环控制(动态):发现拥塞,将拥塞信息传给路由器,路由器及时调整路由表控制拥塞
IPv4
ip数据报结构

IP数据报可变部分
| 字段名 | 说明 |
|---|---|
| 可选字段(0-40B) | 可变长度,用于扩展功能 |
| 填充 | 补齐首部长度为4字节的整数倍 |
IP数据报整体结构
| 组成部分 | 内容 |
|---|---|
| 首部 | 固定部分(20B) + 可变部分(0-40B) |
| 数据部分 | 上层协议传输的实际数据 |
分片
- 为什么分片:ip数据报大小大于mtu
- 分片有可能在源主机或任何一个路由器中发生
- 只有目的主机才会队分片进行重组
- 分片可能乱序到达主机
- 片偏移以x8B为单位,所以除了最后一个分片外,其它分片数据都必须为8B的整数倍
deepseek问答环节
实践定位到ip数据报位置(实际deepseek帮我找到的)

最初IP分类方式 1981年
由于当时只有政府学校军队会使用互联网。地址位数只设计了32bit
在那个年代每个主机,每个路由器接口被分配的ip地址都是唯一的
分类:
- A类 (1~126)网络号 8bit 前1bit 0
- B类(128~191)网络号 16bit 前2bit 10
- C类 (192~223) 网络号 24 bit 前3bit 110
- D类 (224~239) 多播 前4bit 1110
- E类 保留今后使用 前4bit 1111
特殊用途ip地址(以c类地址举例): - 主机号全0 用于路由表、转发表 不能分配给主机使用 不能作为目的地址 x.x.x.0
- 主机号全1 广播地址 只能作为目的地址 x.x.x.255
去掉全0全1,因此$$\boxed{最多有2^N-2个ip地址分配给主机(n为网络号)}$$ - 网络号全0 表示本网络中主机号为x的主机 只能作为分组源地址 0.0.0.x
- 网络主机号全为0 表示本网络的本主机 只能作为分组源地址 0.0.0.0
通常用于广播刚接入网络的时候,当一个主机未拥有ip地址,源地址写为全0,表示I'm nobody,目的地址写为全1,把DHCP报文封装成ip数据报,这个ip数据报就会被广播到网络中的每一个节点 - 网络主机号全为1 表示向本网络广播IP分组 只能作为分组目的地址 255.255.255.255
- 网络号 127 主机号非全0全1 本机环回自检地址 通常用于本地网络开发 127.x.x.x
做题踩坑,一个网络有两个ip地址说明它属于两个不同的网络
路由器收到255.255.255.255(本地广播地址会把它丢弃)
路由器广播转发误区
子网划分和子网掩码
把一个地址段划分为多个子网,提高了ip地址的利用率
划分前:网络号 主机号 主机,每个路由器的接口只需要配置 ip地址和网关
划分后:网络号 子网号 主机号 主机,每个路由器的接口需要配置 ip地址 网关 和子网掩码
子网掩码用于判断划分子网后目的地址和子网掩码是否属于同一网络
原理:子网掩码和ip地址按位相与得到网络号和子网号,全一相与等于本身,全零的相与等于0.
如果路由器不支持子网掩码,则会路由器使用默认的子网掩码进行运算,兼容了老路由器
路由器转发表中,如果所有表项都不匹配,则使用默认路由转发
另外一种表示方法CIDR记法:ip/子网掩码全1的位数
无分类编址CIDR
Classless Inter-Domain Routing 无分类域间路由选择
1993年推出,用于提高ip地址利用率
- 背景:互联网在民用领域大放异彩,IP地址告急
传统的分类方式,ip分配不灵
1993年推出,用于提高ip地址利用率
- 背景:互联网在民用领域大放异彩,IP地址告急
定长子网划分活,如一个单位有2000台主机,c类不够用,B类太浪费,利用率低
定长子网划分
每个子网一样大,也不够灵活,浪费ip地址资源,如一个学校有多个校区,每个校区的人数差异很大
变长子网划分
子网号不固定
以二叉树那样划分,形成哈夫曼树,每个叶子节点都对于一个子网,任何一个哈夫曼树编码不可能是其它哈夫曼编码的前缀,因为被编码的节点在叶子节点上,叶子节点没有子节点
这里是从根节点向叶子节点构造哈夫曼树 - 原始地址块作为根节点(可分配的主机号有h bit)
- 每个分支节点必须同时拥有左右孩子
- 每个叶子节点对应一个子网,根据根节点到叶子节点的路径分析子网的ip地址块范围
- 树的高度不能超过h-1,因为最小子网也要有2bit的主机号
路由聚合
如果路由表项转发接口相同,部分网络前缀也相同,可以把这几个表项聚合成一条,可以减少路由表的大小,查询速度更快,这种地址的聚合称为路由聚合,也称构成超网
可能会引入不存在的地址 (超网中没有分配给主机的ip地址)也会被转发
最长前缀匹配原则:路由聚合可能会导致多个表项都能够匹配成功,匹配路由表中能匹配的前缀最长的
网络地址转换
NAT Network Address Translation
1994年 IP地址即将枯竭
引入了端口号的概念 传输层 端到端通信
让局域网内的多台主机共享一个全球唯一的ip地址
私有ip地址:
- 10.0.0.0~10.255.255.255
- 172.16.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
公有Ip地址: - isp提供,全球唯一
- 局域网与外界通信时所需要使用的ip地址
NAT路由器:
NAT表可以把外网的ip地址映射为内网的ip地址
它进行网络地址转换时要修改传输层首部信息(源端口号),所以要包含传输层的功能
现在的家用路由器集成了:路由器,交换机,无线ap, NAT功能
地址解析协议 ARP
用于查询网络中<ip地址,Mac地址>的映射关系,感觉对数据链路层不熟悉,去看数据链路层