计算机网络【面向章节的复习】

背!背!背!

1 概述

1.1 【了解】网络的分类

  1. 按照地理范围分类:
    局域网(Local Area Network, LAN):较小的地理区域
    城域网(Metropolitan Area Network, MAN):覆盖一个城市或大型校园
    广域网(Wide Area Network, WAN):覆盖广泛的地理区域(互联网是一个巨大的广域网)
  2. 按照使用者分类:
    公用网络:为公众提供服务的网络,如互联网。
    私有网络:仅供特定组织或个人使用的网络,如企业内部网络。
  3. 按照拓扑结构分类:
    星形网络:所有节点都直接连接到一个中心节点。
    环形网络:每个节点仅与两个相邻节点直接连接,形成一个闭环。
    总线形网络:所有节点共享一条通信线路。
    网状网络:节点之间有多条路径,可以动态选择最佳路径。
  4. 按照传输技术分类:
    有线网络
    无线网络
  5. 按照功能和服务分类:
    客户端-服务器网络
    对等网络(Peer-to-Peer, P2P)
  6. 按照协议标准分类:
    TCP/IP网络
    非TCP/IP网络

1.2 【理解】PDU/PCI/SDU的相互关系以及所谓的封装思想

缩写 全称 定义 作用
PDU Protocol Data Unit 网络通信中传输的数据包的格式,包括控制信息和用户数据 用于在网络层次之间传输数据
PCI Protocol Control Information PDU中的一部分,包含了控制和管理通信所必需的信息 用于确保数据正确地从源传输到目的地
SDU Service Data Unit 用户数据 应用层或用户想要传输的数据内容

关系(一句话总结):

  • PDUn=PCIn+SDUnPDU_n = PCI_n + SDU_n
  • SDUn=PDUn+1SDU_n = PDU_{n+1}

即:

  • 每一层的 PDU 由本层的 PCI 和 SDU 组成,且都是上一层的 SDU
  • 封装的过程等价于对最底层的 SDU 逐层地加上 PCI
  • 解封装的过程等价于对最顶层的 PDU 逐层地去掉 PCI

1.3 【掌握】ISO-OSI模型

层次 名称 作用 协议
应用层 Application Layer 为应用程序提供服务 HTTP, SMTP, FTP, DNS
表示层 Presentation Layer 数据格式化、代码转换、数据加密 /
会话层 Session Layer 建立、管理和终止会话 /
传输层 Transport Layer 提供端到端的可靠报文传输和错误恢复 TCP, UDP
网络层 Network Layer 为数据包选择路由 IP, ICMP, ARP, RARP, OSPF
数据链路层 Data Link Layer 传输有地址的帧以及错误检测功能 SLIP, PPP, ARP, RARP, MTU
物理层 Physical Layer 以比特为单位传输数据 /

1.4 【掌握】TCP/IP模型

(在 ISO-OSI 模型中对应的) 层次 名称 作用 协议
应用层
表示层
会话层
应用层 Application Layer 为应用程序提供服务 HTTP, SMTP, FTP, DNS
传输层 传输层 Transport Layer 提供端到端的可靠报文传输和错误恢复 TCP, UDP
网络层 互联网层(IP层) Internet Layer 提供非连接分组交换服务 IP, ICMP, ARP, RARP, OSPF
数据链路层
物理层
网络接口层 Network Interface Layer 传输有地址的帧以及错误检测功能 SLIP, PPP, ARP, RARP, MTU

2 物理层

2.1 【了解】各种传输介质以及大概的速率

介质 速率 备注
双绞线 10Mbps~10Gbps 包括屏蔽双绞线(STP)和非屏蔽双绞线(UTP)
同轴电缆 10Mbps~1Gbps 包括细同轴电缆和粗同轴电缆
光纤 100Mbps~100Gbps 包括单模光纤和多模光纤,部分光纤可达Tbps级别
无线传输介质 WIFI: 54 Mbps(802.11a/g)~9.6 Gbps(802.11ax)
蓝牙: 1Mbps~2Mbps(跟版本有关)
蜂窝移动通信: 100Mbps(4G)~10Gbps(5G)
/
  • 电视信号传输介质:宽带同轴电缆
  • 无线电开放波段:2.4GHz~2.4835GHz
  • 同步卫星:36000km处,时延0.25s~0.3s

2.2 【了解】有中继器和集线器这俩玩意

设备 功能 工作层次
中继器(Repeater) 放大信号,扩大传输距离 物理层
集线器(Hub) 连接多个网络设备,使它们能够形成一个单一的网络 物理层

2.3 【理解】物理层的功能

  • 传输媒介和信号:
    • 确定和管理网络通信的物理媒介,如双绞线、光纤、无线电波等
    • 定义电气、机械、过程和功能标准
  • 数据位的传输:处理比特流的发送和接收,但不关心这些比特流的含义或结构
  • 比特率控制:即比特率(比特/秒),确保数据以正确的速度发送和接收,以避免在接收端造成数据溢出
  • 同步:负责在发送端和接收端之间建立和维持同步,确保接收方能够正确地确定每个比特的开始和结束
  • 接口特性:定义与物理媒介连接的接口特性,包括连接器的形状、尺寸、引脚数目等
  • 信号转换和编码:
    • 负责将数字信号转换为适合在物理媒介上传输的形式,例如电信号、光信号或无线信号。
    • 包括数据编码,即将比特流转换为适合传输的信号形式。
  • 物理拓扑:定义网络的物理拓扑,如星形、环形、总线形等。
  • 错误检测和纠正:提供一些基本的错误检测和纠正功能,如奇偶校验。

2.4 【理解】调制方法和多路复用

2.4.1 调制方法:将数字信号转换为模拟信号的过程

  • 幅度调制(AM),频率调制(FM),相位调制(PM)
  • 数字调制:包括多种调制技术,如幅移键控(ASK)、频移键控(FSK)、相移键控(PSK)和更复杂的调制方法如正交幅度调制(QAM)

2.4.2 多路复用:将多个信号合并到一个信道中传输的技术

  • 频分多路复用(FDM):分频率,有线电视、无线通信
  • 时分多路复用(TDM):分时隙,数字信号传输,如T1和E1
  • 波分多路复用(WDM):分波长,长距离光纤通信系统
  • 码分多路复用(CDMA):3G和某些4G蜂窝网络
    • 在CDMA系统中,每个用户被分配一个唯一的码序列 cuserc_{user},通常称为伪随机码或扩频码
    • cuserc_{user} 与用户的信号相乘,从而“扩展”信号的带宽
    • 形如:suser(t)=muser(t)×cusers_{user}(t) = m_{user}(t) \times c_{user}, cuser=(1,1,1,1,1,1,1,1)c_{user} = (1, 1, -1, 1, -1, -1, 1, -1)
    • 将所有用户的信号相加,形成一个复合信号 s(t)s(t),即 s(t)=i=1Nsuser(t)s(t) = \sum_{i=1}^{N} s_{user}(t)

CDMA-1
CDMA-2

2.5 【掌握】Nyquist定理, Shannon定理

模拟信道带宽单位 Hz
数字信道带宽单位 bps

  • Nyquist定理:在理想低通信道中,极限数据传输速率 CC 与信道带宽 BB 和信号电平 SS 之间的关系
    • C=2Blog2VC = 2B \log_2 V
    • CC:极限数据传输速率,单位为比特/秒
    • BB:信道带宽,单位为赫兹
    • VVVV 个离散电平,无量纲
  • Shannon定理:在有噪信道中,极限数据传输速率 CC 与信道带宽 BB 和信噪比 S/NS/N 之间的关系
    • C=Blog2(1+S/N)C = B \log_2 (1 + S/N)
    • CC:极限数据传输速率,单位为比特/秒
    • BB:信道带宽,单位为赫兹
    • S/NS/N:信噪比,无量纲
  • 一般对两者的结果取较小值作为极限数据传输速率

带宽一般对 2 取对数

2.6 【掌握】各种交换技术和时序图画法

  • 电路交换
    • 在通信对端之间建立物理连接(预留物理信道),该通路在通信期间一直维持且为该通信双方专用。
    • 分类:时分时隙交换(TDM),频分信道交换(FDM)
    • 优点:传输速率高,传输时延小,实时性好,可靠,不丢失且保序
  • 存储转发交换
    • 在通信对端之间建立逻辑连接(预留逻辑信道),该通路在通信期间一直维持且为该通信双方专用。
    • 分类:报文交换(一次性发送所有报文),分组交换(分组逐个发送)
    • 数据报交换:每个分组头中都包含目的节点的地址。
    • 虚电路交换:在源节点和目的节点间建立一条逻辑通路。

比较:

  • 分组交换需要动态分配资源(不会浪费未用的带宽),而电路交换需要静态分配资源
  • 电路交换对数据传输是完全透明的,而分组交换要利用分组所携带的参数进行路由转发(需要额外的开销)
  • 分组交换是存储转发的(存在时延),而电路交换是直通的
  • 分组交换中存在乱序和丢包的问题,而电路交换不存在
  • (计费)电路交换是按照距离,时间计费,而分组交换是按照数据量,时间计费

2.7 【掌握】延时分析, 辅以时序图

  • 传播延时 (prop)
    数据在节点间的传播时间,取决于物理媒体传播速度和传播距离。
  • 传输延时 (trans)
    节点发送(或接受)整个分组所需时间。用 L (bit) 表示分组长度, R (bps) 表示链路速率, 则 L/R 为传输延时。
  • 处理延时 (pro)
    检查分组头部,寻路,差错校验等,与 CPU 速度和处理算法有关。
  • 排队延时 (queue)
    在节点上等待处理所需时间,与网络拥塞状况有关,是产生延时抖动(最大延迟与最小延迟的时间差)的主要因素。

n 个分组在路径上的总延时:

D=dprop+总节点数(dtrans+dpro+dqueue)+ndtransD=\sum d_{prop}+\sum_{\text{总节点数}}(d_{trans}+d_{pro}+d_{queue})+n\cdot d_{trans}

k 跳路径:k 个线路,k-1 个转发节点

3 数据链路层

3.1 【了解】HDLC和PPP协议

(以下:011111102=7E16=flag01111110_{2} = 7E_{16} = \text{flag}

3.1.1 高级数据链路控制(HDLC)

  • ISO制定的,面对的数据链路层协议
  • 01111110 作为帧的开始和结束标志,如果出现了连续的五个 1,则在其后面插入一个 0,以避免歧义
  • 地址段:从站地址。发送帧中为目的地址,接收帧中为源地址
  • 控制字段:表示帧的种类,执行信息传送,监控功能。
    • 信息帧(Information):用于传送数据,0 + Seq + P/F + Next
    • 监控帧(Supervision):用于监控,10 + Type + P/F + Next
    • 无编号帧(Unnumbered):用于管理,11 + Type + P/F + Modifier
    • Seq:发送端发送序列编号,采用模8循环编号。(3-bit)
    • Next:表示发送端准备接收的序列号,也采用模8循环编号。(3-bit)
    • Type:表示监控功能的类型(如接收就绪、接收不就绪、拒绝)(2-bit)
    • Modifier:附加的修改功能。(3-bit)
    • P/F:轮询/结束位,用于流量控制和错误恢复。(1-bit)

3.1.2 点对点协议(Point-to-Point Protocol, PPP)

  • 结构
    • flag: 0x7E
    • address: 0xFF(表示所有站点都接受该帧)
    • control: 0x03(默认值,表示无编号帧)
      • LCP提供机制允许通信双方就是否省略Address和Control字段进行协商。
    • protocol: 通告Payload字段中包含的数据包类型
      • 以0开始的编码定义为IPv4/IPv6及其他可能用到的网络层协议
      • 以1开始的编码被用于PPP配置协议,包括LCP和针对每个网络层协议而设置的不同NCP
      • 默认大小为2字节,可以通过LCP协商减小到1字节
    • payload: 1500字节(没通过LCP协商的默认情况)
      • 可变长度,最高可达某个协商的最大值
    • checksum: 2字节(采用CRC)
      • 可以协商使用4个字节

3.2 【理解】比特流编辑成帧

3.4 数据链路层的功能

3.3 【理解】纠错检错的最小距离

海明距离:两个码字中不相同的位的个数

一套编码方案中任意两个有效码字的海明距离的最小值是该编码方案的最小海明距离

  • 为了可靠地检测d个错误,需要一个距离为d+1的编码方案(相邻码字的距离为d+1)
  • 为了纠正d个错误,需要一个距离为2d+1的编码方案

在给定信息长度 mm 的情况下,纠正单个错误所需要的校验位数 rr 下界:

m+r+12rm + r + 1 \le 2^r

3.4 【掌握】数据链路层的功能

数据链路层是OSI七层网络模型中的第二层,位于物理层之上,网络层之下。它在物理层提供的原始比特流上创建一个结构化的帧(Frame),即“比特流编辑成帧”

  1. 封装数据:数据链路层接收来自上层(网络层)的数据包,并在这些数据包周围添加帧头和帧尾
    • 这些头和尾包含了控制信息,如源和目的地址、错误检测和校正码等
  2. 帧定界与同步:使用特殊的比特模式(帧定界符)来标记帧的边界
  3. 物理地址寻址:在数据链路层,每个设备都有一个物理地址,即是MAC地址。将帧定向到正确的设备
  4. 错误检测:检测和纠正在物理层传输过程中产生的错误
    • 使用各种错误检测和纠正技术,如循环冗余检查(CRC)
  5. 访问控制:当两个或多个设备连接到同一个通信媒介时,数据链路层协调设备的访问权限,如在以太网中使用的CSMA/CD(载波侦听多路访问/碰撞检测)

工作流程:当通过以太网发送一个文件时,文件首先被分割成多个数据包,在网络层被封装成IP数据包,然后在数据链路层被进一步封装成帧。每个帧包含目标和源MAC地址,以及用于错误检测的信息。这些帧通过物理媒介(如电缆)发送到目的地,在那里它们被重新组装成原始文件。

3.5 【掌握】奇偶校验, CRC, Hamming纠错码

3.5.1 奇偶校验

  • 奇校验:使得 bit 为 1 的数据位的总数为奇数
  • 偶校验:使得 bit 为 1 的数据位的总数为偶数
  • 可以检出单比特错误
  • plus 版:将发送的每个数据块作为一个 n 位宽和 k 位高的长方形矩阵来处理
  • 交错检验:以不同于数据位发送的次序来计算校验位。
  • 为 n 列中的每列计算校验位,按k行发送全部的数据位
  • 发送次序是从上到下发送每一行,行内数据位通常按从左到右的次序发送,在最后一行发送 n 个校验位。
  • 这种方法对于 nk 长度的数据块使用了 n 个校验位,可以检出一个长度小于等于 n 的突发错误。

3.5.2 CRC

  • 循环冗余检查(Cyclic Redundancy Check, CRC)
  • 用于检测和纠正数据传输过程中产生的错误
  • 形式:M(x)×xr=Q(x)×G(x)R(x)M(x) \times x^r = Q(x) \times G(x) - R(x)
    • M(x)M(x):数据位
    • xrx^r:等价于在末尾添加 r 个 0
    • Q(x)Q(x):商
    • G(x)G(x):生成多项式
    • R(x)R(x):余数
    • 可以理解为:运算操作在 GF(2n)GF(2^n) 中进行
  • 通过将数据位看作多项式的系数,将数据位的系数与一个预先定义的生成多项式进行模2除法运算,得到的余数作为校验码
    • 校验码会紧随数据位发送
  • 接收方将接收到的(包含有校验码的)数据位看作多项式的系数,与生成多项式进行模2除法运算。若果余数为0,则认为数据传输正确
  • 可以检出:长度小于等于 r 的所有突发错误
    • r:生成多项式的次数
    • 突发错误的长度为 r+1 时:通过检测的概率为 12r1\frac{1}{2^{r-1}}
      • 通过检测:当且仅当差错多项式能被生成多项式 G(x)G(x) 整除
      • 12r1\frac{1}{2^{r-1}}:根据突发错误的定义,首尾必须为两个 1;且突发长度为 r+1 与生成多项式的长度恰好相等,因此剩下位必须全同
    • 突发错误的长度大于 r+1 / 几个短突发错误发生时:通过检测的概率为 12r\frac{1}{2^{r}}

3.5.3 Hamming纠错码

  • 用于检测和纠正数据传输过程中产生的错误
  • 海明码中,所有 m+rm+r 个位从左到右排列,其中 22 的幂次位置上的位是校验位,其余位是数据位
  • 例如: m=8m=8r=4r=4r1r2M3r4M5M6M7r8M9M10M11M12r_1r_2M_3r_4M_5M_6M_7r_8M_9M_{10}M_{11}M_{12}
    • r1r2r4r8r_1r_2r_4r_8 为校验位,M3M5M6M7M9M10M11M12M_3M_5M_6M_7M_9M_{10}M_{11}M_{12} 为数据位
    • 对每个 MM 的下标 ii 进行按 2 的幂次分解,若 ii 可以分解为 2k2^k,则 MiM_i 会对校验位 rkr_k 产生贡献
    • r1M3M5M7M9M11=0r_1 \oplus M_3 \oplus M_5 \oplus M_7 \oplus M_9 \oplus M_{11} = 0
    • r2M3M6M7M10M11=0r_2 \oplus M_3 \oplus M_6 \oplus M_7 \oplus M_{10} \oplus M_{11} = 0
    • r4M5M6M7M12=0r_4 \oplus M_5 \oplus M_6 \oplus M_7 \oplus M_{12} = 0
    • r8M9M10M11M12=0r_8 \oplus M_9 \oplus M_{10} \oplus M_{11} \oplus M_{12} = 0
  • 收到信息后,重新根据 MiM_irir_i。若 rir_i 与收到的 rir_i 不同,将其按位异或,得到的结果(二进制转十进制后)就是出错的位
  • 可以发现:
    • 海明码的编码距离是 3
      • 证明:假如一些位发生了错误,但是仍然能通过海明检验,不妨设错误位的下标为 i1,i2,iki_1, i_2,\dots i_k
      • 则根据海明码的校验方案,必有 i1i2ik=0i_1\oplus i_2\oplus\dots\oplus i_k = 0
        • 这是因为:若一个校验码 r2xr_{2^{x}} 合法,则有:所有值为 1 且下标的二进制表达中含有 2x2^x 的位的个数为偶
      • 容易发现,由于所有 ii_{*} 不等,因此 k2k\le 2 时一定不存在合法的情况(即海明码的编码距离比 2 大)
      • k=3k=3 时,方案 i1=3,i2=5,i3=6i_1=3,i_2=5,i_3=6 显然合法(即找到了两个码字的海明距离为 3)
      • 因此:海明码的编码距离是 3
    • 因此,海明码可以检测出所有 1,21,2 比特错误,且可以纠正 11 比特错误

3.6 【掌握】基本数据链路协议

3.6.1 无限制的单工协议

单工协议:只能单向传输数据,不能双向交换数据

理想情况:

  1. 数据单向传输,双方的网络层一直处于空闲状态(无需任何流量控制)
  2. 处理时间可忽略不计,接收缓冲空间无限大(无需任何流量控制)
  3. 信道不会损坏或丢失帧(无需任何差错控制)

发送过程:运行在源机器的数据链路层上

  1. 从(总是就绪的)网络层获取一个数据包
  2. 构造一个出境帧
  3. 通过物理层发送该帧

接收过程:运行在目的机器的数据链路层上

  1. 通过物理层接收一个(完好无损的)帧
  2. 帧到达后,将新到达的帧从硬件缓冲区中删除,并放到一个变量中
  3. 将该帧的数据部分传递到网络层

3.6.2 无错信道上的单工停-等式协议

  • 停-等式协议(Stop-and-Wait Protocol)
    • 发送帧后,发送方停止发送,等待接收方的确认帧
  • 无差错信道:发送方发送的帧不会损坏或丢失
    • 但是这里的信道并不是理想信道,因为帧的到达时间是不确定的
    • 接收端需要一定的接收处理时间,接收缓冲只能存放一个帧
  • 为了防止发送快于接收而造成数据丢失,发送端发送一帧后必须停止发送,等待接收端发回的反馈确认
    • 接收端在收到一个帧并发送网络层后,需向发送端发一反馈确认短帧,表示可发新帧
    • 由于需要反馈,且帧的发送和反馈是严格交替进行的,所以相当于采用半双工信道
    • 由于无差错,因此不需要考虑“超时重传”和“差错重传”

3.6.3 有错信道上的单工停-等式协议

  • 有差错信道:发送方发送的帧可能损坏或丢失
  • 区别:
    • 增加一个计时器
      • 应保证超时值足够长,确保帧到达接收方,按照最坏的情形被接收方所处理,然后确认帧被返回发送方所需要的全部操作时间
    • 增加一位序号
  • 发送过程:
    • 发送方发送一帧后,启动计时器,等待接收方的确认帧
    • 若在超时时间内收到有效的确认帧,则从网络层获取下一个数据包,发送下一帧,同时递增帧序号
    • 若超时或收到了损坏的确认帧,则缓冲区和帧序号不变,并重传该帧
  • 接受过程
    • 一个帧到达时,检查它的序号,确认是否为重复数据包
    • 如果不重复且完整,则接收该数据包并传给网络层,然后回传一个确认帧
    • 如果是重复帧或受损帧,则不传递给网络层,且重复发送前一个正确接收到的数据帧的确认(以表示需要重传)

3.7 【掌握】滑动窗口协议

3.7.1 滑动窗口协议

允许发送站连续发送多个帧而不需等待确认的做法称作管道化,属于一种窗口机制

  • 发送窗口尺寸:允许连续发送的帧的数量。
    • 如果最大窗口为 n,则发送方需要大小至少为 n 的缓冲区来存放未被确认的帧,以满足可能的重传需要。
    • 注意:此时窗口的编号应当模(至少) n+1n+1 而不是 nn,否则会出现歧义
  • 发送窗口
    • 发送端允许不等确认而连续发送的帧的序号表
    • 当发送端收到发送窗口下沿帧的肯定确认时,将发送窗口整体向前滑动一个序号,并从输出缓冲区中将相应的数据帧副本删除
  • 接收窗口
    • 接收端允许接收的帧的序号表
    • 任何落在窗口外面的帧都将被丢弃
    • 当接收的帧在窗口内但不是接收窗口下沿帧时,暂存在输入缓冲区
    • 当接收到接收窗口下沿帧时,会将其以及后面连续的若干个检验过的正确帧按顺序交给网络层,在发回若干确认帧的同时将接收窗口向前滑动相应的数量
  • 带宽-延迟乘积:BD=单向延迟×带宽
    • 单项延迟的单位为s,带宽单位为bps
    • BD的单位为比特数。将BD除以每帧的比特数,得到的BD的单位为帧数
  • 假设发射窗口为w:链路利用率 w2BD+1\le\frac{w}{2BD+1}
    • 2BD2BD: 传去再传回
    • +1+1: 单帧耗时
  • 捎带确认:暂时延缓确认以便将确认信息搭载在下一个出境数据帧上的技术。

3.7.2 回退N协议

出错全部重发

  • 发送窗口大小为 N,接受窗口大小为 1
  • 发送端需要为每个待确认的帧都各自设置一个定时计数器。
  • 接收端只能按顺序接受数据。如某个帧出错或丢失,丢弃该帧及其所有的后续帧
  • 发送端超时后需重发出错或丢失的帧及其后续帧
  • 发送窗口尺寸 MAX_SEQ2n1MAX\_SEQ≤2^n−1 其中 nn 为序号位数,即存在 MAX_SEQ+1MAX\_SEQ+1 个不同的序号
    • 否则会造成接收端无法分辨新旧数据帧
  • 只要求发送端保持一定数量的缓存来保存没有确认的数据帧,对接收端没有缓存的要求
  • 在误码率高的情况下,会大大降低信道的利用率
  • 累计确认:接收端只需发送一个确认帧,表示接收到了序号为 nn 之前的所有帧
    • 接收端只需发送一个确认帧,减少了网络流量

4 局域网与介质访问控制

4.1 【理解】Aloha协议, 也就是广播信道分配的雏形

  • Aloha协议:最早的无线广播信道分配协议
    • 无需任何中央控制,任何站点都可以在任何时候发送数据
    • 但是,如果两个或多个站点同时发送数据,则会发生碰撞,导致数据丢失
    • 发送方需要等待一个随机的时间间隔,然后重传数据
    • 重传的时间间隔越长,发生碰撞的概率越小,但是信道利用率也越低
  • 分槽 ALOHA:将信道时间分为离散的时间槽,每个时间槽可以用来发送一个帧
    • 一个站点有数据发送时,必须等到下个时间槽的开始才可以发送
    • 通过将时间分割成离散的时隙并要求站点仅在时隙开始时发送数据,显著减少了冲突的可能性
    • 与纯 ALOHA 相比,信道利用率提高一倍

4.2 【掌握】CSMA协议, 类比在宿舍排队洗衣服

载波侦听多路访问 (CSMA) 协议:站监听信道,根据信道的状态来采取相应的动作,只有发现信道空闲时才能发送数据

4.2.1 1-坚持式 CSMA

  • 当信道空闲时,发送数据(发送概率为 1);当信道忙时,等待(持续监听)
  • 冲突:
    • 信号传输延迟造成冲突
    • 多个站点在监听到信道空闲时同时发送

4.2.2 非坚持式 CSMA

  • 当信道空闲时,发送数据(发送概率为 1);当信道忙时,等待一个随机时间间隔后再次监听
  • 信道利用率高于 1-坚持式 CSMA 协议,但网络的延迟增大

4.2.3 p-坚持式 CSMA

  • 适用于分时间槽的信道
  • 当信道空闲时,以概率 pp 发送数据;当信道忙时,等待下一个时间槽开始的时候再次监听
    • 即使信道空闲,也以概率 1p1-p 等待下一个时间槽开始的时候再次监听
  • 与前两种 CSMA 协议相比
    • 概率 p:降低 1-坚持式协议中多个站点同时发送而造成冲突的概率。
    • 坚持监听:克服非坚持式协议中造成的时间延迟。
      p 的选择直接关系到协议的性能。

4.2.4 CSMA/CD 协议

  • 带冲突检测的 CSMA (CSMA/CD)
  • 发送过程中仍然监听信道,通过检测回复信号的能量或脉冲宽度并将其与发送的信号作比较,可以判断是否发生冲突
  • 一旦发生冲突,立即取消发送,等待一随机时间后再尝试发送
    • 可以采用二进制指数后退算法来选择随机时间
  • 检测冲突的最小时间是将信号从一个站传播到另一个站所需要的时间

4.2.5 CSMA/CA 协议

  • 带冲突避免的 CSMA (CSMA/CA)
  • 被 WLAN 采用
  • 通过侦听确定在很短的一个时间内(这段时间称为 DIFS)没有信号
  • 倒计数空闲时间槽,当有帧在发送时暂停该计数器
  • 当计数器递减到0时,该站发送自己的帧
  • 如果帧发送成功,目标站立即发送一个短确认
  • 如果该站没有收到确认,则说明传输过程中发生了错误,采用二进制指数后退算法重新发送

4.2.6 二进制指数后退算法

  • 如果发生冲突,等待一段随机时间后再重试
  • 一般地,在第 ii 次冲突之后,从 0 2i10 ~ 2^i−1 之间随机选择一个数,然后等待这么多个时间槽
  • 在达到 1010 次冲突之后,随机数的选择区间被固定在最大值 10231023,不再增加
  • 1616 次冲突之后,控制器放弃努力,并给计算机返回一个失败报告,进一步的恢复工作由高层协议完成

4.2.7 冲突避免多路访问 (MACA)

  • 传输经过

    • A 向 B 发送一个 RTS (Request To Send) 短帧,包含了随后要发送的数据帧长度
    • B 向 A 回复一个 CTS (Clear To Send) 短帧,包含了从 RTS 中复制的数据帧长度
    • A 收到 CTS 后开始传输
  • 沉默

    • 如果一个站侦听到了 RTS,则它保持足够长时间的沉默使 A 能在无冲突的情况下收到 CTS
    • 该站如果只侦听到了 RTS 没有侦听到 CTS,则在数据帧传送过程中可以自由发送信息
    • 如果一个站侦听到了 CTS,则它依据 CTS 中数据帧的长度,在数据传输过程中一直保持沉默
  • 关系

    • 与CSMA/CA和CSMA/CD的关系:MACA可以看作是CSMA/CA的一个扩展或变体,它通过显式的控制消息来避免碰撞,而不是仅仅依赖于随机的等待时间。与CSMA/CD不同,MACA不是在发生碰撞后处理,而是主动避免碰撞的发生

4.3 【掌握】MAC帧格式, 主要是字节限制以及为什么限制

4.3.1 以太网 (IEEE 802.3)

  • 经典以太网:使用上述技术解决多路访问问题
    以太网的原始形式,运行速度从 3~10 Mbps 不等
  • 交换式以太网:使用交换机连接不同的计算机
    可以运行在 100、1000 和 10000 Mbps 的高速率,分别以快速以太网、千兆以太网和万兆以太网的形式呈现
  • 以太网帧格式
    • 帧的最小长度为 64 字节,最大长度为 1518 字节
    • 前导码 (Preamble):8个字节,每个字节包含比特模式 10101010。IEEE 802.3 最后一个字节(帧起始定界符 SOF)的最后2位为11
      比特模式是由曼彻斯特编码产生的 10MHz 方波,每个波 6.4 微妙,以便接收方的时钟与发送方同步
      以太网:10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101010
      IEEE 802.3:10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011
    • 目标地址:6个字节,MAC 地址,第一位是0表示是普通地址;如果是1,则表示组地址,该组中的所有站都要接收;全1的特殊地址用作广播,网络中的所有地址都要接收
    • 源地址:6个字节,MAC 地址,标识帧的发送方,具有全球唯一性
      地址字段的前3个字节用作该站所在的组织唯一标识符 (OUI),由 IEEE 统一分配,指明了网络设备制造商;后3个字节由制造商负责分配
    • 类型/长度 (Type/Length):2个字节。以太网使用类型字段,指定了该把帧送给哪个进程处理。IEEE 802.3 使用长度字段,接收方通过数据内包含的另一个逻辑链路控制 (LLC) 协议头来确定如何处理入境帧
      任何值小于或等于 0x600 可解释为长度字段,任何大于 0x600 可解释为类型字段(0x600 = 1536)
    • 数据 (Data):最多可包含 1500 字节
    • 填充 (Pad):最多 46 字节。以太网要求有效帧必须至少 64 字节长,从目标地址算起直到校验和,包括这两个字段本身在内。如果帧的数据部分小于 46 字节,则使用填充字段来填充该帧,使其达到最小长度要求
    • 校验和:4个字节,采用 32 位 CRC 校验和算法
  • 交换式以太网
    • 当交换机端口接收到来自某个站的以太网帧,它检查该帧的以太网地址,确定该帧前往的目的地端口
    • 在集线器中,所有站位于同一个冲突域(不同站点同时发送数据可能产生碰撞的最大网段),必须使用 CSMA/CD 算法
    • 在交换机中,每个端口有独立的冲突域
      • 对于全双工电缆,冲突不可能发生
      • 对于半双工电缆,站和端口以通常的 CSMA/CD 方式竞争传输
    • 特性:
    • 载波扩充:让硬件在普通的帧后面增加一些填充位,将帧的长度扩充到 512 字节,使网络最大距离延长到 200m。
    • 帧突发:允许发送方将多个待发送帧级联在一起,一次传输出去。最大突发长度为 8192 字节。如果级联起来的整个突发仍然小于 512 个字节,则硬件会再次对它进行填充。
    • 限制最小帧长的原因:避免当一个短帧还没有到达电缆远端的发送方,该帧的传送就已经结束;这种情况下,当在电缆的远端发生冲突时,发送方的传送在突发噪声到达前就完成传送,发送方误以为刚才一帧已成功发送

4.3.2 MAC 子层协议

  • 采用 1-坚持 CSMA/CD 算法
  • 发生冲突时采用 二进制指数后退算法

4.3.3 无线局域网 (802.11)

  • WLAN:无线局域网,是计算机网络和无线通信技术相结合的产物,是有线网络的无线化延伸
  • Wi-Fi:是一个创建于 IEEE 802.11 标准上的无线局域网技术,可等同于 802.11 的同义词。无线局域网的主要标准是 802.11
  • 体系结构
    • 接入点 (AP):转发该 WLAN 上的所有帧,具备无线至有线的桥接功能
    • 工作站 (Station):具备 WLAN 接口,能接入 WLAN 的主机
    • 分布式系统 (DS):一种有线网络,是 802.11 的逻辑组件,负责连接多个 AP,或将 AP 连接至骨干网(如目前已知的以太网)
  • 基本服务集 (BSS)
    • 独立基本服务集 (IBSS, independent BSS):工作站之间相互可以直接通信(不需要通过 AP 转发)
    • 基础结构型基本服务集 (infrastructure BSS):工作站需先与接入点建立关联,接入点负责转发工作站之间的通信
    • 每个 BSS 都有一个6字节的识别符 BSSID,相当于 AP 的 MAC 地址
  • 扩展服务集 (ESS):将几个 BSS 连接为 ESS
  • 带冲突避免的 CSMA
    • 802.11 支持两种操作模式
      • 点协调功能 (PCF):由 AP 周期性地(每秒10~100次)广播一个信标帧,邀请站点申请服务,集中控制。
      • 分布式协调功能 (DCF):分布式控制,采用带有冲突避免的 CSMA (CSMA/CA)。
      • DCF 是必须的,PCF 是可选的。
    • 与以太网相比,CSMA/CA 有两个主要区别:
      • 早期的后退有助于避免冲突;
      • 利用确认来推断是否发生冲突,因为冲突无法被检测出来。
  • 物理侦听/虚拟侦听
    • 由于 WLAN 中各个站点发出的信号范围有限,使用 CSMA 时存在两个问题:
      • 隐藏终端问题:由于竞争者距离太远而导致站无法检测到潜在的竞争者,误以为可以发送数据
      • 暴露终端问题:站点侦听到信道上有帧在传送,错误地认为自己不能发送数据
    • 为了解决上述问题,802.11 定义信道侦听包括物理侦听和虚拟侦听两部分
      • 物理侦听:检测信道是否存在有效信号
      • 虚拟侦听:让源站将它要占用信道的时间通知给所有其他站,使其他站不需要侦听就能知道信道何时可能转为空闲
  • 可选的 RTS/CTS 机制
    • 使用 NAV 来防止隐藏终端在同一时间发送,与 MACA 类似
      • 网络分配向量 (NAV):每个帧携带一个 NAV 字段,说明这个帧所属的一系列数据将传输多长时间
      • 当一个站检测到正在信道中传输的 MAC 帧首部的 NAV 字段时,就调整自己的 NAV
    • 不同之处:
    • A 发送数据帧时启动一个 ACK 计时器;
    • 当正确的数据帧到达后,B 用一个 ACK 帧回复 A,完成此次交流;
    • 如果 A 的 ACK 计时器超时前,ACK 没有返回,则可视为发生了一个冲突,经过一次后退整个协议重新开始运行;
    • 听到 RTS/CTS 的站会更新自己的 NAV 记录表示信道正忙。
    • RTS/CTS 的引入带来了延时和信道资源的消耗,因此该机制只用于预约长数据帧的信道。实际中,每个无线站点可设置一个 RTS 门限,仅当数据长度超过门限时才使用该机制。
  • 时间间隔
    • 一帧发送出去后,需要保持一段特定时间的空闲以便检查信道不在被用,然后任何站才可以发送帧。
    • 短帧间间隔 (SIFS):最短的间隔;允许一次对话的各方具有优先抓住信道的机会,可以发送控制帧(如 ACK、RTS、CTS)或下一个段。
    • DCF 帧间隔 (DIFS):常规的数据帧之间的间隔;任何站都可以在介质空闲 DIFS 后尝试抓取信道发送一个新帧,采用通常的竞争规则。
    • 仲裁帧间空间 (AIFS):有两个不同的优先级。
      • AIFS1:小于 DIFS 但长于 SIFS;被 AP 用来把语音或其他高优先级流量移到行头。
      • AIFS4:长于 DIFS;用来发送可以延迟到常规流量之后发送的背景流量。
      • 完善的服务质量机制定义了四种不同的优先级别,分别具有不同的后退参数和不同的空闲参数。
    • 扩展帧间间隔 (EIFS):最长;仅用于一个站刚刚收到坏帧或未知帧后报告问题。
    • 时间间隔长度与媒介有关,速率高的物理层会使用较短的间隔;同样,不同的物理层帧间间隔也有所不同。

帧格式

  • 帧控制 (Frame Control): 2 个字节,包含 11 个子字段(2+2+4+1+1+1+1+1+1+1+1)

    • 协议版本 (Protocol Version):2 比特,00。
    • 类型 (Type):2 比特,数据帧、控制帧或管理帧。
    • 子类型 (Subtype):4 比特,比如 RTS 或 CTS。
    • To DS:1 比特,表明发送到分布式系统。
    • From DS:1 比特,表明来自分布式系统。
    • 更多段 (More fragment):1 比特,表明后面还有更多的段。
    • 重传 (Retry):1 比特,表明这是以前发送的某一帧的重传。
    • 电源管理 (Power management):1 比特,指明发送方进入节能模式。
    • 更多数据 (More data):1 比特,表明发送方还有更多的帧需要发送给接收方。
    • 受保护的 (Protected Frame):1 比特,表明该帧的帧体已经被加密。
    • 顺序 (Order):1 比特,告诉接收方高层希望严格按照顺序来处理帧序列。
  • 持续时间 (Duration):2 个字节。

    • 通告本帧和其确认帧将会占用信道多长时间,按微妙计时。
    • 该字段会出现在所有帧中,包括控制帧,其他站用该字段来管理各自的 NAV 机制。
  • 地址:共有三个地址字段,每个均有 6 个字节。

    • 地址1:接收方地址。
    • 地址2:发送方地址。
    • 地址3:当帧在一个客户端和网络中的另一点传输时,AP 是一个中继点,地址3指明了这个远程端点。
    • 当 To DS 和 From DS 都置1时,在序号字段后有 6 个字节的地址4。
  • 序号 (Sequence):2 个字节。

    • 帧的编号,用于重组帧片段以及丢弃重复帧。
    • 有 4 位段序号和 12 位帧序号。相当于已传帧的计数器,计数器从0计数,每传输一帧序号+1,取 4096 的模数。
  • 数据 (Data):最多可有 2312 个字节。

    • 有效荷载中前面部分字节的格式称为逻辑链路控制 (LLC),标识有效荷载应该递交给哪个高层协议处理(比如 IP)。
  • 帧校验序列 (Frame check sequence):4 个字节。

    • 32 位 CRC。
  • RTS 共 20 字节:帧控制、持续时间、目的地址、源地址和检错字段(2+2+6+6+4)

  • CTS 和 ACK 共 14 字节:帧控制、数据长度、目的地址和检错字段(2+2+6+4)

4.4 【掌握】网桥, 交换机

4.4.1 网桥

  • 用于连接局域网的互连设备。

  • 工作在数据链路层,通过检查数据链路层地址(MAC 地址)来转发帧,必要时进行帧格式转换。

  • 能隔离以太网中的碰撞域,但不能隔离广播域。

  • 丢弃出错帧。

  • 包括透明网桥和源路由选择网桥,以下两种都是透明网桥。

  • 当网桥第一次接入网络时,所有哈希表都是空的,采用泛洪算法

    • 对于每个发向未知目标地址的入境帧,网桥将它输出到所有端口,除了它来的输入端口。
  • 后向学习法

    • 通过检查每个端口发送的帧的源地址,网桥可以知道通过该端口可以访问到哪些机器,于是在哈希表上构造相应的一对地址和端口。
  • 处理动态的拓扑结构:

    • 构造出哈希表后,帧的到达时间也被记录在相应的表项中。
    • 当一帧到达时,如果它的源地址已经在表中,那么对应表项中的时间值被更新为当前时间。
    • 网桥中存在一个进程定期扫描哈希表,将时间值在几分钟之前的表项都清除掉。
  • 对到达网桥的入境帧,整个转发过程如下:

    • 如果去往目的地址的端口与源端口相同,则丢弃该帧;
    • 如果去往目的地址的端口与源端口不同,则转发该帧到目标端口;
    • 如果目标端口未知,则使用泛洪算法,将该帧转发到所有端口,除了它入境的哪一个。
    • 网桥可看作链路层设备,一个具有 k 个端口的网桥将有 k 个 MAC 和物理层实例。
  • 生成树网桥

    • 为了提高可靠性,在网桥之间使用冗余链路,如在一对网桥之间并行设置两条链路。
    • 为了解决拓扑环路问题:
      • 让网桥之间相互通信,用一棵可以到达每个网桥的生成树覆盖实际的拓扑结构。
    • 选择具有最低标识符的网桥为生成树的根。
      • 构造从根到每个网桥的最短路径树,碰到平局时,选择一条经过更低标识符的网桥的路径。
      • 网桥在被指消息中包括与根的距离,每个网桥记住它找到的到根的最短路径。
      • 网桥关闭不属于最短路径一部分的端口。

在连接不同类型的局域网(如 802.3 和 802.11)时,网桥的转发存在以下主要问题

  • 帧格式不同。
    • 需要重新组帧,某些域(如 802.11 帧的持续时间)需要丢弃或产生,还需要重新生成校验和。
  • 数据速率不同,802.11 速率较低。
    • 网桥需要用缓冲区存储来不及传输的帧。
  • 最大帧的长度不同。
    • 802 标准本身不提供把长帧分片的功能,对于太长的帧只能丢弃。
  • 安全性问题。
    • 802.11 支持加密,802.3 不支持。
  • 服务质量问题。
    • 802.11 采用 PCF 可以支持 QoS,802.3 不支持。

4.4.2 交换机

交换机源自于多端口网桥,采用存储-转发方式在各端口之间进行数据帧的交换。

  • 交换机检测每个到达数据帧的帧头,根据数据帧的目的地址查找输出端口。
  • 如果地址查找表中没有该表项,交换机就向所有端口(除了接收端口)转发。
  • 地址查找表是通过帧的源地址与到达端口的对应关系建立的。

工作在数据链路层,能隔离碰撞域。

交换式局域网:采用星型拓扑结构,用交换机连接主机。

帧(由数据链路层构造)包含:

  • 帧头
  • 数据包头
  • 协议头
  • 用户数据
  • CRC

数据包(由网络层构造)包含其中的:

  • 数据包头
  • 协议头
  • 用户数据
工作层次 设备 功能
物理层 中继器 模拟设备,在物理层透明地复制比特流,以补偿信号的衰减
物理层 集线器 将多条输入线路连接在一起,不隔离碰撞域,连接到同一个集线器上的所有线路必须以相同的速率运行
数据链路层 网桥,交换机 可以隔离碰撞域,不能隔离广播域;在不同的 LAN 间存储转发帧,必要时进行链路层的协议转换
网络层 路由器 在不同的网络间存储转发分组,必要时进行网络层的协议转换。可以隔离碰撞域和广播域。可连接不同类型的网络
传输层 传输网关 对高层协议进行转换。将两台使用了不同面向连接传输协议的计算机连接起来。传输网关将数据包从一个连接复制到另一个连接上,并根据需要对数据包重新进行格式化
应用层 应用网关 对高层协议进行转换。理解数据的格式和内容,将消息从一种格式转换为另一种格式

5 网络层

5.1 【理解】无连接服务的具体思想

  • 网络层提供的是无连接服务,即在通信双方之间不需要建立连接,也不需要维护连接状态,每个分组都是独立发送的。
  • 无连接服务的具体思想是:每个分组都携带了目的地址,路由器根据目的地址转发分组,每个分组都是独立发送的,不需要建立连接,也不需要维护连接状态。
  • 优点:路由器不需要维护连接状态,不需要为每个连接分配资源,因此网络层的路由器可以处理更多的连接。
  • 缺点:网络层不提供可靠传输,分组可能丢失,到达顺序可能错乱。

5.2 【理解】拥塞控制的漏桶与令牌桶算法

5.2.1 漏桶算法

  • 漏桶算法是一种流量整形 (Traffic Shaping) 和速率限制 (Rate Limiting) 算法,用来控制发送到网络上的数据的流量
  • 漏桶算法的原理是:网络以恒定的速率流出数据。当数据流入速度过快时,会首先进入缓存区;缓存区满时,多余的数据将会被丢弃
    • 像一个漏桶一样,以恒定的(最大)速度流出水。当水流入速度过快时,水会先进入漏桶里(缓存);当漏桶满了时,多余的水会溢出

5.2.2 令牌桶算法

  • 令牌桶相比漏桶算法,可以更好地处理突发流量
  • 初始桶里有一定数量的令牌(B),每过来 1 字节 数据,就消耗一个令牌,如果令牌桶中没有令牌,则丢弃该数据包或进入缓存区
  • 令牌会以恒定的速率(R)往桶里增加,如果桶满了,则多余的令牌会被丢弃
  • 最大突发长度:清空令牌桶所需时间
    • 假设数据包到达率为 MB/sM \mathrm{B/s},令牌桶的容量为 BB 字节,令牌到达率为 RB/sR \mathrm{B/s}
    • 清空令牌桶所需时间(突发长度)为 SS
    • 则,只要 M>RM>R 则有 S=BMRS=\frac{B}{M-R}

5.2.3 闭环控制

上述 5.2.15.2.2 的算法都是开环控制,即不考虑网络的拥塞情况,只考虑网络的传输速率

以下:闭环控制,基于反馈概念,根据网络的拥塞情况来调整网络的传输速率

  • 检测到拥塞时,就发一个分组给源端,或向所有主机广播。
    • 在每个分组头中保留一个位或域,当拥塞超过一定值时,路由器就在该位或域上填上拥塞信息通知网络节点。
    • 由主机或路由器发送询问分组查询拥塞情况。
  • 虚电路中的拥塞控制
    • 采用准入控制 (Admission Control) 的三种策略:
      • 一旦出现拥塞的信号,就不再创建任何虚电路,直至拥塞解除。
      • 允许建立新的虚电路,但要仔细选择路由,以便所有新的虚电路绕过拥塞的区域。
      • 在虚电路建立时,子网与主机对所需服务质量进行协商。
    • 若不能满足主机最低要求,则拒绝建立连接;反之则保留连接所需的多种资源,避免拥塞发生。
  • 数据报中的拥塞控制
    • 抑制分组 (Choke Packet):
      • 每个路由器监视本节点的资源利用情况,若某个方向的资源利用率超过一定的门限,则该路由器向有关源节点发送抑制分组,源节点相应减少发往该方向的数据量,直至该方向的拥塞解除。
    • 随机早期检测 (RED):
      • 路由器维护一个运行队列长度的平均值。当某条链路上的平均队列长度超过某个阈值时,该链路就被认为即将拥塞,路由器随机丢弃一小部分数据包。

5.3 【掌握】网络层的功能

  • 网络层的功能是将分组从源端传输到目的端
  • 网络层的两个主要功能是路由和转发
    • 路由:确定分组从源端到目的端的路径
    • 转发:沿着确定的路径将分组从一个路由器转发到下一个路由器

Internet 是一个基于 IP 的分组交换网络,根据 IP 协议信息(主要是目的地址)来转发分组。

IP 提供尽力传送 (best-effort) 服务

  • 不可靠:无连接,无确认;不保证分组可靠到达目的地,可能出现分组的丢失。
  • 乱序:分组可能不是按照发送顺序到达目的地。

所有接入到 Internet 的节点都必须运行 IP 协议。

  • 向上,可以互联采用各种通信技术的网络;
  • 向下,可以承载各种类型网络业务。

5.4 【掌握】DV 和 LS 以及分层路由的算法思想

DV (Distance Vector 距离向量) 和 LS (Link State 链路状态) 都是路由算法

5.4.1 DV 算法

距离向量(DV)路由算法是一种动态路由算法,用于确定数据包在网络中的最佳路径。它基于 Bellman-Ford 算法,每个路由器维护一个距离向量表,记录到达网络中每个目的地的最佳已知距离(通常是跳数)和下一跳路由器。路由器定期与相邻路由器交换距离向量信息,以更新其路由表。当路由器检测到到某个目的地的距离发生变化时,它会更新自己的距离向量表,并将更新信息传播给邻居。

算法思想:

  • 定期更新: 每个路由器定期向邻居发送其 DV。
  • 最佳路径计算: 路由器根据收到的信息计算到每个目的地的最佳路径。
  • 路径更新: 如果发现更短的路径,路由器会更新其 DV 表并通知邻居。
  • 问题处理: DV 算法可能遇到“计数到无穷大”问题,即在网络拓扑变化时,错误的路径信息可能在网络中不断传播。

5.4.2 LS 算法

链路状态(LS)路由算法是一种动态路由算法,由每个路由器独立地构建整个网络的完整拓扑图。每个路由器发现其直接连接的邻居,并测量到邻居的链路成本(如延迟、带宽等)。然后,它构造一个包含所有这些信息的链路状态通告(LSA),并将这个LSA洪泛到整个网络中的所有路由器。每个路由器使用收到的LSA信息构建一个完整的网络拓扑图,并使用如 dijkstra 算法来计算到每个目的地的最短路径。

算法思想:

  • 链路状态广播: 路由器通过洪泛方式向整个网络广播其链路状态。
  • 网络拓扑构建: 每个路由器使用收到的 LSA 构建网络的完整拓扑图。
  • 最短路径计算: 使用迪杰斯特拉算法计算到每个目的地的最短路径。
  • 快速收敛: LS 算法能够快速适应网络拓扑的变化,因为每个路由器都有完整的网络视图。

5.4.3 分层路由

分层路由是一种网络路由架构,它将大型网络划分为更小、更易管理的层次或区域。在分层路由中,每个层次或区域内部使用一种路由协议,而不同层次或区域之间使用另一种路由协议进行通信。这种方法可以减少路由表的大小,降低路由更新的复杂性,提高网络的可扩展性和效率。

算法思想:

  • 区域划分: 将网络划分为多个区域,每个区域内部独立运行路由协议。
  • 区域间路由: 使用区域间路由协议处理不同区域之间的路由决策。
  • 减少复杂性: 通过限制路由信息的传播范围,减少整个网络的路由复杂性。
  • 可扩展性: 分层路由使得网络更容易扩展,因为新增加的区域或路由器只影响局部路由。

5.5 【掌握】路由器的工作原理, 尤其是路由表

5.5.1 网络层互联原理

  • 源端接受来自传输层的数据,并生成一个带有公共网络层的头(IP头)。
    • 网络层的头包含了最终的接收方地址,这个地址用来确定数据包应该通过第一个路由器发送。
    • Current: IP头 + 传输层数据包
  • 数据包被封装在 802.11 帧内,帧的目标地址是第一个路由器的地址。
    • Current: 802.11 帧头 + IP头 + 传输层数据包
  • 在路由器,数据包从帧的数据字段中被提取出来,802.11 帧头被丢弃。
    • 路由器检查数据包的 IP 地址,并依此决定将数据包转发给第二个路由器。
    • Current: IP头 + 传输层数据包
  • 第一个路由器建立一条到第二个路由器的 MPLS 虚电路,并且用 MPLS 报头封装该数据包。
    • Current: MPLS头 + IP头 + 传输层数据包
  • 在远端,MPLS 头被丢弃,并在此检查 IP 地址以便寻找下一跳网络层。
    • Current: IP头 + 传输层数据包

5.5.2 路由器的工作原理

  • 路由器是一种网络层设备,用于在网络中转发分组
  • 工作原理:路由器的输入端口接收到分组后,首先检查分组的目的地址,然后根据路由表将分组转发到适当的输出端口

5.5.3 路由表 (Routing Table) & 转发表 (Forwarding Table)

  • 路由器根据分组的目的 IP 地址查找路由表,找出分组的下一个中继点。
  • 每一个路由器都有一个路由表。

路由表每个表项至少包含两个内容:

  • 目的网络(网络号或前缀)/目的主机的地址
  • 下一跳地址

在路由器上,一般通过路由协议来动态建立和维护路由表。

转发表 (Forwarding Table)

  • 与路由表相比,转发表包含了更多的信息。
  • 包括包含目的网络的网络号/目的户籍的地址、输出端口,以及一些 MAC 地址等信息。
  • 每个节点上都有转发表,节点根据转发表来转发分组。
  • 主机上的转发表一般是手动或者通过 DHCP 等动态配置。

区别

  • 路由表是网络设备(通常是路由器)上的数据结构。
  • 转发表是路由表的实际应用,是根据路由表中的信息生成的用于实际数据包转发的表格。

5.5.4 路由表的建立

路由表通常包含以下信息:

  1. 目的网络地址:数据包要到达的目标网络或主机。
  2. 子网掩码:与目的网络地址结合,用于确定网络地址的范围。
  3. 下一跳地址:数据包应该发送到的下一个设备(通常是路由器)的地址。
  4. 接口:路由器上用于转发数据包到下一跳的物理或逻辑接口。
  5. 度量值(Metric):用于选择最佳路径的度量标准,如跳数、延迟或带宽。

路由表的建立方式:静态路由、动态路由

路由表的更新和维护

  • 定期更新:动态路由协议会定期更新路由信息,以反映网络的变化。
  • 度量值变化:当网络拓扑或条件变化时(如延迟、带宽变化),路由表会相应更新。
  • 故障恢复:在链路故障时,路由协议能够快速检测并重新计算路由,更新路由表。

6 IP 层

6.1 【了解】有 IPv6 这个东西

  • 16 个字节被分成 8 组来书写,每一组 4 个十六进制数字,组之间用冒号隔开。
    • 8000:0000:0000:0000:0123:4567:89AB:CDEF
  • 优化方式:
    • 在一个组内可以省略前导 0。
    • 一组或多组 0 可以用一对冒号来替代。
    • 故上述地址可以写成 8000::123:4567:89AB:CDEF
    • 地址前缀表示:IPv6 地址/前缀长度
  • 与 IPv4:
    • 兼容 IPv4 的 IPv6 地址:
      • IPv4 地址写成一对冒号再加上老式的点分十进制数。
      • 如 ::192.31.20.46
    • 映射 IPv4 的 IPv6 地址:
      • 将 80 位 0 和随后的 16 位 1 组成的前缀置于 IPv4 地址之前。
      • 如 ::FFFF:192.31.20.46
    • IPv6 默认情况下禁用 IPv4 兼容地址。
  • IPv6 地址即插即用。
    • 工作原理:自动将 48 位 MAC 地址扩展成 64 位,再组合一个 64 位的 IPv6 网络前缀,组成一个 IPv6 地址。
    • IPv4 的 64 位接口地址可以根据 MAC 地址自动生成,属于 IEEE EUI-64 标准。

6.2 【理解】IP 协议栈与协议族

  • 基于路由信息流的分类
    • 内部网关协议 (IGP) / 域内协议:RIP、OSPF、IS-IS
    • 外部网关协议 (EGP) / 域间协议:BGP
  • 基于确定路由表所使用的信息类型的分类
    • DV 距离矢量路由协议:RIP、BGP
    • LS 链路状态路由协议:OSPF、IS-IS

6.3 【理解】反向 ARP 以及代理 ARP 过程

6.6.2

6.4 【理解】IP 下的路由协议

自洽系统 (Autonomous System):

  • 内部管理由独立管理机构完成的一组网关和网络,整个网络由一个(或几个)核心网关与 Internet 相连。

  • 交换路由信息的两个网关如果属于不同的自洽系统,则称这两个网关是外部相邻;

  • 如果同属于一个自洽系统,则称为内部相邻。

  • 外部网关协议 (EGP):用于外部相邻的网关之间交换路由信息,也叫域间路由。(BGP)

  • 内部网关协议 (IGP):用于内部相邻的网关之间交换路由信息,也叫域内路由。(RIP, OSPF)

6.5 【理解】IGMP 协议

IGMP (Internet Group Management Protocol, Internet 组管理协议) 是一种组播协议,用于在主机和组播路由器之间交换组播组成员信息。

  • 一个进程要求它的主机加入某个指定的组/离开该组。每台主机跟踪记录当前它的进程属于哪些组。当一台主机上的最后一个进程离开一个组时,该主机就不再属于这个组。
  • 每个组播路由器定期向它所在 LAN 上的所有主机(使用 224.0.0.1)发送一个查询数据包,要求这些主机报告自己当前属于哪些组。
  • 每个主机收到查询消息后,返回一个响应包,包括了自己感兴趣的所有 D 类地址。

6.6 【掌握】DHCP过程, ARP过程

6.6.1 DHCP 过程

IP 配置方式

  • 手动配置
  • 拨号用户通过 PPP 协议分配
  • 基于动态主机配置协议 (DHCP) 的配置
    • DHCP (Dynamic Host Configuration Protocol, 动态主机配置协议) 是一种动态主机配置协议,用于在主机和 DHCP 服务器之间交换主机配置信息。
    • DHCP 服务器维护一个 IP 地址池,每个 IP 地址都有一个租期。
    • 主机启动时,向 DHCP 服务器发送一个 DHCP 请求数据包,请求分配一个 IP 地址。

DHCP 过程:

  • 客户端广播 DHCPDISCOVER 消息。
  • 源 IP 地址为 0.0.0.0,目的 IP 地址为 255.255.255.255。
  • 使用 MAC 地址来标识客户端。
  • DHCP 服务器回应 DHCPOFFER 消息给客户端,其中包含分配的 IP 地址、租用期限和其他配置参数。
  • 客户端选择一个 DHCP 服务器并在整个网络上广播 DHCPREQUEST 消息,告诉其他 DHCP 服务器它选择哪个服务器提供的 IP 地址。
  • 选定的服务器给客户端回应 DHCPACK,其中包含配置参数。
  • 客户端接收 DHCPACK,对参数进行最后的检查,然后开始使用分配的 IP 地址。
  • 客户端可以通过向 DHCPRELEASE 消息来释放对 IP 地址的租用,其中包含有客户端的 MAC 地址和租用 IP 地址。

6.6.2 ARP 过程

地址解析协议 (ARP):解析 IP 地址与 MAC 地址的关系

  • 反向 ARP (RARP):用于查找 MAC 地址所对应的 IP 地址。

ARP 协议:采用 IEEE 802.3 的格式

  • 帧类型 (Type):2 字节
    • ARP 请求及响应为 0x0806
  • 数据:28 字节
    • 硬件类型:2 字节。指发送者的网络接口类型,如以太网为 0x0001。
    • 上层协议类型:2 字节。指发送者所采用的网络层协议类型,如 IP 协议为 0x0800。
    • MAC 地址长度:1 字节
    • IP 地址长度:1 字节
    • 操作类型:2 字节
      • ARP 请求:1
      • ARP 响应:2
      • RARP 请求:3
      • RARP 响应:4
    • 源 MAC 地址:6 字节
    • 源 IP 地址:4 字节
    • 目的 MAC 地址:6 字节
    • 目的 IP 地址:4 字节

6.7 【掌握】IP帧格式, 主要是一些数据单位, 四字节, 八字节单位

更准确的说法是:IP 数据报格式

每个 IP 数据报包含两部分,一个头和一个正文(有效净荷)。头由一个20字节的定长部分和一个可选的变长部分组成。

IP 数据报头依次有:

  • 版本 (Version):4-bit
    • 记录数据报属于协议的哪个版本。
    • IPv4 填 4,IPv6 填 6。
  • IHL:4-bit
    • 指明头的长度。
    • IHL 的最小值为 5,表明头没有可选项;最大值为 15,把头的长度限制为最大 60 字节。
  • 区分服务 (Differentiated services):8-bit
    • 最初称为服务类型 (Type of service),包含 6 位。
      • 其中 3 位表示优先级,3 位代表主机最关心的是延迟、吞吐量或可靠性中的哪一种。
    • 现在,前 6 位用来标记数据包的服务类别,后 2 位用来携带显示拥塞通知信息。
  • 总长度 (Total length):16-bit
    • 描述数据报总长度,包括头和数据。
    • 最大长度是 65535 个字节。
  • 标识 (Indentification):16-bit
    • 用于让目标主机确定一个新到达的分段属于哪一个数据报。
    • 同一个数据报的所有段包含相同的标识值。
  • 标志位(Flags):3-bit
    • 保留位:1-bit,置 0
    • DF (Don’t Fragment):1-bit
      • 不分段标志位,不允许路由器分割该数据报。
      • 可用于发现路径 MTU 过程中。
    • MF (More Fragments):1-bit
      • 更多的段标志位,使接收方知道什么时候一个数据报的所有分段都到达了。
      • 除了最后一个段以外其他所有段都要设置这一位。
  • 分段偏移量 (Fragment offset):13-bit
    • 指明了该段在当前数据报中的位置。
    • 除了数据报的最后一个段以外,其他所有段的长度必须是 8 字节的倍数。
    • 每个数据报的第一个段的偏移量为 0,后面的段为前面所有段数据总字节数除以 8。
    • 由于该字段有 13 位,所以每个数据报最多有 8192 个“8字节” -> 最多有 8192 个段。
  • 生存期 (TTL):8-bit
    • 用于限制数据包生存期的计数器。
    • 单位为秒,故最大生存期为 255 秒。
    • 在每一跳上该计数器递减,而且当数据报在一台路由器上排队时间较长时,该计数器必须多倍递减。递减到 0 时,该数据包就被丢弃。
  • 协议 (Protocol):8-bit
    • 表示高层协议类型,指明该将数据包交给哪个传输进程(如 TCP、UDP)。
    • 协议的编号在整个 Internet 是全球统一的。
  • 头校验和 (Header checksum):16-bit
    • 计算校验和:先将头校验和字段置为 0,然后将整个 IP 头以 16 位为单位相加求和,溢出的部分加回低位,再将结果取反,得到的数据填入头校验和字段。
    • 验算:当数据到达时,同样将整个 IP 头以 16 位为单位相加求和,溢出的部分加回低位后取反,得到的结果如果是 0 则通过校验。
  • 源地址 (Source address):32-bit
  • 目标地址 (Destination address):32-bit
  • 选项 (Options):具有可变长度,最多为 40 字节。
    • 用于包含一些原设计中没有出现的信息
    • 安全 (Security):指明了信息的秘密程度。
    • 严格源路由 (Strict source routing):给出了从源到目标的完整路径。
      • 形式是一系列 IP 地址。数据报必须严格遵循这条路线向前传输。
    • 松散源路由 (Loose source routing):要求数据包穿越所指定的路由器列表。
      • 要求按照表中的顺序前进,但是允许在途中经过其他路由器。
    • 记录路由 (Record route):使沿途每个路由器附上自己的出口 IP 地址。
      • 便于系统管理员跟踪路由算法中的错误。
      • 最多只记录 9 个 IP 地址。
    • 时间戳 (Timestamp):使沿途每个路由器附上自己的 IP 地址和 32 位时间戳。

6.8 【掌握】ICMP协议

Internet 控制消息协议 (ICMP):当路由器在处理一个数据包的过程中发生了意外,通过 ICMP 向数据包的源端报告有关事件。

ICMP 定义了两类报文,差错报文和信息报文:

  • 差错报文
    • 源抑制 (Source quench):抑制发送过多分组的主机。
    • 超时 (Time exceeded):分组的 TTL 为 0,或被分片的报文在一定时间内没有收齐。
    • 信宿不可达 (Destination unreachable):报告子网、主机不能定位的信宿。
    • 重定向 (Redirect):数据包看起来被错误地路由。
    • 参数问题 (Parameter problem):分组头参数出错。
  • 信息报文
    • 回音请求/响应 (Echo request/reply)
    • 地址掩码请求/响应 (Address mask request/reply)
    • 路由器发现 (Router discovery)

6.9 【掌握】IP分段

MTU:路径最大传输单元

6.9.1 透明分段

当一个超大的数据包到达 G1,该路由器将它分割成多个段;每个段都发向同样的出口路由器 G2,在这里这些段被重新组合起来。

问题:

  • 每个分段中必须提供一个计数字段或者一个数据包结束标志位。
  • 所有数据包必须经过同一个出口路由器才能重组,路由受到限制,损失一些性能。
  • 路由器需要做大量的工作。

6.9.2 不透明分段

IP 采用这种方式工作。给每个段一个数据包序号、一个数据包内的绝对字节偏移量和一个指明是否到达数据包末尾的标志位。段到达目的地后被放置在一个缓冲区中以便重组

问题:

  • 增加头开销。
  • 数据包的丢失概率增加。

6.9.3 路径 MTU 发现

  • 每个 IP 数据包发出时在头设置一个比特 (Flags - DF),指示不允许对该数据包实施分段操作。
  • 如果一个路由器接收的数据包太大,它就生成一个报错数据包并发给源端,然后丢弃该数据包。
  • 当源端收到报错数据包,它就使用报错数据包携带的信息重新将出错数据包分段,每个段足够小到报错路由器能处理。
  • 如果沿路径前进又遇到一个 MTU 更小的路由器,则重复上述过程。

6.10 【掌握】CIDR和VLDM层次路由

6.10.1 A,B,C 类地址

类别 位数划分 主机地址范围 网络数量 每个网络可容纳主机数
A 类 最高位,0;
网络号,随后 7 位;
主机号,最后 24 位
1.0.0.0
127.255.255.255
2722^{7}−2 22422^{24}−2
B 类 最高两位,10;
网络号,随后 14 位;
主机号,最后 16 位
128.0.0.0
191.255.255.255
21422^{14}−2 21622^{16}−2
C 类 最高三位,110;
网络号,随后 21 位;
主机号,最后 8 位
192.0.0.0
223.255.255.255
22122^{21}−2 2822^{8}−2
D 类 最高四位,1110;
是组播地址
224.0.0.0
239.255.255.255
E 类 最高四位,1111;
是保留地址
240.255.255.255
255.255.255.255

6.10.2 CIDR, VLSM

  • 路由聚合:把多个小前缀的地址块合并成一个大前缀的地址块。
    由此产生的较大前缀地址块有时称为超网。
  • 无类域间路由 (CIDR, Variable Length Subnet Mask):同样一个 IP 地址,一台路由器把它当成 /22/22 的一部分对待(其中包含 2102^{10} 个地址),而另一台路由器把它当作一个更大的 /20/20 的一部分对待(其中包含 2122^{12} 个地址);每个路由器有相应的前缀信息。
    • 好处:比起传统的 A、B、C 类地址,CIDR 可以更有效地利用 IP 地址空间。
  • 可变长子网掩码 (VLSM, Variable Length Subnet Mask):在一个网络中,不同的子网掩码长度可以用于不同的子网。
    • 好处:可以更有效地利用 IP 地址空间。

分配地址时:

  • 2n2^n 个地址的块必须位于 2n2^n 的字节边界上,即地址的后 n 位为 0。
  • 先分配所需地址更多的地址块。
  • 确定子网掩码:首地址和末地址的前几位是相同的。
  • 分配 2n2^n 个地址,则子网掩码的长度是 32n32−n
  • 全 0 和 全 1 的主机号地址一般不用于标识主机或路由器接口。
  • 前缀允许重叠,规则是数据包按最具体的路由的方向发送,即具有最少 IP 地址的最长匹配前缀。
    • 例如有一个匹配 /20 掩码的表项,同时还有一个匹配 /24 掩码的表项,则使用 /24 表项来查询数据包的出境线路。

6.11 【掌握】NAT转换思想

NAT(Network Address Translation):允许一个网络在内部使用一组地址(通常是私有地址)和在外部使用另一组地址(通常是公共地址)

NAT的基本工作原理

  1. 地址转换:NAT设备(通常是路由器)将内部网络上的私有IP地址转换为外部网络上的公共IP地址,反之亦然。
  2. 端口映射:为了区分经过同一个公共IP地址的多个内部设备的流量,NAT通常使用端口号进行映射。

NAT的类型

  1. 静态NAT:将内部私有IP地址直接映射到一个固定的公共IP地址。每个内部地址都有一个对应的公共地址。
  2. 动态NAT:将内部地址动态映射到公共地址池中的地址。不是每个内部地址都有固定的公共地址。
  3. PAT(端口地址转换):也称为NAPT(网络地址和端口转换),它允许多个设备共享一个公共IP地址,通过不同的端口号区分不同的内部设备。
    • 一对多的映射关系
  • NAT的优点
    • 节省IP地址
    • 提高安全性
    • 简化网络管理
  • NAT的缺点
    • 通信延迟
    • 端到端连接的问题
    • 日志和审计的困难

7 传输层

7.1 【了解】UDP协议

UDP (User Datagram Protocol, 用户数据报协议):无连接的、不可靠的传输层协议。

  • 具有简单高效的特点。
  • 客户-服务器模式应用,如域名系统 (DNS)。
  • 话音、视频等实时多媒体应用。

7.2 【了解】一些应用层协议的端口号

常见协议:

协议 端口号 说明
FTP 20, 21 文件传输协议, 一般是 21 用于连接
TELNET 23 远程登录协议
SMTP 25 (通常情况)
465 (加密情况)
邮件发送协议
DNS 53 域名系统
HTTP 80 超文本传输协议
POP3 110 (通常情况)
995 (加密情况)
邮件收取协议
HTTPS 443 安全超文本传输协议

7.3 【理解】端口, 周知端口, 普通端口, 以及对应的端口号获取方法

端口:用于标识主机上的进程,是一个 16 bit的整数。

  • 端口号:0~65535
  • 端口号 0~1023 为周知端口,用于标识一些常用的服务。
  • 端口号 1024~65535 为普通端口,用于标识一些应用程序。
  • 端口号的获取方法:
    • 通过应用程序的配置文件、命令行参数、默认端口号。

7.4 【理解】UDP帧格式

UDP 数据报格式:

  • 头和有效载荷字段(8 字节)
    • 源端口:2 字节。
    • 目标端口:2 字节。
    • UDP 长度:2 字节。
      • 包含 8 字节的头和数据两部分的总长度。
      • 最小长度是 8 字节,刚好覆盖 UDP 头。
      • 最大长度是 65515 字节。因为 IP 头的总长度字段为 16 位,最大长度为 65535 字节;而 IP 头最少需要 20 字节。
    • UDP 校验和(可选):2 字节
      • 校验 UDP 头、数据和一个概念性的 IP 伪头。
      • IPv4 伪头包括:
        • 4 字节源地址
        • 4 字节目的地址
        • 1 字节 0
        • 1 字节 UDP 的协议号 17
        • 2 字节 UDP 长度(包括头,以字节为单位)
      • 与 IP 头中的头校验和算法类似。
      • 计算校验和时:
        • 当数据字段的长度为奇数字节时,则在数据字段填充一个额外的 0 字节(因为要以 16 位为单位计算校验和)。
        • 当结果为全 0 时,将校验和置为全 1。
        • 如果发送端没有计算校验和,则将该字段置为 0。
        • 验算时的步骤也和 IP 头校验和的验算类似,只是求和范围改成上述 UDP 的校验范围。

7.5 【理解】Socket编程的具体流程

原语 含义
SOCKET 创建一个新的通信端点
BIND 将一个本地地址关联到一个套接字上
LISTEN 宣布愿意接收连接,给出队列大小
ACCEPT 阻塞调用方,直到有人企图连接上来
CONNECT 主动尝试建立一个连接
SEND 在指定的连接上发送数据
RECV 从指定的连接上接收数据
CLOSE 释放指定连接
  • 服务器:依次执行 SOCKETBINDLISTENACCEPT
  • 客户端:不需要 BIND,依次执行 SOCKETCONNECT
  • 连接建立后,双方都可以使用 SENDRECV 收发数据
  • 数据传输结束后,双方使用 CLOSE 释放连接

7.6 【掌握】建立连接三次握手, 释放连接四次挥手

7.6.1 建立连接三次握手

下表详细描述了TCP三次握手的每个步骤:

步骤 发起方 接收方 标志位 序列号 seq 确认号 ack 描述
1 客户端 服务器 SYN X 客户端发送SYN包,初始化序列号为X。
2 服务器 客户端 SYN-ACK Y X+1 服务器确认客户端的SYN(X+1),初始化自己的序列号为Y。
3 客户端 服务器 ACK X+1 Y+1 客户端确认服务器的SYN-ACK(Y+1)。

完成这三个步骤后,TCP连接被成功建立,客户端和服务器可以开始数据传输。

同时建立的时候,即使两边同时分别为对方进行了三次连接的建立过程,那么实际上建立的仍然只有一个连接

7.6.2 释放连接四次挥手

下表详细描述了TCP四次挥手的每个步骤:

步骤 发起方 接收方 标志位 序列号 seq 确认号 ack 描述
1 客户端 服务器 FIN A 客户端发送FIN包,表示已经没有数据发送。
2 服务器 客户端 ACK A+1 服务器确认客户端的FIN(A+1)。
3 服务器 客户端 FIN B 服务器完成数据传输后,发送FIN包。
4 客户端 服务器 ACK B+1 客户端确认服务器的FIN(B+1)。
  • 步骤1:当客户端完成数据传输并准备关闭连接时,它发送一个FIN标志的数据包到服务器。这个数据包包含客户端的序列号A。
  • 步骤2:服务器接收到客户端的FIN包后,发送一个ACK标志的数据包作为响应。这个数据包包含对客户端序列号的确认(A+1)。
  • 步骤3:服务器在完成所有数据传输后,发送一个FIN标志的数据包到客户端,表示服务器端的数据也发送完毕。这个数据包包含服务器的序列号B。
  • 步骤4:客户端接收到服务器的FIN包后,发送一个ACK标志的数据包作为响应。这个数据包包含对服务器序列号的确认(B+1)。

完成这四个步骤后,TCP连接被成功终止。这个过程确保了双方都能够完成所有数据传输,并且正确地关闭连接。

7.7 【掌握】面向字节的TCP协议

  1. 可靠性
    • 数据确认和重传:TCP通过确认(ACK)和序列号机制来确保数据的可靠传输。每个发送的数据段都需要被接收方确认。如果确认未在预定时间内到达,发送方将重传数据。
    • 数据排序:TCP使用序列号来保证数据的正确排序,即使在网络中的传输顺序被打乱的情况下。
  2. 流量控制
    • 滑动窗口机制:TCP使用滑动窗口机制来控制发送方的数据流量,以防止接收方的缓冲区溢出。
    • 窗口调整:接收方根据自己的缓冲区大小动态调整窗口大小,并通过TCP段的窗口字段通知发送方。
  3. 拥塞控制
    • 慢启动和拥塞避免:TCP使用慢启动算法在连接开始时逐渐增加网络流量,以避免网络拥塞。一旦达到阈值,它转换到拥塞避免算法,通过更加温和的方式增加流量。
    • 快速重传和快速恢复:在丢包的情况下,TCP通过快速重传和快速恢复算法来恢复数据传输,而不是简单地等待重传计时器超时。
  4. 连接的建立和释放
    • 三次握手:TCP使用三次握手机制来建立连接。这包括发送方发送SYN,接收方回复SYN-ACK,发送方再次发送ACK。
    • 四次挥手:TCP连接的释放使用四次挥手过程,包括两个方向上的FIN和ACK的交换。
  5. 数据传输
    • 字节流传输:TCP将应用层的数据视为一个无结构的字节流。发送方可以在任何时候发送任意大小的数据,TCP负责将这些数据划分为合适大小的段进行传输。
  6. 定时器
    • 保持存活定时器:用于在长时间无数据交换时检测对方是否仍然可达。
    • 闲置定时器:用于在连接空闲时关闭连接,以释放资源。
    • 持续定时器:用于处理零窗口情况,确保数据传输能够继续进行。
    • 重传定时器:用于控制数据段的重传。
    • 捎带应答定时器:用于优化ACK的发送,减少网络上的ACK报文数量。
  7. 接收端缓存和傻瓜窗口
    • 接收端缓存:接收方使用缓存来暂存接收到的数据,直到应用程序读取。
    • 傻瓜窗口综合征:如果应用程序每次只读取少量数据,可能导致发送方频繁发送小数据段,这种情况称为傻瓜窗口综合征。
  8. 网络承载能力
    • TCP的拥塞控制机制能够根据网络的承载能力动态调整数据传输速率,以避免过度拥塞网络。

7.8 【掌握】滑动窗口与流量控制和拥塞控的关系

7.8.1 滑动窗口

每个 TCP 连接需要维护两个窗口:

  • 接收窗口 (rwnd):接收端根据目前可用接收缓存大小所许诺的最新窗口值。
    • 在滑动窗口中有所涉及。
  • 拥塞窗口 (cwnd):发送端根据自己估计的网络拥塞程度而设置的窗口值。
    • 窗口大小是任何时候发送端可以向网络发送的字节数。

发送端发送窗口的上限值 应该取决于 rwnd 和 cwnd 中的较小值

TCP 拥塞控制算法过程:

  • 慢速启动
    • 当一个连接初始化时,将拥塞窗口置为一个最大数据段长度 (MSS),并设置慢启动阈值 (ssthresh)。
      • MSS (maximum segment size):最大报文段长度,是 TCP 报文段中的数据字段的最大长度。
      • ssthresh (slow start threshold):慢启动阈值,是一个动态变化的值。
    • 发送端的发送窗口不能超过 rwnd 和 cwnd 中的最小值,在这里假定接收端不进行流量控制。
    • 发送端收到一个确定,就将拥塞窗口加 1 (MSS)。
      即每经过一个 RTT,拥塞窗口就增加为前一个 RTT 时的两倍,即拥塞窗口从 1 开始按指数规律增长。
  • 加法递增乘法递减 (AIMD)
    • 当拥塞窗口增长到 ssthresh 时,TCP 就从慢速启动切换到加法递增。
    • 即每轮将拥塞窗口加 1,使拥塞窗口按线性规律增大。
    • 如果出现数据包丢失(RTO 超时),就将当前拥塞窗口值减半,作为新的 ssthresh(乘法递减),同时将拥塞串口变为 1。TCP 重新开始慢速启动过程。
  • 快速重传
    • 发送端只要连续收到三个重复的 ACK 即可断定有数据包丢失。
    • 因为丢失数据包后续的数据包触发接收端返回的确认携带相同的确认号(期望收到的数据包没变)。
    • 上述情况下立即重传丢失的数据包而不必等待 RTO 超时。
      同时像超时情况下一样处理拥塞窗口(乘法递减)。
  • 快速恢复 (Reno 算法,是 TCP 推荐算法,不是必须)
    • 当发送端收到连续三个重复 ACK 时,重新设置 ssthresh 为当前拥塞窗口的一半。
    • 但拥塞窗口不是设置为 1,而是设置成 ssthresh + 3。
    • 如果收到了重复的 ACK(说明又有丢失数据包之后的数据包到达了接收端,网络里的数据包减少了一个),则每收到一个重复 ACK,就将拥塞窗口加 1。
    • 若收到了重传数据包的 ACK(新的 ACK),则将拥塞窗口设置到 ssthresh,再次执行 AIMD。

总结:

  • 主体的 TCP 只包括慢启动和拥塞避免,遇到丢包的时候会 cwnd 变为 1,然后再次执行慢启动和拥塞避免
  • 快速重传和快速恢复是对主体 TCP 的补充,通过预测机制在丢包之前就重置 cwnd 为 ssthresh + 3(而不是丢包了再重置为 1),然后再次执行 AIMD

7.9 【掌握】TCP帧格式

TCP 数据报格式:

  1. 源端口号(16位):标识发送端应用程序的端口号。
  2. 目的端口号(16位):标识接收端应用程序的端口号。
  3. 序列号 seq(32位):用于数据重组的序列号,标识从TCP发送端发送的数据字节流中的第一个字节的序号。
  4. 确认号 ack(32位):如果ACK标志位被设置,这个值是接收端期望从发送端接收到的下一个字节的序列号。
  5. 数据偏移(4位):指示TCP头部的长度,即数据开始之前的字节数。
  6. 保留(4位):保留未来使用,目前应置为0。
  7. 标志位(8位):包含多个控制标志,如:
    • CWR & ECE:用于显示拥塞通知。
      • 当 TCP 接收端收到了来自网络的拥塞指示后,就设置 ECE 以便给 TCP 发送端发 ENC-Echo 信号,告诉发送端放慢发送速率。
      • TCP 发送端设置 CWR,给接收端发 CWR 信号,告诉接收端已放慢发送速率,无需继续发送 ENC-Echo 信号。
    • URG(紧急指针标志)
    • ACK(确认序列号标志)
    • PSH(推送函数标志)
    • RST(重置连接标志)
    • SYN(同步序列号标志,用于建立连接)
    • FIN(结束发送标志,用于释放连接)
  8. 窗口大小(16位):控制发送端的数据量,用于流量控制。
  9. 校验和(16位):用于错误检测的校验和。
  10. 紧急指针(16位):仅当URG标志被设置时有效,指出紧急数据的结束位置。
  11. 选项 optional(可变长度):可选字段,用于各种控制和扩展功能,如最大报文段长度(MSS)。
  12. 填充 padding:确保TCP头部长度是32位字的整数倍。

7.10 【掌握】TCP的保持存活, 闲置, 持续, 重传, 捎带应答定时器

  1. 连接建立定时器(Connection Establishment Timer)
    • 用途:用于控制连接建立过程中SYN包的重传。
    • 场景:如果在发送SYN包后没有收到SYN-ACK响应,此定时器会触发重传SYN包。
  2. 保持存活定时器(Keep-Alive Timer)
    • 用途:用于维护在长时间无数据交换的情况下的活动连接。
    • 场景:如果连接在一段时间内没有数据交换,TCP会发送保持存活探测包以确认对方是否仍然可达。
  3. 闲置定时器(Idle Timer)
    • 用途:用于确定连接在无数据传输时应保持多久。
    • 场景:在连接空闲一定时间后,可能会触发连接的关闭。
  4. 重传定时器(Retransmission Timer)
    • 用途:控制丢失或未确认数据段的重传。
    • 场景:如果发送的数据段在一定时间内未收到ACK确认,该定时器会触发数据段的重传。
  5. ACK延时定时器(Delayed ACK Timer)(捎带应答定时器)
    • 用途:允许接收方延迟发送ACK,以期待能够将ACK与响应数据一起发送。
    • 场景:接收方收到数据段后,启动该定时器,如果在定时器超时前没有收到其他数据段,则发送ACK。否则,随其他数据段一起发送ACK。
  6. 持续定时器(Persist Timer)
    • 用途:用于处理零窗口大小的情况,确保数据传输能够继续进行。
    • 场景:为了让发送端暂停发送数据,接收端发送一个窗口大小为 0 的确认。如果接收方通告的窗口大小为零,发送方使用持续定时器定期发送探测报文,以确定何时可以继续发送数据。

7.11 【掌握】TCP流量控制与接收端缓存关系, 傻瓜窗口

7.11.1 TCP流量控制与接收端缓存关系

TCP流量控制是一种机制,用于确保发送方不会发送超过接收方能够处理的数据量。这种控制是通过接收端的缓存(接收窗口)来实现的。

接收端缓存

  • 缓存大小:接收端为每个TCP连接分配一个缓存区,用于暂存接收到的数据,直到应用程序准备好读取这些数据。
  • 窗口大小通告:接收端通过TCP头部的窗口字段告知发送方其当前可接受的最大数据量(即接收窗口的大小)。

流量控制过程

  • 动态调整:接收端根据其缓存的使用情况动态调整窗口大小,并通过确认段通告给发送方。
  • 防止溢出:发送方根据接收方的窗口大小调整其发送速率,以防止接收端缓存溢出。

7.11.2 傻瓜窗口综合征(Silly Window Syndrome)

傻瓜窗口综合征是TCP流量控制中的一个问题,当发送方或接收方的行为导致网络效率降低时发生。

发生原因

  • 接收方:如果接收应用程序每次只从缓存中读取少量数据,接收窗口可能只会小幅度增加,导致发送方频繁发送小数据包。
  • 发送方:如果发送方每次只发送少量数据,即使接收窗口较大,也会导致网络资源的低效使用。

解决方法

  • Nagle算法:一种解决发送方问题的方法,通过累积小的数据包并一次性发送,减少了网络上的小数据包数量。
  • 延迟确认:接收方可以延迟发送ACK,以期待更大的数据窗口和更高效的数据传输。

通过这些机制,TCP试图优化数据传输过程,减少网络拥塞,并提高整体的传输效率。

7.12 【掌握】TCP拥塞控制与网络承载的关系, 慢启动, 拥塞避免, 快重传, 快恢复

7.8.1 滑动窗口

8 应用层

8.1 【了解】HTTP的工作过程

HTTP(超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议。它被设计用于Web浏览器和Web服务器之间的通信,但也可以用于其他目的。HTTP遵循经典的客户端-服务器模型,客户端打开一个连接以发起请求,然后等待直到收到服务器的响应。下面是HTTP的基本工作过程:

  1. 客户端请求(Request):当你在浏览器中输入一个URL(统一资源定位符)或点击一个链接时,浏览器就会向服务器发送一个HTTP请求。这个请求包括:
    • 请求行:包含请求方法(如GET、POST)、请求的资源的URL和HTTP版本。
    • 请求头:包含了关于浏览器、请求的资源、客户端的信息等。
    • 请求体:对于某些类型的请求(如POST),这部分包含发送的数据。
  2. 服务器响应(Response):服务器接收并处理请求后,会返回一个HTTP响应。这个响应包括:
    • 状态行:包含HTTP版本、状态码(如200表示成功,404表示未找到)和状态消息。
    • 响应头:包含了服务器的信息、内容类型、内容长度等。
    • 响应体:包含了请求的资源的内容,比如HTML文档。
  3. 持续连接:HTTP/1.1版本默认使用持续连接(Persistent Connection),即TCP连接默认不会在发送和接收数据后立即关闭,允许多个请求/响应在同一连接上发送。
  4. 无状态协议:HTTP是一个无状态协议,这意味着服务器不会保留任何数据(状态)之间的请求。但是,为了维护状态,可以使用诸如Cookies之类的机制。
  5. 安全性:当HTTP与SSL/TLS协议结合时,成为HTTPS,即HTTP安全版,它通过加密传输数据,提供数据完整性,确保安全性。

8.2 【了解】SMTP和POP3的工作过程

SMTP(简单邮件传输协议)和POP3(邮局协议版本3)是电子邮件传输和接收的两个主要协议。它们在电子邮件通信中扮演着关键的角色。

8.2.1 SMTP的工作过程

SMTP主要用于发送和转发电子邮件。其工作流程如下:

  1. 邮件发送:当用户通过电子邮件客户端(如Outlook、Thunderbird等)撰写一封邮件并点击发送时,邮件客户端会将邮件和收件人的地址发送给SMTP服务器。
  2. 服务器处理:SMTP服务器接收到邮件后,首先检查收件人的域名,并将邮件转发到收件人域的SMTP服务器。如果收件人在同一域中,邮件将直接存储在服务器上。
  3. 邮件转发:如果收件人在不同的域,SMTP服务器会查询DNS服务器以获取收件人域的邮件服务器地址,并将邮件转发到该服务器。
  4. 邮件队列:如果初次发送失败,邮件会被放入队列中,SMTP服务器会定期尝试重新发送。

8.2.2 POP3的工作过程

POP3主要用于从邮件服务器接收邮件。其工作流程如下:

  1. 连接服务器:当用户打开他们的邮件客户端,客户端会连接到配置的POP3服务器。
  2. 用户认证:客户端发送用户名和密码到服务器进行认证。
  3. 下载邮件:一旦认证成功,POP3服务器会将服务器上的新邮件传输到客户端。根据配置,邮件可能会在服务器上被删除或保留。
  4. 断开连接:邮件下载完成后,客户端会断开与POP3服务器的连接。

8.2.3 SMTP与POP3的关系

  • SMTP和POP3协同工作:SMTP负责发送和转发邮件,而POP3负责接收邮件。这两个协议通常在电子邮件的发送和接收过程中一起工作。
  • 使用不同端口:SMTP通常使用端口25或587,而POP3通常使用端口110。

8.3 【理解】DNS的结构与工作过程

将域名(如 www.example.com)转换为IP地址(如 192.0.2.1

  1. 层次结构:DNS具有树状的层次结构。在最顶层是根域(root),下一层是顶级域(TLDs,如 .com.net.org),再下一层是二级域(如 example.com)。
  2. 域名服务器:整个DNS系统由多个域名服务器组成,这些服务器分布在全球各地。它们分为不同类型:
    • 根域名服务器:负责管理顶级域名服务器的地址。
    • 顶级域名服务器:负责管理在该顶级域下注册的所有域名的地址。
    • 权威域名服务器:负责存储特定域名的DNS记录,如IP地址。
    • 本地域名服务器:通常由ISP(互联网服务提供商)提供,作为客户端查询DNS的第一站。

DNS的工作过程

  1. 域名解析请求:当用户在浏览器中输入一个URL或请求一个域名时,这个请求首先被发送到本地DNS服务器。
  2. 查询根域名服务器:如果本地DNS服务器没有缓存该域名的记录,它会向根域名服务器查询。
  3. 查询顶级域名服务器:根域名服务器会返回管理该域名后缀(如 .com)的顶级域名服务器的地址。本地DNS服务器随后向该顶级域名服务器发出查询。
  4. 查询权威域名服务器:顶级域名服务器会返回负责该具体域名(如 example.com)的权威域名服务器的地址。本地DNS服务器再向该权威域名服务器查询。
  5. 获取IP地址:权威域名服务器返回该域名对应的IP地址给本地DNS服务器,本地DNS服务器再将这个IP地址返回给用户的设备。
  6. 缓存结果:本地DNS服务器通常会缓存这个结果,以便下次相同的请求可以更快地被解析。

重要性

  • DNS缓存:为了减少解析时间和减轻根服务器的负担,DNS查询结果会在各级DNS服务器上缓存一定时间。
  • DNS轮询:为了负载均衡和故障转移,一个域名可以对应多个IP地址,DNS服务器可以轮询这些地址。

8.4 【理解】FTP的工作过程

FTP工作在应用层,使用TCP作为传输层协议,确保数据的可靠传输

基本组件

  1. FTP服务器:这是存储文件的服务器,用户可以从这里下载或向这里上传文件。
  2. FTP客户端:用户使用的软件,用于与FTP服务器进行交互,如FileZilla、WinSCP等。
  3. 端口号:FTP通常使用两个端口号:21用于控制命令的传输,20用于数据的传输。

工作过程

  1. 建立连接:FTP客户端首先与FTP服务器上的21号端口建立一个TCP连接,用于发送控制命令。
  2. 认证过程:用户需要提供用户名和密码进行认证。有些FTP服务器也可能允许匿名访问。
  3. 发送命令:一旦认证成功,用户可以通过控制连接发送命令。这些命令包括请求文件列表、改变服务器上的目录、上传和下载文件等。
  4. 数据传输:对于文件上传或下载的请求,FTP服务器会打开20号端口与客户端建立另一个连接,用于数据传输。
  5. 传输模式:FTP支持两种数据传输模式:ASCII模式用于文本文件,而二进制模式用于非文本文件(如图片、视频等)。
  6. 传输完成:文件传输完成后,数据连接被关闭,但控制连接仍然保持,直到用户发送退出命令。

主动模式与被动模式

  • 主动模式:在主动模式下,服务器主动连接到客户端指定的数据端口进行数据传输。
  • 被动模式:在被动模式下,客户端连接到服务器指定的数据端口进行数据传输。这种模式常用于客户端位于防火墙后的情况。

9 网络安全

这部分内容我就不做整理了(指指点点)

网安人应该都知道吧(吧)

附:考纲

了解 理解 掌握

  • 这三等级依次递进
  • 表示考试考察的可能性逐渐增大
  • 表示考题难度的逐渐提高
  • 并不完全绝对字面意义
  1. 概述
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 网络的分类
    理解 PDU/PCI/SDU的相互关系以及所谓的封装思想
    掌握 ISO-OSI模型
    掌握 TCP/IP模型
  2. 物理层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 各种传输介质以及大概的速率
    了解 有中继器和集线器这俩玩意
    理解 物理层的功能
    理解 调制方法和多路复用
    掌握 Nyquist定理, Shannon定理
    掌握 各种交换技术和时序图画法
    掌握 延时分析, 辅以时序图
  3. 数据链路层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 HDLC和PPP协议
    理解 比特流编辑成帧
    理解 纠错检错的最小距离
    掌握 数据链路层的功能
    掌握 奇偶校验, CRC, Hamming纠错码
    掌握 基本数据链路协议
    掌握 滑动窗口协议
  4. 局域网与介质访问控制
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    理解 Aloha协议, 也就是广播信道分配的雏形
    掌握 CSMA协议, 类比在宿舍排队洗衣服
    掌握 MAC帧格式, 主要是字节限制以及为什么限制
    掌握 网桥, 交换机
  5. 网络层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    理解 无连接服务的具体思想
    理解 拥塞控制的漏桶与令牌桶算法
    掌握 网络层的功能
    掌握 DV和LS以及分层路由的算法思想
    掌握 路由器的工作原理, 尤其是路由表
  6. IP层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 有IPv6这个东西
    理解 IP协议栈与协议族
    理解 反向ARP以及代理ARP过程
    理解 IP下的路由协议
    理解 IGMP协议
    掌握 DHCP过程, ARP过程
    掌握 IP帧格式, 主要是一些数据单位, 四字节, 八字节单位
    掌握 ICMP协议
    掌握 IP分段
    掌握 CIDR和VLDM层次路由
    掌握 NAT转换思想
  7. 传输层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 UDP协议
    了解 一些应用层协议的端口号
    理解 端口, 周知端口, 普通端口, 以及对应的端口号获取方法
    理解 UDP帧格式
    理解 Socket编程的具体流程
    掌握 建立连接三次握手, 释放连接四次挥手
    掌握 面向字节的TCP协议
    掌握 滑动窗口与流量控制和拥塞控的关系
    掌握 TCP帧格式
    掌握 TCP的保持存活, 闲置, 持续, 重传, 捎带应答定时器
    掌握 TCP流量控制与接收端缓存关系, 傻瓜窗口
    掌握 TCP拥塞控制与网络承载的关系, 慢启动, 拥塞避免, 快重传, 快恢复
  8. 应用层
    要求 说明
    了解 英文缩写的具体单词以及对应中文
    了解 HTTP的工作过程
    了解 SMTP和POP3的工作过程
    理解 DNS的结构与工作过程
    理解 FTP的工作过程
  9. 网络安全
    要求 说明
    了解 网络安全的典型协议名称
    了解 网络上常见的攻击以及分类
    理解 公私钥密码