计算机网络笔记-物理层、数据链路层、网络层

物理层

理论概念

  • 数据
  • 信号
  • 码元
    • 通过码元数量计算码元信息量: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
        • 填充位
      • 可变部分:可有可无,大多数时间没有
    • 数据部分:传输层的报文段
  • 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
      • 有效载荷,最高65535字节,64KB
        • 扩展首部:代替IPv4首部中的可变部分
        • 数据部分
    • 与IPv4的区别 image-20230222175836723
    • 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-接收

ARP协议

  • 数据链路层需要本机MAC地址和目标主机MAC地址
  • 每个主机维护一个ARP高速缓存:ARP表
  • 维护ARP表
    • 已知IP,不知道MAC,发广播ARP请求分组(请求帧)
      • 广播ARP请求中,目标主机MAC地址为全1(FF-FF-FF-FF-FF-FF)
    • 目标主机识别到广播ARP请求中的IP地址是自己,发单播(点对点)ARP响应请求(响应帧)
    • 本机得到响应帧,更新ARP表
    • 后续的数据分组依照ARP表内的项,填充MAC地址并发送
  • 以上ARP表的维护适用于目标主机和本机在同一个局域网内的情况:较大的网络不适合进行广播寻找主机
  • [[TODO]]

DHCP协议

  • 应用层协议,基于UDP

RIP协议

  • 应用层协议,基于UDP
  • 一种分布式的、基于距离向量的路由选择协议
  • 特点:简单,只能用于小范围互联网
  • 主机维护路由表,存放当前路由器到其他每一个目的网络唯一的最佳距离记录
    • 距离一般指 跳数
    • 距离值小于15为合法,距离值为16表示网络不可达
    • 路由表重要的表项
      • 目的网络地址
      • 距离值
      • 下一跳的路由器地址
  • 对路由表进行定时更新
    • 只和相邻路由器交换信息,相互交换自己的路由表
    • 每30s交换一次,相邻路由器180s内无响应则判定失联
      • 初始情况下,路由器的路由表只包含相邻路由器的、距离为1的路由
      • 若干次更新后,每个路由器均会获得当前路由器到所有可能的网络的最短距离(小于等于15),也称“收敛”。
      • 若相邻的路由器之一失联,则从路由表中删除下一跳是该路由器的路由表项
    • 路由表更新算法
    • 子主题 4
评论