物理层
理论概念
- 数据
- 信号
- 码元
- 通过码元数量计算码元信息量:k进制码元 $ \log_2k $
- 信源:发送信号
- 信宿:接受信号
- 信道
- 信道≠电路
- 从信道数量上来看
- 串行传输
- 并行传输:多信道
- 从信号方向上来看
- 单向通信:比如现实中光模块接的单模光纤
- 半双工通信:比如对讲机
- 全双工通信:比如打电话
- 波特(Baud):单位时间内脉冲的个数
- 即码元
- 比特(Bit):信息量的单位
- 即二进制位
- 速率:也叫数据率,一般指信息传输速率
- 码元传输速率:单位时间(1s内)传输的码元个数,单位为波特
- 信息传输速率:单位时间(1s内)传输的比特数,单位为比特每秒(b/s或bps)
- 波特率转比特率:比特率=波特率x码元信息量
- 带宽:单位是赫兹(Hz),一般是直接给出的物理参数
- 失真:也叫噪声
- 较小的失真:信号经过处理后依然可以识别
- 较大的失真:信号通过处理也无法再被识别
- 奈奎斯特定理:注意是定理不是频率,单位bps
- 奈奎斯特率
- 避免码间串扰
- 理想情况下:无噪声,带宽有限
- 极限速率:$ MAX=2W \log_2 V $
- 香农定理:单位bps
- 避免噪声干扰
- 非理想情况下:有噪声(一般是白噪声),带宽有限
- 极限速率:$ MAX = W \log_2 (1 + \frac{S}{N})) $
- [[TODO]]
数据链路层
功能
- 差错控制
- 使用编码计算进行差错控制
- FEC:前向纠错,发现错误直接纠正
- ARQ:自动重传,发现错误请求重传
- 是主要应用的差错控制技术
- 使用编码计算进行差错控制
网络层
- 目的:向传输层提供最大可能交付的、无连接的、简单的数据报服务。
- 异构网络互联
- 寻址方法、路由算法、差错处理算法均可能不同
- [[TODO]]
IP协议
- IP数据报格式
- 首部:最先发送
- 固定部分:大小相同,20字节,160bit
- 版本 4bit:IPv4?IPv6?
- 首部长度 4bit:单位是半字节(4bit),最低为5;长度一定是4bit的整数倍,不足在末尾用填充位填充;
- 区分服务 8bit
- 总长度 16bit:首部长度+数据部分长度
- 标识 16bit
- 标志 4bit
- 片偏移 12bit
- 生存时间 8bit:即TTL值,为防止
- 协议 8bit:数据部分的协议类型。TCP:6,UDP:17。
- 首部校验和 16bit:只检验首部完整性;每经过一次路由器都要重新计算一次(首部会发生变化)
- 源地址 32bit
- 目的地址 32bit
- 可选字段 0~40bit
- 填充位
- 可变部分:可有可无,大多数时间没有
- 固定部分:大小相同,20字节,160bit
- 数据部分:传输层的报文段
- 首部:最先发送
- IP数据报分片
- MTU:最大传输单元,数据部分长度大于这个值必须分片
- 标识:同一个数据部分的不同分片使用同一个标识值
- 标志:共4bit,只有后两个bit有意义
- 中间位DF:为1禁止分片,为0允许分片
- 最低位MF:为1表示还有分片,为0表示最后一片/没有分片
- 片偏移:分片在组中的相对位置(第几个片),单位为字节(8bit);也即偏移的字节数
- 字节数从0开始
- 注意单位问题:总长度单位为1bit,片偏移单位为8bit,首部单位为4bit,“总1片8首4”
- IPv4地址
- 使用点分十进制表示
- IP地址分类
- IP地址是区域唯一的
- IP地址只可以区分路由器或主机的接口:一个主机可能有多个接口
- IP地址由网络号和主机号构成:各占多少位不固定
- 特殊的双主机逻辑网络:IP无编号网络
IP Unnumbered Explained - “类别位”:通过IP地址的前几位划分类型
- A类:0,0~8为网络号
- B类:10,0~16位为网络号
- C类:110,0~24位为网络号
- D类:1110,多播地址
- E类:1111,保留地址
- 特殊IP地址:
- 0.0.0.0:可表示任意地址(listen 0.0.0.0)或默认路由(0.0.0.0 route via X.X.X.X),也叫未指明地址
- 0.0.0.0/8:网络号全0,主机号不为0,表示同一网络下的某个主机
- 255.255.255.255:本网广播地址,向它发送相当于向本网所有主机发送
- X.X.X.0:网络号不为0、主机号为0,只用于表示一个网络,不能使用
- X.X.X.255:网络号不为0、主机号位全为1,特定网络的广播地址
- 127.0.0.0/8:环回地址,用于本地调试
- 169.254.0.0/16:链路本地地址/缺省IP地址,常见于DHCP分配失败时,相当于“目前还没有IP”
- 始终注意X.X.X.0/24和X.X.X.255/24这两种IP地址,算可用地址数时要减去
- 私有IP地址:
- 10.0.0.0/8
- 172.16.X.X~172.31.X.X
- 192.168.0.0/16
- 记住特殊数字的二进制
- 0:00000000
- 255:11111111
- 192:11000000
- 128:10000000
- 10:00001010
- 168:10101000
- 172:10101100
- 127:11111100
- 子网划分
- 目的:便于扩展网络、管理网络、减少子网IP地址浪费;更灵活的控制一个子网中能容纳多少台设备
- 将两层IP地址转化为三层IP地址:网络号、子网号和主机号
- 子网号对外是透明的,看作是主机号的一部分
- 三层IP地址中,主机位最少是2位(去掉全0和全1,可提供给两台设备)
- 子网掩码:网络号部分的位为1,主机号部分的位为0
- 已知主机地址和子网掩码,求子网地址:二者按位相与(and),结果的四段式10进制就是子网地址
- 路由器路由表基本结构
- 目的网络地址:发给谁?
- 目的网络地址的子网掩码:他在哪个子网?
- 下一跳的地址:通过什么发给他?
- 路由器路由转发的基本流程
- 找到分组IP地址:发给谁?
- 尝试直接交付:子网是不是直接和我连接?
- 不能直接交付,查路由表配置,进行IP完全匹配:是不是手动配置了发给他的路线?
- 没有配置,查路由表,进行IP前缀匹配(网络号匹配):是不是手动配置了发给他所在的子网的路线?
- 以上均失败,发给默认路由:子网不在我这,是不是分组分配错了?
- 默认路由发给该路由器,路由器再发给默认路由,重复直到TTL=0,直接丢弃并报错:分组出错,谁也联系不到他
- CIDR组成超网
- 网络地址转换:NAT
- 有流量时会通过路由器的NAT转换表转换为正确的IP地址,再发送信息
- NAT转换表包含端口号
- IPv6
- 解决IPv4地址不够用的办法
- NAT
- CIDR
- 治标不治本
- IPv6的主要目标
- 从根本上解决IP地址不够用的问题
- 改进和精简首部格式,使路由器处理速度更快(快速处理/转发数据报)
- 支持QoS服务模型
- IPv6封包格式
- 基本首部,40字节,320bit
- 版本 4bit
- 值为“6”
- 优先级 8bit
- 标识数据报是否优先处理
- 流标签 20bit
- 类似IPv4中的标识,但是是“流”,与QoS有关
- 有效载荷长度 16bit
- 扩展首部+数据部分 大小
- 下一个首部 8bit
- 基本首部和每个扩展首部各有一个“下一个首部”字段
- 如果当前首部不是最后一个首部,该字段指向下一个首部的偏移
- 如果当前首部是最后一个首部,该字段指向数据部分的起始偏移
- 把所有部分“串在一起”
- 跳数限制 8bit
- 相当于IPv4中的TTL
- 源地址 128bit
- 目标地址 128bit
- 版本 4bit
- 有效载荷,最高65535字节,64KB
- 扩展首部:代替IPv4首部中的可变部分
- 数据部分
- 基本首部,40字节,320bit
- 与IPv4的区别
- IPv6地址
- 使用冒号16进制表示
- 连续的0可以用一个0代替
- 0000:0000:0000变成0:0:0
- 0AAA:B000:000C变成 AAA:B000:C
- 缩头不缩尾
- 双冒号零压缩,多组0用双冒号代替
- AAAA:0000:0000:0000:BBBB变为AAAA:0:0:0:BBBB再变为AAAA::BBBB
- AAAA:0000:0000:0000:BBBB:0000:0000只能变为AAAA::BBBB:0:0
- 双冒号只能使用一次,压缩最前面的多组零
- 网络号和主机号
- 未指明情况下,网络号为64位(最后16位为子网号),主机号为64位
- 可以使用类似CIDR的表示法表示网络号的位数,如:/24 代表网络号有24位,其他位是主机号
- IPv6地址类型
- 单播:一对一,可做源地址和目标地址
- 多播:一对多,只能作为目标地址
- 不存在广播:广播用多播实现
- 任播:本质一对多,实际一对一(一般是发给离本机最近的目标主机)
- 例子:多台主机提供相同服务时使用任播负载均衡
- IPv6地址划分
- 全球单播:以001位开头,2000::/3
- 链路本地:FE80::/10
- 本地环回:::1/128
- 未指明:::0/0,也可写成::/0
- 唯一本地地址/私有地址:FC00::/7
- 内嵌IPv4的IPv6地址
- IPv4向IPv6过渡
- 双栈协议:主机同时使用IPv4和IPv6地址(不同接口)
- 隧道技术:IPv6-IPv4-发送,IPv4-IPv6-接收
- 解决IPv4地址不够用的办法
ARP协议
- 数据链路层需要本机MAC地址和目标主机MAC地址
- 每个主机维护一个ARP高速缓存:ARP表
- 维护ARP表
- 已知IP,不知道MAC,发广播ARP请求分组(请求帧)
- 广播ARP请求中,目标主机MAC地址为全1(FF-FF-FF-FF-FF-FF)
- 目标主机识别到广播ARP请求中的IP地址是自己,发单播(点对点)ARP响应请求(响应帧)
- 本机得到响应帧,更新ARP表
- 后续的数据分组依照ARP表内的项,填充MAC地址并发送
- 已知IP,不知道MAC,发广播ARP请求分组(请求帧)
- 以上ARP表的维护适用于目标主机和本机在同一个局域网内的情况:较大的网络不适合进行广播寻找主机
- [[TODO]]
DHCP协议
- 应用层协议,基于UDP
RIP协议
- 应用层协议,基于UDP
- 一种分布式的、基于距离向量的路由选择协议
- 特点:简单,只能用于小范围互联网
- 主机维护路由表,存放当前路由器到其他每一个目的网络唯一的最佳距离记录
- 距离一般指 跳数
- 距离值小于15为合法,距离值为16表示网络不可达
- 路由表重要的表项
- 目的网络地址
- 距离值
- 下一跳的路由器地址
- 对路由表进行定时更新
- 只和相邻路由器交换信息,相互交换自己的路由表
- 每30s交换一次,相邻路由器180s内无响应则判定失联
- 初始情况下,路由器的路由表只包含相邻路由器的、距离为1的路由
- 若干次更新后,每个路由器均会获得当前路由器到所有可能的网络的最短距离(小于等于15),也称“收敛”。
- 若相邻的路由器之一失联,则从路由表中删除下一跳是该路由器的路由表项
- 路由表更新算法
- 子主题 4