# 物理层、数据链路层

# 双工模式

双工(Duplex) 是指在通信链路上的两个方向同时进行数据传输的能力。

  • 时分双工(TDD):在同一频率上,通过时间划分来实现双向通信。
  • 频分双工(FDD):在不同频率上,同时进行上行和下行通信。

# 多路访问技术

多路访问(Multi-Access) 技术允许多个用户共享同一通信信道。根据分配方式的不同,可分为三类。

# 固定分配的多路访问技术

信道资源预先分配给用户,适用于用户数量少且通信量固定的场景。

  • 时分多址(TDMA):将时间划分为多个时隙,每个用户在固定的时隙内传输数据。
  • 频分多址(FDMA):将频带划分为多个子频带,每个用户使用固定的子频带进行通信。
  • 码分多址(CDMA):又称扩频多址(SSMA)。通过为每个用户分配唯一的扩频码,使多个用户可在同一时间、同一频率上通信。
    • 芯片周期(chip duration) TcT_c:扩频后信号的单个比特时间。
    • 扩频因子(spread factor) N=Tb/TcN = T_b / T_c,其中 TbT_b 是原始数据比特的时间。
  • 空分多址(SDMA):利用智能天线技术,通过对空间维度进行划分,实现多用户同时接入。

# 受控访问的多路访问技术

用户需要遵循特定规则才能访问信道,以避免冲突。

  • 轮询(Polling):由一个主设备(primary device)轮流询问各个从设备(secondary devices)是否有数据要发送。通过 SEL、ACK 和 NAK 等控制帧进行交互。
  • 令牌传递(Token Passing):一个特殊的令牌在网络中依次传递,只有持有令牌的设备才能发送数据。

# 随机访问的多路访问技术

任何用户都可以在任何时间尝试发送数据,但需要处理可能发生的冲突。

  • 纯 ALOHA(Pure ALOHA)
    • 信道容量 RR(比特/秒)。
    • 帧长度 bb(比特/帧)。
    • 帧传输时间 Tfr=b/RT_{fr} = b/R(秒)。
    • 平均帧到达率 λ\lambda(帧/秒),总通信量到达率 λt\lambda_t(帧/秒)。
    • 归一化吞吐量 ρ=λTfr\rho = \lambda T_{fr}
    • 归一化总通信量 G=λtTfrG = \lambda_t T_{fr}
    • 泊松过程τ\tau 时间内到达 kk 帧的概率为 P(k)=(λτ)keλτ/k!P(k) = (\lambda\tau)^k e^{-\lambda\tau} / k!
    • 成功传输概率 Ps=P(k=0,τ=2Tfr)=e2λtTfrP_s = P(k=0, \tau = 2T_{fr}) = e^{-2\lambda_t T_{fr}}
    • 吞吐量公式ρ=Ge2G\rho = Ge^{-2G}
  • 分槽 ALOHA(Slotted ALOHA)
    • 将时间划分为离散的时槽,只允许在时槽开始时发送数据。
    • 成功传输概率 Ps=P(k=0,τ=Tfr)=eλtTfrP_s = P(k=0, \tau = T_{fr}) = e^{-\lambda_t T_{fr}}
    • 吞吐量公式ρ=GeG\rho = Ge^{-G}
  • 载波监听多路访问(CSMA):在发送数据前先监听信道是否空闲。
    • 1-persistent:持续监听信道。如果信道空闲,立即发送;如果信道忙,持续监听直到其空闲后立即发送。
    • non-persistent:如果信道忙,等待一个随机时间后再重新监听。
    • p-persistent:如果信道空闲,以概率 pp 发送,以概率 1p1-p 等待下一个时槽再发送。
  • 带冲突检测的 CSMA(CSMA/CD):边发送边监听,一旦检测到冲突立即停止发送。
  • 带冲突避免的 CSMA(CSMA/CA):发送数据前先进行预约,避免冲突。

# 多路复用技术

多路复用(Multiplex) 技术允许多个数据流共享同一物理介质。

  • 同步数字体系(SDH):基于时分复用(TDM),将不同信号流在时间上交错排列。
  • 波分复用(WDM):基于频分复用(FDM),将不同波长的光信号在同一光纤中传输。

# 交换技术

# 电路交换

在通信前建立一条专用的物理通路,直至通信结束才释放。适用于长连接,如电话。

  • 组成部分
    • 网络接口(NI):连接交换机与电路。
    • 控制单元(CU):控制交换结构(SF)。
    • 交换结构(SF):实现连接的物理设备。
  • 空间交换(Space Division Switching):通过物理连接实现交换。
    • 多级交换(Multi-stage Switch):通过增加中间级数来减少端口数量,但可能出现阻塞(Blocking)
    • 阻塞:当输入和输出端口都空闲,但两者之间的连接路径已被占用时,就会发生阻塞。
    • 三级交换(Clos Network):一种三级交换网络,当满足中间级交换机数量 r2n1r \ge 2n-1 时,可实现无阻塞。其中,nn 为第一级交换机上的输入端口数。

# 时分复用

基于时分复用原理实现交换。

  • 时隙交换(TSI):通过交换时隙的顺序来实现数据交换。

# 网络层

# 内部路由算法

内部路由算法用于在同一个自治系统(AS)内确定数据传输路径。

  • 洪泛法(Flooding):节点收到数据包后,将其发送给除接收接口外的所有邻居。
  • 距离矢量法(Distance-Vector,D-V):基于 Bellman-Ford 算法。
    • 原理:每个路由器维护一个到网络中所有目的地的距离矢量,并定期与邻居交换信息。根据邻居发送的距离信息和自身到邻居的距离来更新自己的距离矢量,直至收敛。
    • 典型算法:RIP(Routing Information Protocol)。
  • 链路状态法(Link-State,L-S):基于 Dijkstra 算法,又称最短路径树算法。
    • 原理:每个路由器向网络中所有其他路由器发送其所有邻居的信息(链路状态),每个路由器收集完整的网络拓扑信息,并独立计算出到达所有目的地的最短路径。
    • 典型算法:OSPF(Open Shortest Path First)。

# 外部路由算法

外部路由算法用于在不同的自治系统(AS)之间确定数据传输路径。

  • 自治系统(AS):由一个或多个网络实体组成,使用共同的路由策略。
    • AS 内部使用内部网关协议(IGP),例如 RIP 和 OSPF。
    • AS 之间使用外部网关协议(EGP),例如 BGP。
  • BGP(Border Gateway Protocol):目前互联网上唯一的外部路由协议。
    • BGP 路由:包含前缀(Prefix)AS-PATH(经过的 AS 路径)和NEXT-HOP(下一跳地址)等属性。
    • BGP 消息
      • OPEN:建立连接。
      • UPDATE:更新路由信息。
      • KEEPALIVE:保持连接。
      • NOTIFICATION:通知错误。
    • BGP 算法
      • 本地偏好值(Local preference value):用于选择出站路由。
      • AS-PATH 长度:选择 AS-PATH 最短的路径。
      • 热土豆路由(Hot potato routing):选择最近的下一跳路由器。
    • BGP 策略:AS 可以根据策略选择是否向邻居传递某些路由信息,实现对路由信息的控制。
  • 内部路由与外部路由的区别
    • 内部路由(Intra-AS Routing)主要关注性能,如时延和吞吐量。
    • 外部路由(Inter-AS Routing)主要关注策略,如路由信息的过滤和选择。

# 传输层

# 基本功能

  • 分发(Demultiplexing):根据端口号将数据分发给相应的应用程序。
  • 错误检测(Error detection):使用校验和(checksum) 检测数据是否损坏。
  • 可靠传输与流量控制(可选):TCP 提供,UDP 不提供。

# UDP 协议

UDP(User Datagram Protocol) 是一种无连接的、不可靠的传输协议。

  • 特点
    • 细粒度控制(Fine-grain control):应用程序写入数据后立即发送。
    • 无连接建立延迟(No connection set-up delay):无需三次握手,降低延迟。
    • 无连接状态(No connection state):无需维护缓冲区、参数、序列号等状态信息。
    • 小头部开销(Small header overhead):UDP 头部只有 8 字节。
  • 适用场景
    • 对实时性要求高、允许少量丢包的多媒体传输,如实时音视频。
    • 简单的请求-应答应用,如 DNS 和 DHCP。

# TCP 协议

TCP(Transmission Control Protocol) 是一种面向连接的、可靠的、基于字节流的传输协议。

  • 特点
    • 字节流服务(Stream-of-bytes service):将数据视为无结构的字节流。
    • 面向连接(Connection-oriented):通信前需建立连接。
    • 可靠性(Reliable)
      • 校验和(Checksum):检测数据损坏。
      • 序列号(Sequence number):保证数据包顺序,检测丢包。
      • 确认(Acknowledgement):确保数据已成功接收。
      • 重传(Retransmission):对未确认的数据进行重传。
    • 流量控制(Flow control):根据接收方的处理能力调整发送速率。
    • 拥塞控制(Congestion control):避免网络拥塞。

# 初始序列号(ISN)

  • ISNInitial Sequence Number,一个 32 位的随机数,每 4 微秒增加 1,确保在 4.55 小时内不会重复,以防止旧连接的数据包干扰新连接。

# 连接管理

  • 三次握手
    • 第一步:客户端发送 SYN 包。
    • 第二步:服务器返回 SYN+ACK 包。
    • 第三步:客户端发送 ACK 包。
    • 如果客户端未收到 SYN+ACK,会等待 3-6 秒后重发 SYN。
  • 四次挥手
    • 第一步:主动关闭方发送 FIN 包。
    • 第二步:被动关闭方发送 ACK 包确认。
    • 第三步:被动关闭方数据传输完毕后发送 FIN 包。
    • 第四步:主动关闭方发送 ACK 包确认,完成连接关闭。

# 可靠传输

  • 自动重传请求(ARQ)
    • 停等(Stop-and-Wait):最简单的 ARQ,发送一个数据包后必须等待确认,传输速率受 RTT(往返时延)限制。
    • TCP 滑动窗口(Sliding Window):一次发送多个数据包,提高传输效率。
  • 超时重传(Time out retransmit):根据估计的 RTT 设置超时时间,如果超时未收到确认,则重传数据包。
  • 快速重传(Fast retransmit):当发送方连续收到 3 个重复的 ACK 包时,立即重传丢失的数据包,无需等待超时。

# 流量控制与拥塞控制

  • 流量控制:使用滑动窗口机制,通过接收窗口(Receiver Window) 的大小来限制发送方的数据发送量,防止接收方缓冲区溢出。
  • 拥塞控制
    • 拥塞窗口(Congestion Window):由发送方维护,用于限制发送的数据量,以避免网络拥塞。
    • 发送窗口:实际发送数据量,其大小等于min(接收窗口大小, 拥塞窗口大小)
    • 拥塞控制算法
      • 慢启动(Slow Start):连接开始时,拥塞窗口呈指数增长。
      • 拥塞避免(Congestion Avoidance):当拥塞窗口达到慢启动阈值后,呈线性增长。
      • 加性增加乘性减少(AIMD):在拥塞避免阶段,拥塞窗口线性增加,一旦发生丢包则乘性减少。
      • 快速恢复(Fast Recovery):快速重传后,拥塞窗口会进入快速恢复阶段。