总复习

这个「总复习」是根据老师提供的总复习 PPT 整理的。

大部分内容实际上都是从原笔记复制过来的,额外包括少量一些我复习时新增的注记,以及原笔记不包括的内容等。

计算机网络和因特网

什么是主机/端系统、分组、协议?

前两个没记过,「协议」则跟记的不一样(更完善)。

主机/端系统

  • 定义:指直接参与网络通信的终端设备,可以是数据的发送方接收方
  • 示例:个人电脑、智能手机、服务器、物联网设备(如智能家居设备)等。
  • 特点
    • 运行网络应用程序(如浏览器、邮件客户端)。
    • 位于网络边缘(与路由器、交换机等中间设备相对)。
    • 拥有唯一的网络标识(如 IP 地址、MAC 地址)。

分组

  • 定义:网络中传输数据的基本单元,由首部和载荷组成。
  • 作用:大数据块(如文件)会被分割为多个分组传输,以提高网络效率和可靠性。
  • 结构
    • 首部(Header):包含控制信息(如源/目的地址、序号、校验和等)。
    • 载荷(Payload):实际传输的数据(如 HTTP 请求、视频片段)。

协议

协议定义了网络实体之间发送和接收的消息的格式和顺序,以及在消息传输和接收时采取的操作。

  • 定义:网络通信中预先定义的规则和标准,确保不同设备能正确交互。
  • 核心功能
    • 语法:数据格式(如二进制、JSON)。
    • 语义:控制信息的含义(如 HTTP GET 请求的含义)。
    • 时序:通信顺序(如 TCP 三次握手)。
  • 常见协议
    • 应用层:HTTP(网页浏览)、SMTP(电子邮件)。
    • 传输层:TCP(可靠传输)、UDP(高效传输)。
    • 网络层:IP(路由寻址)。
    • 链路层:以太网协议(局域网通信)。

客户、服务器?

属性 客户端(client) 服务器(server)
IP 地址 可能有动态 IP 地址 固定 IP 地址
运行方式 按需启动 持续运行(作为守护进程 daemon 运行)
请求/响应角色 主动发起请求 响应请求
示例 浏览器、邮件客户端 Web 服务器、邮件服务器

电路交换和分组交换的对比?

电路交换(Circuit Switching)

  • 原理:为每次通信建立专用电路(dedicated circuit),例如传统电话网络。
  • 过程:
    1. 源节点发送预留请求到目标节点。
    2. 交换机完成电路建立(admission control)。
    3. 数据传输。
    4. 发送拆除请求释放电路。
  • 优点:性能可预测,切换简单快速。
  • 缺点:资源独占导致效率低下(尤其在突发流量时),电路建立增加延迟。

分组交换(Packet Switching)

  • 原理:主机将应用层消息拆分为分组(packet),逐跳转发至目标。
  • 特点:
    • 每个分组包含目标地址。
    • 使用缓冲区应对瞬时过载。
  • 优点:资源利用率高,实现简单,鲁棒性强(可绕过故障)。
  • 缺点:性能不可预测,需要缓冲管理与拥塞控制。

节点处理时延、排队时延、传输时延、传播时延、吞吐量?

延迟

延迟由以下四个部分组成:

  • 传输时延(Transmission Delay)
    • 公式:传输时延=分组大小链路传输速率\text{传输时延} = \dfrac{\text{分组大小}}{\text{链路传输速率}}
    • 示例:1000 bits/100 Mbps=105 秒\pu{1000 bits} / \pu{100 Mbps} = \pu{10^{-5} \text{秒}}
  • 传播时延(Propagation Delay)
    • 公式:传播时延=链路长度传播速度\text{传播时延} = \dfrac{\text{链路长度}}{\text{传播速度}}
    • 示例:30 km/3×108 m/s=104 秒\pu{30 km} / \pu{3 x 10^8 m/s} = \pu{10^{-4} \text{秒}}
  • 排队时延(Queuing Delay)
    • 受流量混合和交换机内部特性影响,通常用统计方法描述(如平均值、方差)。
    • 瞬时过载是常见现象,可能导致队列增长。
  • 处理时延(Processing Delay)
    • 交换机处理分组所需时间,通常可忽略。

未过载时的排队时延示意图:

过载时的排队时延示意图:

过载丢包示意图:

端对端延迟:

吞吐量

传输速率为 Rbit/sec\pu{\mathit{R} bit/sec},文件大小为 Fbit\pu{\mathit{F} bit},分组大小为 Lbit\pu{\mathit{L} bit},则传输时间 T=F/R+传播时延T = F / R + \text{传播时延},平均吞吐量 =F/TR = F / T \approx R

端对端吞吐量:

5 层因特网协议栈?每层的作用?

术语:报文、报文段、数据报、帧

原笔记没有,只有 OSI 模型和 TCP/IP 模型。也没有整合的术语解释。

术语:

  1. 报文(Message)
    • 定义:应用层的数据单元。例如,用户通过 HTTP 请求的网页内容或通过 FTP 传输的文件内容。
    • 上下文:应用层直接处理「报文」。
  2. 报文段(Segment)
    • 定义:传输层的数据单元。传输层将应用层的报文分割为较小的「报文段」(TCP)或直接封装为「用户数据报」(UDP),添加头部信息(如端口号、序列号)。
    • TCP:称为「报文段」(Segment),包含序列号、确认号等控制信息。
    • UDP:称为「用户数据报」(Datagram),仅包含基本头部(端口号、校验和)。
  3. 数据报(Datagram)
    • 定义:网络层的数据单元。传输层的报文段被封装为「数据报」,添加 IP 头部(如源/目标 IP 地址)。
    • 特点:IP 层的数据报是无连接的(不保证可靠交付),可能分片以适应链路层 MTU。
  4. (Frame)
    • 定义:数据链路层的数据单元。网络层的数据报被封装为「帧」,添加链路层头部(如 MAC 地址)和尾部(如校验和)。
    • 作用:帧是物理层实际传输的单元,通过物理介质发送。

因特网协议栈(Internet Protocol Stack)通常分为五层,从顶层到底层依次为:

  1. 应用层(Application Layer)
    • 作用:直接为用户应用程序(如浏览器、电子邮件、文件传输等)提供网络服务。负责处理特定的应用程序细节。
    • 协议示例:HTTP(网页浏览)、SMTP(电子邮件)、FTP(文件传输)、DNS(域名解析)。
  2. 传输层(Transport Layer)
    • 作用:为运行在不同主机上的应用程序提供端到端的逻辑通信服务。负责数据的分段、传输控制(如可靠传输、流量控制、拥塞控制)。
    • 协议示例:TCP(可靠传输)、UDP(不可靠但高效传输)。
  3. 网络层(Network Layer)
    • 作用:负责将数据包(称为数据报)从源主机路由到目标主机,跨越多个网络(即「主机到主机」的通信)。处理寻址、路由和分片。
    • 协议示例:IP(IPv4/IPv6)。
  4. 数据链路层(Data Link Layer)
    • 作用:负责在直接相连的节点(如同一局域网内的设备)之间可靠地传输数据帧。处理物理寻址(如 MAC 地址)、错误检测和流量控制。
    • 协议示例:以太网(Ethernet)、Wi-Fi(802.11)、PPP(点对点协议)。
  5. 物理层(Physical Layer)
    • 作用:将数据帧的比特流转换为物理信号(如电信号、光信号),通过物理介质(如电缆、光纤、无线电波)传输。处理比特同步、信号编码等。
    • 示例:双绞线、光纤、无线射频。

数据封装流程示例:

  1. 应用层生成报文(如 HTTP 请求)。
  2. 传输层将报文分割为报文段(TCP)或用户数据报(UDP),添加端口号等信息。
  3. 网络层封装为数据报,添加 IP 地址。
  4. 数据链路层封装为,添加 MAC 地址和校验。
  5. 物理层将帧转为比特流传输。

关键区别:

  • 报文:应用层数据,内容由应用程序定义。
  • 报文段/用户数据报:传输层数据,包含端口号。
  • 数据报:网络层数据,包含 IP 地址。
  • :链路层数据,包含 MAC 地址,是物理传输的最终形式。

应用层

客户-服务器体系结构、对等体系结构?

客户端-服务器(Client-Server)

属性 客户端(client) 服务器(server)
IP 地址 可能有动态 IP 地址 固定 IP 地址
运行方式 按需启动 持续运行(作为守护进程 daemon 运行)
请求/响应角色 主动发起请求 响应请求
示例 浏览器、邮件客户端 Web 服务器、邮件服务器

对等网络(Peer-to-Peer, P2P)

  • 无中心服务器,节点兼具客户端和服务器功能
  • 特性:自扩展性、节点动态变化(如 BitTorrent、Skype)
  • 混合模式示例:Skype 使用中心服务器进行地址发现,通信时建立直接连接

TCP 和 UDP 的区别?

协议对比(简略版,具体了解两个协议后可以写出更多,不在这里详述)

特性 TCP UDP
可靠性 可靠传输 尽最大努力交付
连接方式 面向连接 无连接
流量控制
传输单位 数据报文

UDP 是最小复用的传输层协议,仅提供多路复用与分解功能,不保证可靠传输。在如视频会议等实时应用场景中,UDP 通常优于 TCP。

而 TCP 提供了可靠传输、流量控制、拥塞控制等功能,适用于如文件传输等对可靠性要求较高的场景。

什么是 HTTP?HTTP 的请求-响应行为?URL 由哪两部分组成?

HTTP

用于交换信息的协议:HTTP(HyperText Transfer Protocol, 超文本传输协议)

HTTP 核心特性:

  • 传输:基于 TCP(端口 80)
  • 模式:同步请求/响应
  • 状态:无状态(Cookie 维持会话)
  • 方法:GET/POST/PUT/DELETE 等

HTTP 请求/相应:

HTTP 方法:

  • GET:请求获取 URL 的资源
  • POST:提交数据给服务器处理
  • PUT:上传文件
  • DELETE:删除文件

HTTP 请求消息:

1
2
3
4
5
6
GET /index.html HTTP/1.1
Host: www.nju.edu.cn
User-Agent: Mozilla/5.0
Connection: keep-alive
Accept-Language: en-us
(blank line)

第一行是请求行(request line),GET 是请求方法,/index.html 是请求的 URL,HTTP/1.1 是协议版本。

后面是请求头字段(Header Fields),最后是一个空行。用 CRLF(回车换行)表示消息结束。

HTTP 响应消息:

1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Content-Length: 6821
Content-Type: text/html
(blank line)
<data>

第一行是状态行HTTP/1.1 是协议版本,200 是状态码,OK 是状态描述。

后面是响应头字段,最后是一个空行,之后是响应数据。

URL

URL统一资源定位符(Uniform Resource Locator)的缩写,是一个用于标识互联网上资源的地址。

URL 结构:<协议>://<主机>:<端口>/<路径>?<查询参数>

  • 协议:用于传输或解释对象的方法,例如
    http、ftp、Gopher
  • 主机:对象所在主机的 DNS 名称或 IP 地址
  • 路径:包含对象的文件的路径名
  • 查询参数:发送到服务器上应用程序的名称/值对

因特网电子邮件的三个组成部分?每部分的主要作用?

  • 邮件协议:定义了邮件传输过程中邮件的发送方和接收方之间的通信协议,包括邮件的格式、传输方式、认证机制等方面的规定。
    • 例如 SMTP, IMAP, POP3
  • 用户代理:允许用户撰写、编辑、阅读邮件
    • 例如:Eudora, Outlook, Foxmail, Netscape Messenger
    • 传出和传入的邮件存储在服务器上
  • 邮件服务器(主机):邮箱中管理和维护发送给用户的邮件;输出报文队列保持待发送邮件报文
    • 邮件服务器之间使用 SMTP 协议发送邮件

SMTP 的基本操作?

A 向 B 发送一条报文的过程

  • 第一阶段
    • 电子邮件从本地用户代理发送到本地 SMTP 服务器
    • 用户代理充当 SMTP 客户端
    • 本地服务器充当 SMTP 服务器
  • 第二阶段
    • 电子邮件由本地服务器中继到远程 SMTP 服务器
    • 此时本地服务器充当 SMTP 客户端
  • 第三阶段
    • 远程用户代理使用邮件访问协议访问远程服务器上的邮箱
    • 使用 POP3 或 IMAP4 协议

  1. Alice 使用 UA(用户代理)撰写一封邮件并发送给 bob@someschool.edu
  2. Alice 的 UA 使用 SMTP 将邮件发送到她的邮件服务器,邮件被放置在消息队列中。
  3. SMTP 的客户端部分与 Bob 的邮件服务器建立 TCP 连接。
  4. SMTP 客户端通过该 TCP 连接将 Alice 的邮件发送出去。
  5. Bob 的邮件服务器将邮件放置到 Bob 的邮箱中。
  6. Bob 调用他的 UA(例如通过 POP3)来读取邮件。

推协议、拉协议?

原笔记没总结过。

「推协议」和「拉协议」是计算机网络中两种常见的数据传输模式,主要用于控制数据在通信双方之间的传输方式。它们的核心区别在于数据发送的发起方不同,具体如下:

  1. 推协议(Push Protocol)
    • 定义:由数据提供方(发送方)主动发起数据传输,接收方被动接收。
    • 特点
      • 实时性高:数据产生后立即推送,适合需要快速响应的场景(如即时消息、实时监控)。
      • 接收方压力大:发送方可能频繁推送数据,接收方需具备处理突发流量的能力。
      • 资源消耗:发送方需维护接收方状态(如在线状态、地址等)。
    • 典型应用
      • HTTP/2 Server Push:服务器主动推送网页资源(如 CSS、JS)到客户端。
      • WebSocket:全双工通信,服务端可随时推送数据(如在线聊天、股票行情)。
      • MQTT:物联网中设备状态实时推送(发布/订阅模式)。
  2. 拉协议(Pull Protocol)
    • 定义:由数据请求方(接收方)主动发起数据获取,发送方被动响应。
    • 特点
      • 按需获取:接收方决定何时请求数据,适合低频或周期性场景(如网页浏览、文件下载)。
      • 可控性强:接收方可控制请求频率,避免资源过载。
      • 延迟较高:数据更新依赖接收方的轮询间隔。
    • 典型应用
      • HTTP/1.x:客户端发起请求,服务器响应(如加载网页)。
      • RSS 订阅:客户端定期拉取更新内容。
      • SNMP 轮询:网管系统定期查询设备状态。
特性 推协议 拉协议
发起方 发送方 接收方
实时性 高(即时推送) 低(依赖轮询)
资源消耗 发送方需维护接收方状态 接收方需频繁发起请求
适用场景 实时通信、事件驱动 按需获取、低频数据
网络流量 可能突发(如大量推送) 较均匀(可控的请求间隔)
补充知识

实际系统中常结合两者优势:

  • 长轮询(Long Polling):接收方发起请求,但服务器在有数据时才响应(如 Web 邮件通知)。
  • WebHook:事件触发后,服务端通过 HTTP 回调推送数据(如 GitHub 的代码提交通知)。

适用情形:

  • 用推协议:需要低延迟、事件驱动的场景(如聊天、实时日志)。
  • 用拉协议:数据更新不频繁或接收方资源有限(如静态资源加载)。

域名系统的作用?DNS 服务器的层次结构?DNS 中的递归查询和迭代查询?

域名解析系统(Domain Name System, DNS):将域名映射到 IP 地址的分布式数据库。

核心功能:映射类型

  • 域名 \to IP 地址(A 记录)
  • 别名解析(CNAME 记录)
  • 邮件服务器定位(MX 记录)

DNS 服务:

  • 分布式数据库在许多名称服务器的层次结构中实现
  • 应用层协议使主机和名称服务器能够通信以解析「域名」
  • 负载均衡:一个服务器名对应一组 IP 地址

服务器类型:

  • 根服务器(全球 13 组)
    • 当本地域名服务器无法解析名称时会进行联系。
  • 顶级域服务器(Top Level Domains, TLD,如 .com.edu
    • 负责如 com、org、net、edu 等,以及所有顶级国家域名,例如 cn、uk、fr。
  • 权威服务器(组织内部)
    • 组织的 DNS 服务器,提供权威的主机名到 IP 地址的映射。
  • 本地 DNS 服务器(递归查询代理)
    • 由每个住宅 ISP、公司或大学维护。
    • 当主机发起 DNS 查询时,查询会被发送到其本地 DNS 服务器。

递归查询:客户端向 DNS 服务器发起请求后,DNS 服务器会代替客户端完成整个查询过程,并将最终结果返回给客户端。

  • 客户端只需发送一次请求,后续的工作由 DNS 服务器完成。
  • 如果目标 DNS 服务器无法直接解析域名,它会向其他 DNS 服务器继续查询,直到找到答案。
  • 对客户端来说,操作简单,但对 DNS 服务器的负载较高。
  • 适用场景: 通常用于本地 DNS 服务器与客户端之间的交互。

迭代查询:客户端向 DNS 服务器发起请求后,如果该服务器无法直接解析域名,它会返回一个指向其他 DNS 服务器的引用(即下一步查询的目标)。客户端需要根据这个引用继续向其他 DNS 服务器发起查询,直到获得最终结果。

  • 客户端需要多次发起请求,逐步获取最终结果。
  • DNS 服务器只提供自己知道的信息或推荐下一步查询的目标。
  • 对客户端来说,操作复杂,但减轻了 DNS 服务器的负担。
  • 适用场景:通常用于 DNS 服务器之间的交互。
flowchart LR
    %% 递归查询
    subgraph RecursiveQuery["`**递归查询**`"]
        direction LR
        ClientR[客户端] -->|查询请求| LocalDNSServerR[本地 DNS 服务器]
        LocalDNSServerR -->|查询请求| RootServerR[根 DNS 服务器]
        RootServerR -->|返回 TLD 服务器地址| LocalDNSServerR
        LocalDNSServerR -->|查询请求| TLDServersR[TLD 服务器]
        TLDServersR -->|返回权威 DNS 服务器地址| LocalDNSServerR
        LocalDNSServerR -->|查询请求| AuthoritativeDNSServerR[权威 DNS 服务器]
        AuthoritativeDNSServerR -->|返回 IP 地址| LocalDNSServerR
        LocalDNSServerR -->|返回 IP 地址| ClientR
    end

    %% 迭代查询
    subgraph IterativeQuery["`**迭代查询**`"]
        direction LR
        ClientI[客户端] -->|查询请求| LocalDNSServerI[本地 DNS 服务器]
        LocalDNSServerI -->|返回根 DNS 服务器地址| ClientI
        ClientI -->|查询请求| RootServerI[根 DNS 服务器]
        RootServerI -->|返回 TLD 服务器地址| ClientI
        ClientI -->|查询请求| TLDServersI[TLD 服务器]
        TLDServersI -->|返回权威 DNS 服务器地址| ClientI
        ClientI -->|查询请求| AuthoritativeDNSServerI[权威 DNS 服务器]
        AuthoritativeDNSServerI -->|返回 IP 地址| ClientI
    end
特性 递归查询 迭代查询
查询主体 DNS 服务器负责完成整个查询过程 客户端负责完成整个查询过程
客户端工作量 少(只需一次请求) 多(需多次请求)
DNS 服务器负载 高(需处理多个查询请求) 低(仅提供已知信息或推荐下一步)
适用场景 客户端与本地 DNS 服务器之间 DNS 服务器之间的交互

运输层

运输层的多路复用与多路分解?

  • 多路复用(Multiplexing, Mux):将多个应用进程的数据合并为一个传输层报文
  • 分解(Demultiplexing, Demux):将传输层报文分发给对应的应用进程
graph LR
    subgraph "多路复用"
        A["数据流 A"] --> Mux["多路复用器"]
        B["数据流 B"] --> Mux
        C["数据流 C"] --> Mux
        Mux --> Combined["组合数据流"]
    end

    subgraph "解复用"
        Combined --> Demux["解复用器"]
        Demux --> A1["数据流 A'"]
        Demux --> B1["数据流 B'"]
        Demux --> C1["数据流 C'"]
    end

    linkStyle 0,1,2 stroke:#00AA00,stroke-width:2px;
    linkStyle 4,5,6 stroke:#AA0000,stroke-width:2px;
    style Mux fill:#ccf,stroke:#88f,stroke-width:2px
    style Demux fill:#fcc,stroke:#f88,stroke-width:2px

UDP 套接字?TCP 套接字?

  • 端口(Port):16 位标识符(0-1023 为知名端口)
  • 套接字(Socket):应用程序进程与操作系统(中的传输层)交换网络消息的软件抽象。
    • UDP:<本地 IP, 本地端口>
    • TCP:<本地 IP, 本地端口, 远端 IP, 远端端口>

  • UDP 使用二元组(目标 IP + 端口)
  • TCP 使用四元组(源/目标 IP + 源/目标端口)

为什么有些应用更适合用 UDP?UDP 中的检验和计算?

UDP 优势

UDP 是最小复用的传输层协议,仅提供多路复用与分解功能,不保证可靠传输。在如视频会议等实时应用场景中,UDP 通常优于 TCP。

而 TCP 提供了可靠传输、流量控制、拥塞控制等功能,适用于如文件传输等对可靠性要求较高的场景。

UDP 应用

  • 流媒体应用(容忍丢失,对速率敏感)
  • DNS(域名系统)
  • SNMP(简单网络管理协议)

为什么需要 UDP?

  • 无需建立连接:减少了连接建立的延迟。
  • 简单:发送方和接收方无需维护连接状态。
  • 头部开销小:UDP 头部较小,减少了数据传输的额外开销。
  • 无拥塞控制:UDP 可以尽可能快地发送数据。

UDP 检验和计算

Checksum:校验和(16 位)

  • 用于检测传输过程中产生的错误(例如,位翻转)
  • 计算方法:将报文段内容(包括头部字段)视为 16 位整数序列,进行加法运算,并将结果的补码[1]作为校验和
  • 发送方将校验和值放入 UDP 校验和字段。
  • 接收方计算接收到的报文段的校验和,并与校验和字段的值进行比较。如果相等,则认为没有检测到错误;如果不相等,则认为检测到错误。
  • 校验和也可以设置为 0,表示不进行校验。

假设有两个 16 位整数:

1
2
1110011001100110
1101010101010101

进行加法运算:

1
2
3
4
 1110011001100110
1101010101010101
------------------
11011101110111011

由于最高位有进位,需要将进位加到结果的最低位:

1
2
3
4
1011101110111011
1
------------------
1011101110111100

取反得到校验和:

0100010001000011

在进行加法运算时,如果最高位产生进位,需要将进位加到结果的最低位。

TCP 的肯定确认、否定确认、自动重选请求协议?

  • 校验和(Checksums)\to 检测损坏
  • 序列号(Sequence Numbers)\to 识别数据包
  • 确认机制(ACK/NACK)\to 反馈接收状态
  • 超时重传(Retransmission)\to 处理丢失

停等协议、比特交替协议的基本原理?

停等协议

停等协议(Stop-and-Wait Protocol):发送方发送一个数据包后等待接收方的确认,再发送下一个数据包。

sequenceDiagram
    Sender->>Receiver: 发送数据帧 0
    activate Sender
    activate Receiver
    Receiver-->>Sender: 确认 ACK0
    deactivate Receiver
    deactivate Sender

    Sender->>Receiver: 发送数据帧 1
    activate Sender
    activate Receiver
    Receiver-->>Sender: 确认 ACK1
    deactivate Receiver
    deactivate Sender

    Note right of Receiver:  每次发送一帧,等待确认后再发送下一帧。

超时与重传:

sequenceDiagram
    Sender->>Receiver: 发送数据帧 0
    activate Sender
    Note right of Sender: 启动计时器
    activate Receiver
    Receiver--xSender: 确认 ACK0 丢失
    deactivate Receiver
    Sender->>Receiver: 超时,重传数据帧 0
    activate Receiver
    Receiver-->>Sender: 确认 ACK0
    deactivate Receiver
    deactivate Sender
    Note right of Receiver:  处理超时和重传机制。
  • 优点:实现简单
  • 缺点:信道利用率低(U=L/RRTT+L/RU = \frac{L/R}{\mathrm{RTT} + L/R}

流水线协议

比特交替协议?啥玩意?没学过。放学过的流水线协议。

比特交替协议实际上就是改良的停等协议,在数据帧中嵌入一个 1 比特的序号(0/1),交替使用,当且仅当接收方收到正确的帧时才发送确认 ACK。

sequenceDiagram
participant Sender as 发送方
participant Receiver as 接收方
Note over Sender,Receiver: 初始状态:Sender 预期发送序号 0,<br>Receiver 预期接收序号 0

%% 正常传输流程
Sender->>Receiver: 发送帧 0(seq=0)
Note right of Receiver: 收到 seq=0(与预期一致)
Receiver->>Sender: 返回 ACK0(确认 seq=0)
Note left of Sender: 收到 ACK0,切换下一帧序号为 1
Sender->>Receiver: 发送帧 1(seq=1)
Note right of Receiver: 收到 seq=1(与预期一致)
Receiver->>Sender: 返回 ACK1(确认 seq=1)

%% ACK 丢失导致重传
Note left of Sender: 未收到 ACK1,超时重传
Sender->>Receiver: 重传帧 1(seq=1)
Note right of Receiver: 收到 seq=1(但预期下一帧是 0)→丢弃重复帧
Receiver->>Sender: 再次返回 ACK1(重复确认)

流水线协议(Pipelining Protocol):发送方连续发送多个数据包,接收方连续确认。

sequenceDiagram
    Sender->>Receiver: 发送数据帧 0
    Sender->>Receiver: 发送数据帧 1
    Sender->>Receiver: 发送数据帧 2
    activate Sender
    activate Receiver

    Receiver-->>Sender: 确认 ACK0
    Receiver-->>Sender: 确认 ACK1
    Receiver-->>Sender: 确认 ACK2

    deactivate Receiver
    deactivate Sender

    Note right of Receiver:  连续发送多帧,无需等待确认。

滑动窗口机制:

graph LR
    subgraph 发送方
        A[发送窗口] --> B(已发送未确认)
        B --> C(可发送)
    end
    subgraph 接收方
        D[接收窗口] --> E(已接收已确认)
        E --> F(可接收)
    end

    A -- 数据传输 --> D
    D -- 确认ACK --> A

    style A fill:#ccf,stroke:#888,stroke-width:2px
    style D fill:#ccf,stroke:#888,stroke-width:2px
  • 发送窗口:允许连续发送 n 个未确认数据包
  • 接收窗口:缓存乱序到达的数据包

回退 N 步、选择重传的基本原理?

重传策略:

  • GBN (Go-Back-N):重传窗口内所有未确认数据包
  • SR (Selective Repeat):仅重传丢失数据包
机制 Go-Back-N(GBN) Selective Repeat(SR)
重传策略 重传所有未确认包 仅重传丢失包
接收方处理 丢弃乱序包 缓存乱序包
确认方式 累计确认 选择确认
适用场景 低误码率环境 高误码率环境

GBN 示例:

sequenceDiagram
    Sender->>Receiver: 发送帧 0, 1, 2
    activate Sender
    activate Receiver
    Receiver-->>Sender: ACK1 丢失
    Receiver->>Sender: ACK2
    deactivate Receiver
    Note right of Sender:  收到乱序 ACK,触发重传从帧 1 开始的所有帧
    Sender->>Receiver: 重传帧 1, 2
    activate Receiver
    Receiver-->>Sender: ACK1, ACK2
    deactivate Receiver
    deactivate Sender

SR 示例:

sequenceDiagram
    Sender->>Receiver: 发送帧 0, 1, 2
    activate Sender
    activate Receiver

    Receiver-->>Sender: ACK0 丢失
    Receiver->>Sender: ACK1, ACK2
    deactivate Receiver

    Note right of Sender: 只重传丢失的帧 0

    Sender->>Receiver: 重传帧 0
    activate Receiver
    Receiver-->>Sender: ACK0
    deactivate Receiver
    deactivate Sender

什么是流量控制、拥塞控制?

  • 流量控制(Flow Control)是 TCP 的一项关键功能,旨在防止发送方发送速率过快,导致接收方缓冲区溢出。
  • 拥塞控制(Congestion Control)是 TCP 的另一项核心功能,旨在避免网络拥塞,提高网络利用率和公平性。

TCP 的 3 次握手?

TCP 使用三次握手(three-way handshake)建立连接:

  1. 客户端向服务器发送一个 SYN 报文段(SYN=1,seq=x)。
    • SYN:同步标志,用于发起连接。
    • seq:客户端的初始序列号。
  2. 服务器收到 SYN 后,回复一个 SYN-ACK 报文段(SYN=1,ACK=1,seq=y,ack=x+1)。
    • SYN:同步标志。
    • ACK:确认标志。
    • seq:服务器的初始序列号。
    • ack:确认客户端的 SYN,值为客户端的初始序列号 + 1。
  3. 客户端收到 SYN-ACK 后,回复一个 ACK 报文段(ACK=1,seq=x+1,ack=y+1)。
    • ACK:确认标志。
    • seq:客户端的序列号 + 1。
    • ack:确认服务器的 SYN,值为服务器的初始序列号 + 1。
sequenceDiagram
    participant Client
    participant Server

    Note over Client,Server: 正常情况
    Client->>Server: SYN (seq=x)
    activate Server
    Server->>Client: SYN-ACK (seq=y, ack=x+1)
    activate Client
    Client->>Server: ACK (seq=x+1, ack=y+1)
    deactivate Client
    deactivate Server

    Note over Client,Server: 异常情况 1:SYN 丢失
    Client->>Server: SYN (seq=x)
    Client->>Client: 超时重传 SYN
    Client->>Server: SYN (seq=x)
    activate Server
    Server->>Client: SYN-ACK (seq=y, ack=x+1)
    activate Client
    Client->>Server: ACK (seq=x+1, ack=y+1)
    deactivate Client
    deactivate Server

    Note over Client,Server: 异常情况 2:SYN-ACK 丢失
    Client->>Server: SYN (seq=x)
    activate Server
    Server->>Client: SYN-ACK (seq=y, ack=x+1)
    deactivate Server
    Server->>Server: 超时重传 SYN-ACK
    Server->>Client: SYN-ACK (seq=y, ack=x+1)
    activate Client
    Client->>Server: ACK (seq=x+1, ack=y+1)
    deactivate Client

    Note over Client,Server: 异常情况 3:ACK 丢失
    Client->>Server: SYN (seq=x)
    activate Server
    Server->>Client: SYN-ACK (seq=y, ack=x+1)
    activate Client
    Client->>Server: ACK (seq=x+1, ack=y+1)
    deactivate Client
    deactivate Server
    Client->>Client: 数据传输
    Server->>Server: 可能超时重传数据, 认为连接未建立

三次握手的作用:确认双方的 SYN 和序号。

TCP 拥塞控制方法:慢启动、拥塞避免、快速恢复?

慢启动

慢启动(Slow Start)是 TCP 拥塞控制的初始阶段,旨在快速探测可用带宽。

  • 目标:估计可用带宽
    • 缓慢启动(为了安全)
    • 快速提升(为了效率)
  • 原理
    • 初始拥塞窗口(Congestion Window, CWND)设置为 1 个 MSS(Maximum Segment Size),即「最大数据包大小」。
    • 每收到一个 ACK,CWND 增加 1 个 MSS。
    • 每个 RTT,CWND 翻倍(指数增长)。
  • 何时停止
    • 发生丢包(超时或 3 个重复 ACK)。
    • CWND 达到慢启动阈值(ssthresh)。
sequenceDiagram
    participant Sender
    participant Receiver

    Note over Sender: CWND = 1 MSS, ssthresh = 16 MSS

    Sender->>Receiver: 1 MSS
    activate Sender
    activate Receiver
    Receiver-->>Sender: 1 ACK
    deactivate Receiver
    Note over Sender: CWND = 2 MSS

    Sender->>Receiver: 2 MSS
    activate Receiver
    Receiver-->>Sender: 2 ACK
    deactivate Receiver
    Note over Sender: CWND = 4 MSS

    Sender->>Receiver: 4 MSS
    activate Receiver
    Receiver-->>Sender: 4 ACK
    deactivate Receiver
    Note over Sender: CWND = 8 MSS

    Sender->>Receiver: 8 MSS
    activate Receiver
    Receiver-->>Sender: 8 ACK
    deactivate Receiver
    Note over Sender: CWND = 16 MSS
    deactivate Sender

拥塞避免

当 CWND 达到 ssthresh 时,TCP 进入拥塞避免(Congestion Avoidance)阶段,采用 AIMD 算法调整 CWND:

  • 加性增(Additive Increase):
    • 每收到一个 ACK,CWND 增加 1/CWND 个 MSS。
    • 每个 RTT,CWND 约增加 1 个 MSS(线性增长)。
  • 乘性减(Multiplicative Decrease):
    • 检测到丢包(3 个重复 ACK):
      • ssthresh = CWND / 2
      • CWND = ssthresh
      • 进入拥塞避免状态
    • 检测到超时:
      • ssthresh = CWND / 2
      • CWND = 1
      • 重新进入慢启动状态
sequenceDiagram
    participant Sender
    participant Receiver

    Note over Sender, Receiver: 拥塞避免阶段
    Sender->>Receiver: CWND 个 MSS
    activate Sender
    activate Receiver
    Receiver-->>Sender: ACK
    deactivate Receiver
    Note over Sender: CWND += 1/CWND

    Note over Sender, Receiver: 收到 3 个重复 ACK
    Sender->>Receiver: CWND 个 MSS
    activate Receiver
    Receiver-->>Sender: 重复 ACK
    Receiver-->>Sender: 重复 ACK
    Receiver-->>Sender: 重复 ACK
    deactivate Receiver
    Note over Sender: ssthresh = CWND / 2, CWND = ssthresh

    Note over Sender, Receiver: 超时
    Sender->>Receiver: CWND 个 MSS
    activate Receiver
    Note right of Sender: 超时
    deactivate Receiver
    Note over Sender: ssthresh = CWND / 2, CWND = 1, 慢启动
    deactivate Sender

快速恢复

快速恢复是对 AIMD 的优化,旨在更快地从丢包中恢复:

  • 触发条件:收到 3 个重复 ACK。
  • 操作
    • ssthresh = CWND / 2
    • CWND = ssthresh + 3(考虑到 3 个数据包已离开网络)
    • 每收到一个重复 ACK,CWND 增加 1 个 MSS。
    • 收到新 ACK 后,CWND = ssthresh,进入拥塞避免状态。
sequenceDiagram
    participant Sender
    participant Receiver

    Note over Sender, Receiver: 收到 3 个重复 ACK
    Sender->>Receiver: CWND 个 MSS
    activate Sender
    activate Receiver
    Receiver-->>Sender: 重复 ACK
    Receiver-->>Sender: 重复 ACK
    Receiver-->>Sender: 重复 ACK
    deactivate Receiver
    Note over Sender: ssthresh = CWND / 2, CWND = ssthresh + 3

    Note over Sender, Receiver: 收到更多重复 ACK
    Sender->>Receiver: (CWND + 1) 个 MSS
    activate Receiver
    Receiver-->>Sender: 重复 ACK
    deactivate Receiver
    Note over Sender: CWND += 1

    Note over Sender, Receiver: 收到新 ACK
    Sender->>Receiver: (CWND + 1) 个 MSS
    activate Receiver
    Receiver-->>Sender: 新 ACK
    deactivate Receiver
    Note over Sender: CWND = ssthresh, 进入拥塞避免
    deactivate Sender

网络层:数据平面

数据平面、控制平面的主要作用?转发、路由选择?

网络层平面作用

网络层的功能可以划分为两个相互作用的平面:

  1. 数据平面(Data Plane):负责数据包的实际转发。
    • 局部的,每个路由器独立运作。
    • 根据数据报头部字段和转发表,决定如何将数据包从输入端口转发到输出端口。
    • 高速处理,通常用硬件实现。
  2. 控制平面(Control Plane):负责生成和维护转发表。
    • 网络范围的,涉及多个路由器协同工作。
    • 决定数据包在网络中的路由路径。
    • 两种实现方式:
      1. 传统路由算法:在路由器中实现。
      2. 软件定义网络(Software-Defined Networking, SDN):在远程服务器中实现。

转发与路由选择

  • 发送端:将运输层产生的报文段(Segment)封装成数据报(Datagram)。
  • 接收端:将数据报解封装,提取报文段并交付给运输层。
  • 路由(Routing):确定数据包从源主机到目标主机的路径。
    • 涉及多个路由器(Router)。
    • 使用路由算法(Routing Algorithm)计算最佳路径。
  • 转发(Forwarding):在路由器内部,将数据包从输入端口转移到合适的输出端口。
    • 仅涉及单个路由器。
    • 依据转发表(Forwarding Table)进行决策。

类比:旅行规划

  • 路由:规划从南京到上海的行程路线(例如:南京 -> 无锡 -> 苏州 -> 上海)。
  • 转发:在苏州站内,根据指示牌从进站口走到正确的出站口。
graph LR
    subgraph 发送端
        A[运输层] --> B(报文段)
        B --> C[网络层]
        C --> D(数据报)
        D --> E[数据链路层]
    end

    subgraph 接收端
        F[数据链路层] --> G(数据报)
        G --> H[网络层]
        H --> I(报文段)
        I --> J[运输层]
    end

    subgraph 路由器
        K[输入端口] --> L(转发表)
        L --> M[输出端口]
    end

    E --> K
    M --> F

    style C fill:#ccf,stroke:#888,stroke-width:2px
    style H fill:#ccf,stroke:#888,stroke-width:2px
    style L fill:#fcc,stroke:#888,stroke-width:2px

路由器的 4 个组件?

graph LR
    subgraph 路由器
        A[输入端口] --> B{交换结构}
        B --> C[输出端口]
        D[路由处理器] --> B

        style A fill:#ccf,stroke:#888,stroke-width:2px
        style B fill:#fcc,stroke:#888,stroke-width:2px
        style C fill:#ccf,stroke:#888,stroke-width:2px
        style D fill:#ccf,stroke:#888,stroke-width:2px
    end
  • 输入端口(Input Port):
    • 物理层:接收比特级信号。
    • 数据链路层:处理数据链路层协议,进行解封装。
    • 查找:根据数据包的目的 IP 地址,在转发表中查找对应的输出端口。
    • 排队:如果数据包到达速率超过交换结构的转发速率,则进行排队。
  • 交换结构(Switching Fabric):
    • 将数据包从输入端口转发到输出端口。
    • 交换速率:数据包从输入端口到输出端口的传输速率。
  • 输出端口(Output Port):
    • 缓冲管理:决定何时丢弃数据包。
    • 调度:决定何时发送哪个数据包。
    • 数据链路层:处理数据链路层协议,进行封装。
    • 物理层:发送比特级信号。
  • 路由处理器(Routing Processor):
    • 执行路由协议。
    • 计算和更新转发表。
    • 在传统路由器中,路由处理器参与控制平面。
    • 在 SDN 架构中,路由处理器与远程控制器通信。

路由器中的最长前缀匹配规则?

最长前缀匹配规则:在转发表中查找给定目标地址的条目时,使用与目标地址匹配的最长地址前缀。

graph TD
    A["\***"] -->|0| B["0**"]
    A -->|1| C{"1**"}
    B -->|0| D["00*"]
    B -->|1| E{"01*"}
    C -->|0| F["10*"]
    C -->|1| G["11*"]
    D -->|0| H{"000"}
    D -->|1| I{"001"}
    E -->|0| J["010"]
    E -->|1| K["011"]
    F -->|0| L["100"]
    F -->|1| M["101"]
    G -->|0| N["110"]
    G -->|1| O["111"]

    H -.->|"端口 1"| P1
    I -.->|"端口 2"| P2
    J -.->|"端口 3"| P3
    K -.->|"端口 3"| P3
    L -.->|"端口 4"| P4
    M -.->|"端口 4"| P4
    N -.->|"端口 4"| P4
    O -.->|"端口 4"| P4

    style A fill:#fff,stroke:#888,stroke-width:2px
    style B fill:#ffd,stroke:#888,stroke-width:2px
    style C fill:#ffd,stroke:#888,stroke-width:2px
    style D fill:#fd7,stroke:#888,stroke-width:2px
    style E fill:#fd7,stroke:#888,stroke-width:2px
    style F fill:#fd7,stroke:#888,stroke-width:2px
    style G fill:#fd7,stroke:#888,stroke-width:2px
    style H fill:#fcc,stroke:#888,stroke-width:2px
    style I fill:#fcc,stroke:#888,stroke-width:2px
    style J fill:#fcc,stroke:#888,stroke-width:2px
    style K fill:#fcc,stroke:#888,stroke-width:2px
    style L fill:#fcc,stroke:#888,stroke-width:2px
    style M fill:#fcc,stroke:#888,stroke-width:2px
    style N fill:#fcc,stroke:#888,stroke-width:2px
    style O fill:#fcc,stroke:#888,stroke-width:2px

三种交换技术?

共有三种类型:

  1. 基于内存的交换(Switching via Memory):
    • 早期路由器采用。
    • 在 CPU 的直接控制下进行交换。
    • 数据包复制到系统内存。
    • 受限于内存带宽。
  2. 基于总线的交换(Switching via a Bus):
    • 数据报通过共享总线从输入端口内存传输到输出端口内存。
    • 总线竞争:受限于总线带宽。
  3. 基于互连网络的交换(Switching via a Mesh):
    • 克服总线带宽限制。
    • 采用 Banyan 网络、纵横式交换(crossbar)等互连网络。
    • 将数据报分割成固定长度的信元(cell),通过交换结构进行交换。

分组调度:先进先出、优先权排队、循环和加权公平排队?

  • 先进先出:按照数据包到达的顺序进行调度。
    • 无分类。
    • 丢尾缓冲区管理:当缓冲区已满时,丢弃传入的数据包。
  • 优先级
    • 到达的流量按类别分类和排队。
    • 任何报头字段都可用于分类。
    • 从具有已缓冲数据包的最高优先级队列发送数据包。
    • 优先级类中的 FCFS。
  • 轮询(Round Robin, RR):
    • 到达的流量按类别分类和排队。
    • 任何报头字段都可用于分类。
    • 服务器循环扫描类队列,依次从每个类发送一个完整的数据包(如果可用)。
  • 加权公平排队(Weighted Fair Queuing, WFQ):
    • 广义轮询。
    • 每个类 ii 都有权重 wiw_i,并在每个周期中获得加权的服务量:wijwj\dfrac{w_i}{\sum_j w_j}
    • 最小带宽保证(每个流量类)。

IPv4 编址:二进制/十进制 IP 地址、子网、无类别域间路由选择?

IP 地址

点分十进制表示法(Dotted-Decimal Notation):为了便于人类阅读,32 位 IP 地址通常被分成 4 个 8 位(字节),每个字节用十进制表示,并用点号分隔。例如:223.1.1.1 对应的二进制是 11011111 00000001 00000001 00000001

子网

子网划分(Subnetting)是一种将一个大的网络(如一个 A 类、B 类或 C 类网络)进一步划分为多个较小的、互连的子网络(Subnet)的技术。

  • 动机:
    • 解决网络地址不足的问题(在组织内部更有效地利用已分配的地址块)。
    • 提高网络灵活性和管理效率。
    • 隔离内部网络结构,减少对外部路由表的压力(从外部看,整个组织仍然像一个单一的网络)。
  • 机制:
    • 借用主机部分的一些位作为子网号(Subnet Number)。
    • 子网掩码(Subnet Mask):一个 32 位的数值,用于指示 IP 地址中哪些位属于网络部分 + 子网部分(对应位为 1),哪些位属于主机部分(对应位为 0)。
    • 例如,一个 C 类网络 192.168.1.0,默认掩码是 255.255.255.0。如果借用主机部分 3 位作为子网号,则子网掩码变为 255.255.255.224(二进制 11111111.11111111.11111111.11100000)。
  • 路由:
    • 组织内部的路由器(本地路由器)根据子网号进行路由。
    • 外部路由器只知道该组织的整体网络地址,不知道其内部子网结构。

子网划分示例:假设一个组织获得了网络地址 141.14.0.0(B 类)。他们内部有多个 LAN。通过使用子网掩码 255.255.255.0,可以将第三个字节用作子网号。

  • 子网 1:141.14.2.0/24
  • 子网 2:141.14.7.0/24
  • 子网 3:141.14.22.0/24

对于外部世界,这些子网都属于 141.14.0.0 网络。内部路由器 R1 负责在这些子网之间以及与外部互联网之间转发数据包。

使用子网掩码确定网络/子网地址:将 IP 地址与子网掩码进行按位与运算,即可得到该地址所属的网络/子网地址。

例如,主机 IP 192.228.17.57,子网掩码 255.255.255.224

1
2
3
4
  11000000.11100100.00010001.00111001  (192.228.17.57)
& 11111111.11111111.11111111.11100000 (255.255.255.224)
-------------------------------------
11000000.11100100.00010001.00100000 (192.228.17.32)

该主机属于子网 192.228.17.32

无类别域间路由选择

无类别域间路由(Classless Inter-Domain Routing, CIDR)是目前互联网上 IP 地址分配和路由的主导方案,旨在取代分类寻址。

  • 核心思想:取消 A、B、C 类的划分,使用网络前缀来表示网络部分。
  • 表示法:A.B.C.D/n,其中 n 是网络前缀的长度(即 IP 地址中前 n 位表示网络部分)。
    • 例如,10.217.112.0/20 表示前 20 位是网络部分,后 12 位是主机部分。其对应的子网掩码是 255.255.240.0(20 个 1 后跟 12 个 0)。
  • 优势:
    • 地址分配更灵活:可以分配任意大小的地址块,不再受限于 A/B/C 类的固定大小。
    • 路由聚合:ISP 可以将其分配给多个客户的地址块聚合成一个更大的地址块(具有更短的前缀),向互联网其他部分通告。这极大地减少了全球路由表的规模

路由聚合示例:一个 ISP 拥有地址块 200.23.16.0/20。它可以将其划分为更小的块分配给客户:

  • 组织 0:200.23.16.0/23
  • 组织 1:200.23.18.0/23
  • 组织 2:200.23.20.0/23
  • 组织 7:200.23.30.0/23

该 ISP 只需要向外部世界通告一条路由 200.23.16.0/20,而不是通告其内部所有客户的路由。

动态主机配置协议的工作原理?

动态主机配置协议(Dynamic Host Configuration Protocol, DHCP):主机在加入网络时,自动从 DHCP 服务器获取 IP 地址及其他网络配置信息。这是最常见的方式,尤其适用于普通用户设备和移动设备。

  • 目标:让主机能够动态地获取 IP 地址、子网掩码、默认网关地址、DNS 服务器地址等信息,实现即插即用(Plug-and-Play)。
  • 优点
    • 简化网络管理。
    • 允许地址重用(设备离线后地址可分配给其他设备)。
    • 支持移动用户。

DHCP 交互过程(DORA):

sequenceDiagram
    participant 客户端
    participant 服务器
    Note over 客户端, 服务器: 客户端加入网络,需要 IP 地址
    客户端->>服务器: DHCP 发现报文(广播,源地址:0.0.0.0,目的地址:255.255.255.255)
    服务器->>客户端: DHCP 提供报文(广播或单播,提供 IP 地址、租期等信息)
    Note over 客户端: 可能收到多个提供报文
    客户端->>服务器: DHCP 请求报文(广播,向特定服务器请求提供的 IP)
    服务器->>客户端: DHCP 确认报文(广播或单播,确认租约,提供配置)
  1. DHCP 发现(Discover):新接入的主机广播一个 DHCP Discover 消息,寻找网络中的 DHCP 服务器。源 IP 为 0.0.0.0,目标 IP 为 255.255.255.255
  2. DHCP 提供(Offer):收到 Discover 消息的 DHCP 服务器(可能不止一个)回复一个 DHCP Offer 消息,提供一个可用的 IP 地址、租期(Lease Time)、服务器自身的 IP 地址等。
  3. DHCP 请求(Request):主机从收到的 Offer 中选择一个(通常是第一个到达的),然后广播一个 DHCP Request 消息,请求使用该 IP 地址,并指明选择的是哪个服务器。
  4. DHCP 确认(ACK):被选中的 DHCP 服务器回复一个 DHCP ACK 消息,确认将该 IP 地址和相关配置信息分配给该主机,并指定租期。

网络地址转换的工作原理?

NAT 通常在连接内部私有网络和外部公共互联网的边界路由器(NAT Router)上实现。

  1. 出站流量(内部 \to 外部):
    • NAT 路由器接收到来自内部网络的 IP 数据包(源 IP 为私有地址)。
    • 它将数据包的源 IP 地址替换为路由器的公共 IP 地址。
    • 为了区分来自不同内部主机的连接,NAT 通常还会修改源端口号
      • 这种结合了 IP 地址和端口号转换的技术称为 NAPT 或 PAT (Port Address Translation)。
    • NAT 路由器在 NAT 转换表中记录下这种映射关系
      • 内部 IP:内部端口 <-> 外部 IP:外部端口
    • 将修改后的数据包发送到互联网。
  2. 入站流量(外部 \to 内部):
    • NAT 路由器接收到来自互联网的响应数据包(目标 IP 为路由器的公共 IP 地址,目标端口为之前分配的外部端口)。
    • 在 NAT 转换表中查找该目标 IP 和端口对应的内部主机 IP 和端口。
    • 将数据包的目标 IP 地址和目标端口号替换回原始的内部私有地址和端口号。
    • 将数据包转发给内部网络中的目标主机。

NAT 转换表示例:

WAN Side (Public) Addr:Port LAN Side (Private) Addr:Port Protocol Other Info (e.g., Lease)
138.76.29.7:5001 10.0.0.1:3345 TCP
138.76.29.7:5002 10.0.0.2:4000 UDP

基本结构:

  • WAN Side 是公网地址和端口
  • LAN Side 是私有地址和端口
  • 中间是协议类型和其他信息
  • 其他信息列可能包含:映射的剩余时间(租期)、连接状态、流量统计等

具体示例分析:

  • 第一行表示:
    • 公网地址 138.76.29.7 的 5001 端口
    • 映射到内网 10.0.0.1 主机的 3345 端口
    • 使用 TCP 协议
  • 第二行表示:
    • 同一个公网 IP(138.76.29.7) 的不同端口(5002)
    • 映射到内网另一台主机 10.0.0.2 的 4000 端口
    • 使用 UDP 协议

NAT 工作原理:

  • 当内网主机(如 10.0.0.1:3345)访问外网时
  • NAT 路由器会创建一个映射条目
  • 私有 IP:端口 转换为 公网 IP:端口
  • 外网看到的源地址是公网地址(138.76.29.7:5001)
  • 返回的流量会根据这个映射表转发到正确的内网主机

示例流程:

  1. 内部主机 10.0.0.1 发送数据包(源 10.0.0.1:3345,目标 128.119.40.186:80)。
  2. NAT 路由器收到数据包,将其源地址/端口改为 138.76.29.7:5001,并在表中记录 138.76.29.7:5001 <-> 10.0.0.1:3345。修改后的数据包(源 138.76.29.7:5001,目标 128.119.40.186:80)被发送出去。
  3. 外部服务器 128.119.40.186 回复数据包(源 128.119.40.186:80,目标 138.76.29.7:5001)。
  4. NAT 路由器收到回复,查找转换表,找到 138.76.29.7:5001 对应 10.0.0.1:3345。将目标地址/端口改回 10.0.0.1:3345,并将数据包转发给内部主机 10.0.0.1

IPv4 向 IPv6 迁移中采用的建隧道方法?

隧道技术(Tunneling):

  • 将 IPv6 数据包封装在 IPv4 数据包中,使其能够穿越 IPv4 网络段。
  • 在 IPv6 网络与 IPv4 网络交界处的路由器(隧道端点)执行封装和解封装。
  • 逻辑上,隧道形成了一条跨越 IPv4 网络的 IPv6 链路。
  • 优点:保持了 IPv6 数据包的完整性,避免了地址转换问题。
  • 缺点:增加了封装开销;可能引入 MTU 问题;配置管理相对复杂。
graph TD
    F[IPv6 节点] -- IPv6 --> G(IPv6/v4 路由器 - 隧道入口)
    G -- IPv4(IPv6 负载) --> H(IPv4 路由器)
    H -- IPv4(IPv6 负载) --> I(IPv6/v4 路由器 - 隧道出口)
    I -- IPv6 --> J[IPv6 节点]
    style G fill:#fcc
    style I fill:#fcc

网络层:控制平面

每路由器控制、逻辑集中式控制?

控制平面的两种主要实现方法:

  1. 每路由器控制(Per-Router Control):

    • 传统方式。
    • 每个路由器都运行一个路由算法,通过相互交换路由信息来共同计算路由路径,并生成各自的转发表。
    • 路由算法在路由器内部的控制平面组件中执行。
    graph LR
        subgraph Router1
            direction TB
            R1_CP[路由算法] --> R1_DP(转发表)
        end
        subgraph Router2
            direction TB
            R2_CP[路由算法] --> R2_DP(转发表)
        end
        subgraph Router3
            direction TB
            R3_CP[路由算法] --> R3_DP(转发表)
        end
        R1_CP <-- 控制信息 --> R2_CP
        R2_CP <-- 控制信息 --> R3_CP
        R1_CP <-- 控制信息 --> R3_CP
    
        style R1_CP fill:#ccf,stroke:#888
        style R2_CP fill:#ccf,stroke:#888
        style R3_CP fill:#ccf,stroke:#888
        style R1_DP fill:#fcc,stroke:#888
        style R2_DP fill:#fcc,stroke:#888
        style R3_DP fill:#fcc,stroke:#888
  2. 逻辑集中式控制(Logically Centralized Control):

    • 软件定义网络(Software-Defined Networking, SDN)采用的方式。
    • 一个远程的控制器负责计算整个网络的路由路径。
    • 控制器将计算好的转发表分发并安装到各个路由器中。
    • 路由器主要负责数据平面的转发,控制逻辑大大简化。
    graph TD
        Controller[远程控制器] -->|计算转发表| R1(路由器 1 转发表)
        Controller -->|计算转发表| R2(路由器 2 转发表)
        Controller -->|计算转发表| R3(路由器 3 转发表)
    
        R1 -- 控制器指令 --> R1_DP[数据平面]
        R2 -- 控制器指令 --> R2_DP[数据平面]
        R3 -- 控制器指令 --> R3_DP[数据平面]
    
        style Controller fill:#ccf,stroke:#888
        style R1 fill:#fcc,stroke:#888
        style R2 fill:#fcc,stroke:#888
        style R3 fill:#fcc,stroke:#888

链路状态算法的工作原理?

核心思想:每个节点(路由器)都学习到整个网络的拓扑结构和所有链路的成本,然后在本地独立计算到达所有其他节点的最短路径。

运作方式:

  1. 发现邻居和链路成本:每个节点启动时,首先了解其直连邻居和到这些邻居的链路成本。
  2. 链路状态广播:每个节点将其了解到的本地链路状态(即它的邻居和链路成本)打包成链路状态通告(Link State Advertisement, LSA),并广播给网络中的所有其他节点。
    • 广播机制需要确保 LSA 可靠、高效地传递给所有节点,且不会无限循环。
  3. 构建拓扑图:每个节点收集来自所有其他节点的 LSA,从而在本地构建出完整的网络拓扑图。
  4. 最短路径计算:每个节点使用 Dijkstra 算法(或其他最短路径算法)在本地计算从自身出发到网络中所有其他节点的最短路径树。
  5. 生成转发表:根据计算出的最短路径树,确定到达每个目的网络的下一跳,生成转发表。

具体运行过程请参考原笔记

距离向量算法的工作原理?

核心思想:每个节点维护一个到网络中所有其他节点的距离(成本)向量,并周期性地与其「邻居」交换这个向量。节点根据从邻居收到的距离向量和到邻居的链路成本,更新自己的距离向量。

基于 Bellman-Ford 方程:令 Dx(y)D_x(y) 为从节点 xx 到节点 yy 的已知最低成本路径的成本。Bellman-Ford 方程指出:

Dx(y)=minv{c(x,v)+Dv(y)}D_x(y) = \min_{v} \{ c(x, v) + D_v(y) \}

其中,vvxx 的邻居。

含义:从 xxyy 的最短路径成本,等于「先走一步到邻居 vv 的成本 c(x,v)c(x, v)」加上「从邻居 vvyy 的已知最短路径成本 Dv(y)D_v(y)」之和,并在所有邻居 vv 中取最小值。

DV 算法运作方式:

  1. 初始化:每个节点 xx 初始化其距离向量 Dx=[Dx(y1),Dx(y2),]D_x = [D_x(y_1), D_x(y_2), \dots]。对于邻居 vvDx(v)=c(x,v)D_x(v) = c(x, v);对于非邻居 yyDx(y)=D_x(y) = \inftyDx(x)=0D_x(x) = 0
  2. 周期性/触发式交换:每个节点 xx 将其当前的距离向量 DxD_x 发送给所有邻居。
  3. 更新距离向量:当节点 xx 收到来自任何邻居 vv 的新距离向量 DvD_v 时,它使用 Bellman-Ford 方程为网络中的每个目的节点 yy 重新计算 Dx(y)D_x(y)Dx(y)minv{c(x,v)+Dv(y)}D_x(y) \leftarrow \min_{v} \{ c(x, v) + D_v(y) \}
  4. 通知邻居:如果节点 xx 的距离向量 DxD_x 因为步骤 3 的计算而发生了改变,则将更新后的 DxD_x 发送给所有邻居。
  5. 重复:持续进行步骤 3 和 4。

具体运行过程请参考原笔记

什么是 OSPF?

OSPF (Open Shortest Path First) 是互联网中广泛使用的内部网关协议(Interior Gateway Protocol, IGP)之一,用于在单个自治系统(Autonomous System, AS)内部进行路由选择。

边界网关协议 BGP 的工作原理?

参考原笔记

SDN 体系结构的 4 个关键特征?

原笔记没记过。

软件定义网络(Software-Defined Networking, SDN)是一种新兴的网络架构,旨在通过集中控制和可编程性来简化网络管理和配置。

  1. 控制平面与数据平面分离
    • 核心特征:解耦传统网络设备中紧耦合的控制逻辑(决策)和转发功能(执行)。
    • 优势:数据平面(交换机/路由器)仅负责高速转发,控制逻辑集中到独立控制器中,提升灵活性和可编程性。
  2. 集中化的网络控制
    • 逻辑集中控制器:通过全局视图统一管理网络策略(如路由、QoS、安全策略),替代分布式协议(如 OSPF/BGP)。
    • 示例:OpenFlow 控制器(如 ONOS、OpenDaylight)动态下发流表至交换机。
  3. 开放的可编程接口
    • 北向 API:允许应用程序通过 RESTful 或 Python 接口调用网络服务(如负载均衡、防火墙策略)。
    • 南向 API:控制器通过标准协议(如 OpenFlow、NETCONF)配置数据平面设备。
  4. 网络虚拟化与抽象化
    • 资源抽象:将物理网络抽象为虚拟资源池(如 VXLAN 覆盖网络),支持多租户隔离和灵活拓扑。
    • 意图驱动网络:用户声明高级策略(如「优先保障视频流量」),控制器自动转换为底层规则。

SDN 通过集中控制解决了传统网络分布式协议的复杂性和僵化问题。

OpenFlow 是实现数据平面与控制平面通信的南向协议代表。

什么是 ICMP?

互联网控制报文协议(Internet Control Message Protocol, ICMP)是 IP 协议的一个必要组成部分,尽管它在 OSI 模型中与 IP 位于同一层(网络层),但其报文是封装在 IP 数据报中传输的。

ICMP 主要用于在 IP 主机、路由器之间传递控制消息差错报告。它弥补了 IP 协议本身缺乏的某些反馈机制。主要功能包括:

  • 差错报告:报告数据包在传输过程中遇到的问题,例如:目的网络/主机/协议/端口不可达。
    • 数据包生存时间(TTL)耗尽。
    • IP 首部参数错误。
  • 网络探测与诊断:用于获取网络信息或测试连通性,例如:
    • 回显请求与应答,常用于 ping 命令。
    • 路由器通告与发现。
    • 时间戳请求与应答。

网络管理的关键组件?

一个典型的网络管理框架包含以下关键组件:

  1. 管理服务器/控制器(Managing Server/Controller):
    • 运行网络管理应用程序的中心节点。
    • 通常有人类网络管理员通过它与网络交互。
    • 负责收集信息、分析数据、发送指令。
  2. 被管设备(Managed Device):
    • 网络中需要被管理的元素,如路由器、交换机、服务器、防火墙等。
    • 这些设备包含可配置的硬件和软件组件。
  3. 网管代理(Agent):
    • 运行在被管设备上的软件进程。
    • 负责响应来自管理服务器的请求(查询或设置)。
    • 主动向管理服务器发送通知(如发生异常事件时)。
    • 与设备的本地状态和配置信息交互。
  4. 管理信息(Data/MIB):
    • 被管设备的状态、配置和统计数据。
    • 这些信息被组织成管理信息库(Management Information Base, MIB)。MIB 定义了可以通过网管协议访问的数据对象的集合及其结构。
  5. 网管协议(Network Management Protocol):
    • 用于在管理服务器和被管设备(通过代理)之间传递管理信息和命令的协议。
    • 常见的协议有 SNMP 和 NETCONF。
graph TD
    subgraph Managing_Entity [管理实体]
        direction TB
        Server[管理服务器/控制器] -->|发出请求/指令| Protocol
        Protocol -->|接收响应/通知| Server
        Admin(网络管理员) --> Server
    end

    subgraph Managed_Entity [被管实体]
        direction TB
        Device[被管设备(路由器, 交换机等)]
        Agent[网管代理(运行在设备上)] --> Device
        MIB[管理信息库(MIB)<br>存储设备状态/配置] --> Agent
    end

    Protocol(网管协议 <br> e.g., SNMP, NETCONF)

    Server <-.->|通过协议交互| Agent

    style Admin fill:#eee,stroke:#333

什么是 SNMP?

简单网络管理协议(Simple Network Management Protocol, SNMP)与 MIB:

  • 最广泛使用的传统网管协议。
  • 管理员通过管理服务器使用 SNMP 查询(Get)或设置(Set)被管设备 MIB 中的对象值。
  • 设备代理可以通过 SNMP Trap 主动向服务器报告重要事件。
  • 优点:标准化、广泛支持。
  • 缺点:安全性较弱(早期版本)、Set 操作功能有限、面向单个数据对象而非事务性配置。

SNMP 详解见原笔记

链路层和局域网

什么是节点、链路?

  • 节点:网络中的设备,包括主机和路由器。
  • 链路:连接相邻节点的通信通道。链路可以是:
    • 有线的(如以太网线缆、光纤)
    • 无线的(如 Wi-Fi、蜂窝网络)
    • 局域网(LANs)本身也可以看作是一种链路环境。
  • (frame):链路层的协议数据单元(PDU)。网络层的数据报被封装在帧中进行传输。链路层负责将数据报从一个节点传输到路径上的下一个物理相邻的节点。

链路层提供的可能服务包括?链路层在何处实现?

链路层的服务

链路层为其上层(网络层)提供多种关键服务:

  1. 成帧:将来自网络层的数据报封装成帧,添加链路层「首部」和「尾部」。
    • 首部:通常包含源和目的 MAC 地址,以及其他控制信息。
    • 尾部:通常包含差错检测信息。
  2. 链路接入:在广播信道共享介质的环境下(例如 Wi-Fi 或早期的总线型以太网),需要媒体访问控制协议来协调多个节点对信道的访问,避免或解决冲突。
    • 帧首部中的 MAC 地址用于标识帧的物理源和目的节点,这与网络层的 IP 地址不同。
  3. 相邻节点间的可靠交付:通过确认和重传机制,确保数据帧在两个直接相连的节点间无差错地传输。
    • 这项服务在误码率较低的有线链路上(如光纤、现代以太网)很少使用,以避免不必要的开销。
    • 但在误码率较高的无线链路(如 Wi-Fi、蜂窝网络)上则非常重要,因为在链路层解决错误比等到端到端(如 TCP)才发现和重传要高效得多。
  4. 流量控制:协调相邻的发送节点和接收节点之间的传输速率,防止快速的发送方淹没慢速的接收方。
  5. 差错检测:发送方在帧中加入差错检测位,接收方通过计算和比较这些位来检测帧在传输中是否出错。
    • 由于信号在物理介质传输中可能受到衰减、噪声等干扰,导致比特错误(0 变 1 或 1 变 0)。
    • 如果检测到错误,接收方通常会丢弃该帧(如果链路层不提供可靠传输),或者通知发送方重传(如果提供可靠传输)。
  6. 差错纠正:接收方不仅能检测到错误,还能直接纠正某些类型的比特错误,而无需请求重传。这对于延迟敏感或重传代价高的应用(如实时音视频)尤其有用。
  7. 半双工与全双工
    • 半双工:链路两端的节点都可以发送数据,但不能同时进行。需要协调机制避免冲突。
    • 全双工:链路两端的节点可以同时发送和接收数据,无需担心冲突。现代交换式以太网通常工作在全双工模式。

实现

网络接口卡(NIC)

链路层及其下方的物理层功能,通常被集成在主机的网络接口卡(Network Interface Card, NIC)中,也称为「网络适配器」或「网卡」。

  • 每个主机和路由器都包含链路层实现。
  • NIC 通常是一个独立的硬件板卡(如 PCI/PCIe 网卡)或直接集成在主板芯片上。
  • 它通过主机的系统总线(如 PCIe)与 CPU 和内存交互。
  • NIC 是硬件、软件(驱动程序)和固件(存储在 NIC 上的软件)的结合体。

奇偶校验、检验和、循环冗余检测的基本原理?

奇偶校验

  • 单比特奇偶校验
    • 最简单的差错检测方法。
    • 在数据 D 后面附加一个奇偶校验位
    • 偶校验:设置校验位,使得整个数据(D + 校验位)中 1 的总数是偶数。
    • 奇校验:设置校验位,使得 1 的总数是奇数。
    • 接收方计算收到的数据(D' + 校验位')中 1 的个数,与约定的奇偶性比较。
    • 能力:只能检测出奇数个比特错误。如果发生偶数个比特错误,则无法检测。
  • 二维奇偶校验
    • 将数据 D 排列成二维矩阵(例如 i 行 j 列)。
    • 为每一行计算一个行校验位(单比特奇偶校验)。
    • 为每一列计算一个列校验位(单比特奇偶校验)。
    • 发送 D 以及所有的行、列校验位。
    • 能力:
      • 可以检测出所有 1、2、3 个比特的错误
      • 可以检测并纠正单比特错误。如果只有一个比特出错,其所在的行校验和列校验都会出错,交叉点即为错误比特位置,将其翻转即可纠正。
      • 对于某些多比特错误(如同一行或同一列的两个错误)只能检测不能纠正。对于某些特定模式的 4 比特错误可能无法检测。

检验和

主要用于网络层(IP)和传输层(TCP/UDP)的首部校验,链路层较少直接使用,但原理类似。

  • 发送方
    1. 将要校验的数据(如 UDP 首部 + 数据)看作一系列 16 比特的整数。
    2. 计算这些 16 比特整数的反码和
      • 反码加法:二进制加法,最高位的进位要加回到最低位。
    3. 将最终得到的和按位取反,得到的值就是校验和。放入校验和字段。
  • 接收方
    1. 将收到的所有 16 比特数据(包括校验和字段本身)进行反码求和。
    2. 如果结果的所有比特都是 1(即反码表示的 -0),则认为数据很可能没有错误。否则,检测到错误。

这种校验相对较弱,可能无法检测出某些错误模式(如两个 16 比特字中对应比特同时翻转)。

循环冗余检测

目前应用最广泛、检错能力很强的差错检测技术之一(如以太网、Wi-Fi、HDLC 等)。

可参考《计算机组织结构》旧笔记

基于多项式编码和模 2 算术(加法和减法等价于异或 XOR,无进位借位)。

  • 基本原理:
    1. 发送方和接收方预先约定一个 r+1r+1 比特的生成多项式,记为 GG(最高位和最低位必须为 1)。
    2. 设要发送的数据为 DDdd 比特)。发送方希望计算出一个 rr 比特的冗余校验码(CRC 码),记为 RR
    3. 目标是使得 DD 左移 rr 位后(即 D2rD \cdot 2^r)与 RR 拼接起来形成的数据 D,R\langle D, R\rangle,能够GG 模 2 整除
    4. 计算方法:R=remainder(D2rG)R = \text{remainder} \left( \frac{D \cdot 2^r}{G} \right)(这里的除法是模 2 除法)。
    5. 发送方将 D,R\langle D, R\rangle 发送出去。
  • 接收方
    1. 收到数据 D,R\langle D', R'\rangle
    2. 用约定的生成多项式 GG模 2 除 D,R\langle D', R'\rangle
    3. 如果余数为 0,则认为数据很可能没有错误。
    4. 如果余数非 0,则检测到错误,丢弃该帧。
  • 检错能力:
    • 可以检测出所有小于等于 rr 位的突发错误(Burst Errors,即连续 kk 位错误)。
    • 可以检测出所有奇数个比特的错误。
    • 在特定条件下,对于更长的突发错误也有很高的检测概率。
    • 常用的 CRC 标准(如 CRC-32 用于以太网)具有非常强大的检错能力。

CRC 计算示意(模 2 除法)

假设 D=101110,G=1001D = 101110, G = 1001r=3r=3)。

计算 D23=101110000D \cdot 2^3 = 101110000

执行模 2 除法 101110000÷1001101110000 \div 1001

所以 R=011R = 011。发送的数据为 D,R=101110011\langle D, R\rangle = 101110011

接收方收到 101110011101110011 后,计算 101110011÷1001101110011 \div 1001(模 2),会发现余数为 0。

多路访问协议分为哪三种类型?每种类型的工作原理?

主要有三大类 MAC 协议:

  1. 信道划分:将信道资源(时间、频率、码字)预先划分成多个小份,并将每一份独占地分配给一个节点。
    • 优点:公平、无碰撞。
    • 缺点:即使节点没有数据发送,分配给它的资源也被浪费,导致低负载时效率低下。
  2. 随机接入:不划分信道,节点在需要时尝试发送。
    • 允许发生碰撞,但协议需要提供检测碰撞从碰撞中恢复(通常通过重传)的机制。
    • 优点:低负载时效率高,单个节点可以利用全部带宽。
    • 缺点:高负载时碰撞增多,导致信道利用率下降,延迟增加。
  3. 轮流:节点轮流获得发送权。结合了前两类的优点。
    • 通常比信道划分效率高,比随机接入在高负载下更可控。
    • 需要一定的协调机制(如传递令牌或主节点轮询)。
    • 缺点:可能存在协调开销、延迟、单点故障(取决于具体协议)。

每种类型具体看原笔记

什么是 CSMA?什么是 CSMA/CD?它们的工作原理和区别是什么?

载波侦听多路访问(Carrier Sense Multiple Access, CSMA):

  • 核心思想:「先听后说」。
  • 节点在发送前先侦听信道是否有载波(即其他节点正在发送信号)。
    • 如果信道空闲:发送整个帧。
    • 如果信道忙:「推迟发送」,持续侦听直到信道变为空闲,然后立即发送(或等待一小段随机时间后再发送,取决于具体 CSMA 变种)。
  • 人类类比:在谈话中不打断别人。
  • 问题:即使进行了载波侦听,仍然可能发生碰撞
    • 原因在于信号传播延迟。当节点 A 开始发送时,信号需要时间才能传播到节点 B。如果 B 在 A 的信号到达之前侦听到信道空闲并开始发送,就会发生碰撞。
    • 距离越远,传播延迟越大,碰撞的可能性越高。
    • 碰撞发生时,整个帧的传输时间都被浪费了。

带碰撞检测的载波侦听多路访问(CSMA with Collision Detection, CSMA/CD):

  • 对 CSMA 的重要改进,是经典以太网(有线)使用的核心协议。
  • 核心思想:「边听边说,一旦冲突,立即停说」。
  • 节点在发送帧的同时,持续侦听信道。
  • 如果检测到碰撞(即发送信号的同时也收到了来自其他节点的信号),立即执行以下操作:
    1. 停止发送当前帧(避免继续浪费信道时间)。
    2. 发送一个简短的「拥塞信号」,确保所有卷入碰撞的节点都意识到发生了碰撞。
    3. 执行二进制指数退避算法后,返回到载波侦听阶段,尝试重新发送。
  • 人类类比:有礼貌的谈话者,如果发现和别人同时说话,会立即停止,并稍等片刻再尝试发言。
  • 优点:显著减少了碰撞造成的信道时间浪费,提高了信道利用率,尤其是在传播延迟相对于帧传输时间较短的网络中(如典型的局域网)。
  • 碰撞检测:在有线网络(如以太网)中相对容易实现(通过检测发送线路上的电压/功率异常)。但在无线网络中,由于信号强度差异巨大(发送功率远大于接收到的微弱信号),实现碰撞检测非常困难(所谓的「近场效应」),因此无线局域网(如 Wi-Fi)通常使用 CSMA/CA(Collision Avoidance, 碰撞避免)。

以太网 CSMA/CD 算法流程

  1. NIC 从网络层获取数据报,创建链路层帧。
  2. 侦听信道
    • 如果信道空闲,开始发送帧。
    • 如果信道忙,持续侦听直到信道变为空闲,然后立即发送。
  3. 发送期间:持续侦听信道。
    • 如果成功发送完整个帧而未检测到碰撞,则本次传输完成!
    • 如果检测到碰撞:
      1. 立即中止帧的发送。
      2. 发送一个拥塞信号。
      3. 进入二进制指数退避阶段:
        • 对于第 mm 次连续碰撞(mm 从 1 开始计数,通常有上限,如 10 或 16),从集合 {0,1,2,...,2m1}\{0, 1, 2, ..., 2^m - 1\} 中随机选择一个整数 KK
        • 等待 K×512K \times 512 比特时间(512 bit time 是以太网中的一个标准时间单位,称为 slot time,大约是信号在最大长度以太网段上传播一个来回的时间)。
        • 等待结束后,返回第 2 步(重新侦听信道)。
  • 退避机制:碰撞次数越多,随机等待时间的上限(2m12^m-1)呈指数级增长,从而增大了节点选择不同等待时间的概率,有效降低了再次碰撞的可能性。

MAC 地址的表示方式?

  • 定义:媒体访问控制地址(MAC Address),也称为「物理地址」「硬件地址」或「以太网地址」。
  • 长度:通常为 48 比特(6 字节)。
  • 唯一性:由 IEEE 负责管理和分配。制造商购买地址块,理论上保证全球每个网络接口(NIC)都有一个「独一无二」的 MAC 地址。这个地址通常被固化(burned-in)在 NIC 的 ROM 中(但有时也可以通过软件修改)。
  • 格式:通常表示为 6 组十六进制数,用连字符或冒号分隔,如 1A-2F-BB-76-09-AD1A:2F:BB:76:09:AD。每个十六进制数代表 4 比特。
  • 功能:在同一个广播域(如一个局域网子网)内,用于唯一标识一个网络接口,使得帧能够在链路层被正确地从源接口发送到目的接口。

地址解析协议的工作原理?

在一个局域网(如以太网)中,主机 A 知道主机 B 的 IP 地址,但要将 IP 数据报封装成链路层帧发送给 B,还需要知道 B 的「MAC 地址」。如何根据 IP 地址找到对应的 MAC 地址?

解决方案:地址解析协议(ARP, Address Resolution Protocol)。

  • 作用范围:仅在同一个广播域(子网)内工作。
  • ARP 表(ARP Cache):
    • 每个在局域网上的 IP 节点(主机、路由器接口)都维护一个 ARP 表。
    • 表中存储了「近期」通信过的、在同一子网内的其他节点的 IP 地址到 MAC 地址的映射关系。
    • 表项格式通常为:<IP Address, MAC Address, TTL>
    • TTL:表项的生存时间(例如 20 分钟),超时后该表项会被删除,以应对网络中设备 MAC 地址可能发生的变化。

ARP 工作流程(主机 A 查询主机 B 的 MAC 地址):

  1. 主机 A 要向同一子网的 IP 地址 IP_B 发送数据。
  2. A 首先检查自己的 ARP 表中是否有 IP_B 的条目。
  3. 两种情况:
    1. ARP 缓存命中
      • 如果在 ARP 表中找到了 IP_B 对应的 MAC 地址 MAC_B,则 A 直接使用 MAC_B 作为目的 MAC 地址封装帧,并发送。
    2. ARP 缓存未命中
      • A 构造一个 ARP 请求消息。
        • 请求内容:「我是 IP 地址 IP_A,MAC 地址 MAC_A。请问谁拥有 IP 地址 IP_B?请告诉我你的 MAC 地址。」
      • A 将 ARP 请求消息封装在一个链路层帧中。
        • 源 MAC 地址:MAC_A
        • 目的 MAC 地址广播地址 FF-FF-FF-FF-FF-FF
      • A 将该广播帧发送到局域网上。
  4. 局域网上的所有节点都会收到这个广播帧,并解封装得到 ARP 请求消息。
  5. 每个节点检查 ARP 请求中的目标 IP 地址 IP_B
    • 如果目标 IP 地址不是自己的 IP 地址,则忽略该 ARP 请求。
    • 如果目标 IP 地址自己的 IP 地址(即主机 B 收到了请求):
      1. B 将发送方 A 的 IP 地址 IP_A 和 MAC 地址 MAC_A 记录到自己的 ARP 表中(因为 A 很可能马上要给自己发数据,或者 B 可能需要回复 A)。
      2. B 构造一个 ARP 回复消息。
        • 回复内容:「我是 IP 地址 IP_B,我的 MAC 地址是 MAC_B。」
      3. B 将 ARP 回复消息封装在一个链路层帧中。
        • 源 MAC 地址:MAC_B
        • 目的 MAC 地址MAC_A(直接发回给请求者 A,是单播帧)。
      4. B 将该单播帧发送出去。
  6. 主机 A 收到来自 B 的 ARP 回复帧。
  7. A 从 ARP 回复中提取出 B 的 IP 地址 IP_B 和 MAC 地址 MAC_B将这个映射关系存入自己的 ARP 表,并设置 TTL。
  8. 现在 A 知道了 MAC_B,可以封装原始的 IP 数据报(目的 IP 为 IP_B),使用 MAC_B 作为目的 MAC 地址,发送帧给 B。

交换机和路由器的区别?

特性 交换机(Switch) 路由器(Router)
工作层级 链路层(Layer 2) 网络层(Layer 3)
检查头部 链路层头部(MAC 地址) 网络层头部(IP 地址)
转发依据 MAC 地址 IP 地址
转发表名称 MAC 地址表/CAM 表 路由表(Routing Table)
表建立方式 自学习(观察流量),泛洪 路由算法(如 RIP, OSPF, BGP),配置
处理范围 通常在单个广播域 连接不同的广播域(网络)
隔离 隔离冲突域 隔离广播域
地址修改 通常不修改帧内容(除 VLAN tag) 修改 L2 头部(MAC 地址), 递减 TTL
主要功能 在局域网内高效转发帧 在不同网络间选择最佳路径转发数据包

多协议标签交换技术?

MPLS(Multiprotocol Label Switching, 多协议标签交换) 是一种在 IP 网络中提高转发速度和实现流量工程的技术,可以看作一种链路层(或介于 L2 和 L3 之间,常称为 L2.5)的虚拟化技术。

  • 目标:在 MPLS 网络内部实现高速转发,同时提供比传统 IP 路由更灵活的路径控制能力(如流量工程)。
  • 核心思想
    • 进入 MPLS 网络的 IP 数据包会被分配一个定长的标签 MPLS。
    • 网络内部的 MPLS 路由器(称为标签交换路由器 Label Switched Router, LSR)仅根据这个标签进行转发决策,而无需查看 IP 头部(特别是无需进行最长前缀匹配)。
    • 转发基于精确匹配标签值,查找速度快。
    • 借鉴了虚电路(Virtual Circuit, VC)的思想,为特定的流量类别或路径(称为 Label Switched Path, LSP)预先建立标签转发路径。
    • 但与纯 VC 不同,IP 数据报本身仍然保留其 IP 地址,只是在 MPLS 网络内部被「贴标」传输。

具体可参考原笔记

数据中心网络的等级拓扑?

通常采用多层级高冗余的交换网络拓扑。

  • 服务器机架:包含 20~40 台服务器(刀片服务器)。
  • 机架顶交换机:每个机架配备一个或两个 ToR 交换机,直接连接该机架内的所有服务器。通常使用高速以太网(如 100G~400G)连接服务器。
  • 汇聚层交换机:连接多个 ToR 交换机。
  • 核心层交换机:连接多个汇聚层交换机,提供高带宽骨干。
  • 边界路由器:连接数据中心到外部互联网。

常见拓扑:Clos 网络(如 Fat-Tree)、Facebook F16 Minipack 使用的多平面 Fabric 架构等,旨在提供高带宽、低延迟、多路径的连接。

无线网络和移动网络

什么是无线主机、无线链路、基站?什么是基础设施模式、自组织网络?

核心组件

一个典型的无线网络环境包含以下核心元素:

  1. 无线主机
    • 可以是笔记本电脑、智能手机、平板电脑、物联网(IoT)设备等。
    • 运行各种网络应用程序。
    • 这些主机可能是固定的移动的
  2. 基站
    • 通常连接到有线网络基础设施
    • 作为无线主机接入有线网络的中继(Relay),负责在其覆盖区域内转发无线主机与有线网络之间的数据包。
    • 常见形式包括蜂窝网络的基站塔和 Wi-Fi 网络中的接入点(Access Point, AP)。
  3. 无线链路
    • 连接无线主机与基站,或在特定模式下直接连接无线主机。
    • 也可能用作连接基站之间的骨干链路
    • 其特性(如传输速率、覆盖距离、使用的频段)差异很大。
    • 由于共享无线媒介,需要多路访问协议来协调链路访问。

核心组件总结:

  1. 无线主机(Wireless Host):指具备无线通信能力的终端设备(如智能手机、笔记本电脑、IoT 设备)。
  2. 无线链路(Wireless Link):通过无线电波/红外线连接的物理传输通道。
  3. 基站(Base Station):有线网络与无线网络的桥接设备。

网络架构模式

无线网络主要有两种工作模式:

  1. 基础设施模式(Infrastructure Mode)
    • 无线主机通过基站AP)连接到有线网络。
    • 当移动主机从一个基站的覆盖范围移动到另一个基站时,会发生切换越区切换,将连接从旧基站转移到新基站。这是移动蜂窝网络和大多数 Wi-Fi 网络的工作方式。
  2. 自组织模式(Ad Hoc Mode)
    • 没有预设的基站或基础设施
    • 节点(主机)之间直接进行通信,但仅限于彼此的无线链路覆盖范围内。
    • 节点需要自组织形成网络,并自行负责节点间的路由。
特性 基础设施模式 自组织网络
拓扑结构 星型 网状
依赖基站 必须 不需要
覆盖扩展 需增加基站 节点自组织扩展
典型延迟 较低(单跳) 较高(多跳)
管理复杂度 集中式管理 分布式自治
适用标准 802.11/3GPP 802.11(IBSS 模式)

什么是多径传播、信噪比?隐藏终端问题?

多径传播

无线信号在传播过程中会遇到物体(地面、建筑物、车辆等)发生反射、衍射、散射。这导致同一信号的多个副本沿着不同的路径(具有不同的延迟)到达接收端。

  • 现象:发射的脉冲信号在接收端表现为多个延迟不同、幅度不同的脉冲叠加。
  • 相干时间:大致表示信道特性保持稳定的时间间隔。它影响了可以发送的比特在信道中保持可区分状态的时间长度。
    • 如果比特的发送间隔远小于相干时间,多径效应可能导致符号间干扰(Inter-Symbol Interference, ISI),即前一个符号的延迟副本干扰当前符号的接收,限制了最大传输速率。
    • 相干时间与载波频率接收端移动速度成反比。频率越高或速度越快,相干时间越短,信道变化越快。

信噪比

信噪比(Signal-to-Noise Ratio, SNR):接收到的信号功率与噪声(包括干扰)功率的比值。

  • 高 SNR 意味着信号远强于噪声,更容易从中提取有用信号,误码率(BER)低。
  • 低 SNR 则信号淹没在噪声中,误码率高。

隐藏终端问题

这是无线网络中一个经典且重要的问题,尤其影响基于载波侦听的多路访问协议(如 CSMA)。

  • 场景:假设有三个节点 A、B、C。A 和 B 可以互相通信,B 和 C 可以互相通信,但 A 和 C 无法直接听到对方(可能因为距离远或有障碍物)。
  • 问题:如果 A 和 C 同时侦听信道,发现信道空闲,并决定向 B 发送数据,那么它们的信号将在 B 处发生冲突,导致 B 无法正确接收任何一方的数据。然而,A 和 C 自身都不知道发生了冲突,因为它们听不到对方的传输。
  • 原因:冲突发生在接收端(B),而发送端(A 和 C)无法感知到。信号衰减也会加剧此问题,即使 A 和 C 距离不远,它们到达 B 的信号可能足够强,但互相之间的信号却很弱。

隐藏终端的影响

隐藏终端问题使得在无线网络中检测冲突变得非常困难,这也是为什么 Wi-Fi 等协议采用避免冲突(CA)而非检测冲突(CD)的策略。

CDMA 的基本工作原理?

码分多址(Code Division Multiple Access, CDMA)是一种允许多个用户在相同频率相同时间进行传输的多路访问技术,它通过为每个用户分配一个唯一的伪随机码序列(也称扩频码码片序列)来实现用户区分。

  • 核心思想:码集分割。不同用户的信号通过其独特的码序列进行编码(扩频),在接收端再用相同的码序列进行解码(解扩)来恢复原始信号,同时抑制其他用户的信号(视为噪声)。
  • 关键特性:
    • 所有用户共享同一频段。
    • 每个用户拥有独特的码片序列。
    • 允许多用户同时传输,且相互干扰较小(尤其当码序列之间具有良好的正交性时)。

详细可参考原笔记

被动扫描、主动扫描?

扫描STA 寻找可用的 AP

  • 被动扫描STA 监听每个信道上的信标帧。信标帧由 AP 定期广播,包含 APSSID、MAC 地址、支持的速率、安全配置等信息。
  • 主动扫描STA 在每个信道上广播一个探测请求帧。覆盖该区域的 AP 会回复一个探测响应帧,包含类似信标帧的信息。

上下文可参考原笔记

CSMA/CA 的工作原理?

由于无线信道的特性(尤其是隐藏终端问题),802.11 不能使用以太网的 CSMA/CD。它采用带有冲突避免的载波侦听多路访问(Carrier Sense Multiple Access with Collision Avoidance, CSMA/CA)。

  • 目标:尽量避免冲突的发生,而不是检测并处理冲突。
  • 基本机制
    1. 载波侦听:在发送前,站点首先侦听信道。
    2. 如果信道空闲:等待一段称为分布式帧间间隔(Distributed Inter-Frame Space, DIFS)的固定时间。如果在 DIFS 期间信道保持空闲,则发送整个数据帧。
    3. 如果信道忙:站点选择一个随机的退避时间,并在信道变为空闲后开始倒计时。
      • 退避计时器只在信道持续空闲时才递减。
      • 如果信道在倒计时期间再次变忙,计时器暂停,直到信道再次空闲并经过 DIFS 后才继续。
      • 当计时器减到零时,站点发送数据帧。
    4. 确认:由于无法检测冲突,接收方在成功收到数据帧后,需要等待一个短帧间间隔(Short Inter-Frame Space, SIFS,比 DIFS 短)后,立即回复一个确认帧
    5. 如果发送方未收到 ACK(可能因为数据帧丢失或 ACK 帧丢失):认为发生了冲突或传输失败,会增加退避窗口的大小(通常是指数退避),重新选择一个更大的随机退避时间,并重传数据帧。

4G LTE 架构的部件?

4G LTE 网络主要由以下几部分组成:

  1. 用户设备(User Equipment, UE):智能手机、平板、笔记本电脑、IoT 设备等,内置 LTE 无线模块和 SIM 卡(存储 IMSI - 国际移动用户识别码)。
  2. 演进型 UTRAN(Evolved UTRAN, E-UTRAN):即无线接入网(Radio Access Network, RAN),主要由 eNodeB 组成。
    • eNodeB(演进型 NodeB,即基站):管理无线资源(频谱、功率等),负责 UE 与核心网之间的无线通信,执行部分移动性管理功能(如切换决策)。
  3. 演进型分组核心网(Evolved Packet Core, EPC):全 IP 化的核心网络,负责数据路由、移动性管理、策略控制、用户认证等。主要网元包括:
    • 移动性管理实体(Mobility Management Entity, MME):控制平面核心。负责 UE 的附着/分离、跟踪区更新、寻呼、切换控制、用户认证(与 HSS 交互)、承载管理(建立/释放数据通道)。
    • 服务网关(Serving Gateway, S-GW):数据平面核心。作为 UE 在 E-UTRAN 内部移动的本地锚点,负责路由和转发用户数据包,对计费数据进行收集。
    • 分组数据网络网关(PDN Gateway, P-GW):数据平面核心。作为 UE 接入外部 IP 网络(如互联网)的接口,负责 IP 地址分配、策略执行(PCEF)、计费、数据包过滤。是 UE 在不同接入技术(如 LTE 与 Wi-Fi)间移动的锚点。
    • 归属用户服务器(Home Subscriber Server, HSS):控制平面数据库。存储用户的签约信息(包括 IMSI、服务权限、密钥等)、用户位置信息(当前 MME 地址)、认证信息。相当于用户的「家」。
    • 策略和计费规则功能(Policy and Charging Rules Function, PCRF):(未在图中显式标出)制定策略和计费规则(如 QoS、流量控制)。

到移动设备的间接路由?到移动设备的直接路由?

间接路由

这是最常用的一种移动性支持方法。

工作流程:

  1. 注册
    • 移动节点(Mobile Node, MN)到达拜访网络,发现外部代理(FA)。
    • MNFA 请求服务,FA 可能分配一个 CoA
    • MN(或通过 FA)向归属代理(HA)发送注册请求,告知其当前的 CoA
    • HA 记录下 MN 的归属地址与其当前 CoA 的绑定关系,并回复注册确认。
  2. 数据发送CN \to MN):
    • 通信实体(CN)像平常一样,将数据包发送到 MN归属地址
    • 归属网络中的 HA 截获该数据包。
    • HA 将原始数据包封装在一个新的 IP 数据包中(即隧道),新 IP 包的目的地址是 MNCoA(通常是 FA 的地址),源地址是 HA 的地址。
    • 封装后的数据包通过互联网路由到 FA
    • FA 收到封装的数据包,解封装得到原始 IP 包。
    • FA 将原始 IP 包转发给 MN
  3. 数据发送MN \to CN):
    • MN 可以直接将数据包发送给 CN,使用自己的归属地址作为源地址。数据包通过拜访网络的路由器正常路由到 CN
sequenceDiagram
    participant CN as 通信实体
    participant HA as 归属代理
    participant FA as 外部代理
    participant MN as 移动节点

    Note over MN,HA: 移动节点注册过程(已完成)
    CN->>HA: 发往 MN 归属地址的数据包
    HA->>HA: 截获数据包
    HA->>FA: 隧道封装(目的地址=CoA, 源地址=HA)
    FA->>FA: 解封装隧道包
    FA->>MN: 转发原始数据包

    MN->>FA: 发往 CN 的数据包(源地址=MN 归属地址)
    FA->>CN: (通过拜访网络路由器)转发数据包

「间接路由」的特点:

  • 优点
    • 通信实体(CN)透明CN 无需知道 MN 是否移动或当前在哪里,只需使用其归属地址。
    • 可以保持进行中的连接(如 TCP 连接)不中断,因为 MN 的 IP 地址(归属地址)对 CN 来说始终不变。
  • 缺点
    • 三角路由:从 CN 发往 MN 的数据包需要绕道归属网络(HA),即使 CNMN 可能在同一个拜访网络中,路径也非最优,增加了延迟。
    • HA 成为性能瓶颈和单点故障。

直接路由

为了克服三角路由问题,提出了直接路由方法。

工作流程:

  1. 注册:与间接路由类似,MNHA 处注册其 CoA
  2. CoA 查询
    • CN 想要给 MN 发送数据时,它首先MNHA 查询 MN 当前的 CoA
    • HA 回复 MNCoACN
  3. 数据发送CN \to MN):
    • CN 获取到 CoA 后,将数据包直接发送到 MNCoA
    • 如果 CoAFA 的地址,则数据包先到达 FAFA 解封装(如果需要的话,取决于具体实现)后转发给 MN
    • 如果 CoAMN 在拜访网络获得的临时地址,则数据包直接路由到 MN
  4. 数据发送MN \to CN):
    • 与间接路由相同,MN 直接发送给 CN

「直接路由」的特点:

  • 优点
    • 克服了三角路由,路径更优,延迟可能更低。
  • 缺点
    • 通信实体(CN)不透明CN 需要实现额外的逻辑来查询 CoA,并处理 CoA 的变化。
    • 移动性处理更复杂:如果 MNCN 查询到 CoA 之后、数据包到达之前再次移动到新的拜访网络,CN 发往旧 CoA 的数据包会丢失。需要额外的机制来处理这种情况(例如,旧 FA 将数据包转发到新 FA,或者通知 CN 更新 CoA)。

移动设备从源基站切换到目标基站的步骤?

UE 在激活状态下从一个 eNodeB(源 eNodeB)移动到另一个 eNodeB(目标 eNodeB)的覆盖范围时,需要进行切换以保持连接。LTE 中的切换是网络控制的,通常由源 eNodeB 基于 UE 上报的测量报告(邻近小区信号强度)来发起。

MME/S-GW 下的切换流程(简化):

  1. 测量与决策UE 测量邻近小区信号强度并上报给源 eNodeB。源 eNodeB 决定需要切换到目标 eNodeB
  2. 切换准备:源 eNodeB 向目标 eNodeB 发送切换请求,包含 UE 的上下文信息。
  3. 资源预留:目标 eNodeB 预留无线资源,并向源 eNodeB 回复切换请求确认,其中包含切换指令所需的信息。
  4. 切换指令:源 eNodeBUE 发送切换指令
  5. 同步与接入UE 与目标 eNodeB 同步,并发起随机接入。
  6. 路径切换:目标 eNodeB 通知 MME 切换完成。MME 指示 S-GW 将下行数据路径从源 eNodeB 切换到目标 eNodeB(更新 S1-U 隧道的端点)。
  7. 数据转发:(可选)在路径切换完成前,源 eNodeB 可以将尚未发送给 UE 的下行数据包转发给目标 eNodeB
  8. 资源释放MME 通知源 eNodeB 释放为该 UE 保留的资源。

计算机网络中的安全

安全通信包括哪四个方面的性质?

网络安全通常围绕以下几个核心属性展开:

  1. 机密性:确保信息仅被授权用户访问和理解。即使数据被截获,未授权者也无法解读其内容。这通常通过加密实现。
    • 发送方加密消息。
    • 接收方解密消息。
  2. 认证:验证通信参与方(用户、设备或进程)身份的真实性。确保你正在与之通信的对象确实是它所声称的身份。
  3. 完整性:确保消息在传输过程中或存储后未被篡改。接收方可以验证消息自发送以来是否保持原样。
  4. 可用性与访问控制:确保授权用户在需要时能够访问信息和网络服务。访问控制则限制不同用户对资源的访问权限。

对称密钥系统与公开密钥系统的区别?

  • 对称密钥密码体制中,发送方和接收方使用相同的密钥进行加密和解密。密钥的分发和保密是其核心挑战。
  • 公钥密码体制是一种与对称密钥体制截然不同的加密方法:
    • 发送方和接收方不需要共享秘密密钥。
    • 用公钥加密的数据只能用对应的私钥解密。
    • 用私钥加密(签名)的数据可以用对应的公钥验证。

RSA 算法的工作原理?

RSA 是由 Rivest, Shamir, Adelson 三人提出的一种广泛使用的公钥加密算法。

RSA 密钥生成:

  1. 选择两个非常大的素数 ppqq(例如,每个 1024 位)。
  2. 计算 n=p×qn = p \times qnn 是公钥和私钥的一部分,其长度决定了 RSA 的安全性。
  3. 计算欧拉函数 ϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1)。在 RSA 中,通常用 z=(p1)(q1)z = (p-1)(q-1) 表示。
  4. 选择一个整数 ee(加密指数),使得 1<e<z1 < e < z,并且 eezz 互素(即 gcd(e,z)=1\gcd(e, z) = 1)。
  5. 计算整数 dd(解密指数),使得 e×d1modze \times d \equiv 1 \bmod z。即 ddee 关于模 zz 的乘法逆元。这意味着 ed1ed - 1 可以被 zz 整除。
  6. 公钥(n,e)(n, e),记为 KB+=(n,e)K_B^+ = (n, e)
  7. 私钥(n,d)(n, d),记为 KB=(n,d)K_B^- = (n, d)

假设 Alice 想给 Bob 发送消息 mm (表示为小于 nn 的整数):

  • 加密:Alice 获取 Bob 的公钥 (n,e)(n, e),计算密文 c=memodnc = m^e \bmod n
  • 解密:Bob 收到密文 cc 后,使用自己的私钥 (n,d)(n, d),计算明文 m=cdmodnm' = c^d \bmod n

可以证明 m=mm' = m。即:m=(memodn)dmodnm = (m^e \bmod n)^d \bmod n

假设 Bob 选择 p=5,q=7p=5, q=7

  1. n=p×q=5×7=35n = p \times q = 5 \times 7 = 35
  2. z=(p1)(q1)=(51)(71)=4×6=24z = (p-1)(q-1) = (5-1)(7-1) = 4 \times 6 = 24
  3. 选择 e=5e=5。因为 5 和 24 互素,所以 e=5e=5 是一个合法的选择。
  4. 计算 dd 使得 5d1mod245d \equiv 1 \bmod{24}。可以找到 d=29d=29(因为 5×29=145=6×24+15 \times 29 = 145 = 6 \times 24 + 1)。
  5. Bob 的公钥是 (n=35,e=5)(n=35, e=5)
  6. Bob 的私钥是 (n=35,d=29)(n=35, d=29)

现在假设要加密一个 8 位消息,例如明文 m=12m=12(二进制 00001100)。

  • 加密c=memodn=125mod35=248832mod35=17c = m^e \bmod n = 12^5 \bmod{35} = 248832 \bmod{35} = 17
  • 解密m=cdmodn=1729mod35=12m' = c^d \bmod n = 17^{29} \bmod{35} = 12

详细可参考原笔记

密码散列函数的性质?

密码学哈希函数的特性:

  1. 易于计算:对于任意给定的消息 mm,计算 H(m)H(m) 相对容易。
  2. 固定长度输出:无论输入消息多长,输出的哈希值长度总是固定的(如 128 位、160 位、256 位)。
  3. 抗原像攻击:给定一个哈希值 hh,在计算上难以找到任何消息 mm 使得 H(m)=hH(m) = h
  4. 抗第二原像攻击:给定一个消息 m1m_1,在计算上难以找到另一个不同的消息 m2m_2 使得 H(m1)=H(m2)H(m_1) = H(m_2)
  5. 抗碰撞性:在计算上难以找到任意两个不同的消息 m1m_1m2m_2 使得 H(m1)=H(m2)H(m_1) = H(m_2)

数字签名的基本原理?

数字签名是一种密码学技术,用于验证数字消息或文档的真实性、完整性以及发送者的身份,并提供不可否认性。它类似于手写签名在物理世界中的作用。

  • 原理:发送方(如 Bob)使用自己的私钥 KBK_B^- 对消息 mm(或其哈希值)进行「加密」操作,生成签名。
  • 特性
    • 可验证:接收方(如 Alice)可以使用发送方的公钥 KB+K_B^+ 来验证签名的有效性。
    • 不可伪造:只有拥有私钥 KBK_B^- 的 Bob 才能生成有效的签名。其他人(包括 Alice 和 Trudy)无法伪造。
    • 不可否认:Bob 不能否认他曾经签署过该消息,因为只有他的私钥能产生该签名。

鉴别协议及其安全性?

也许可参考原笔记

IPSec 协议族中的两个重要协议?

IPsec 主要包含两个核心协议:

  1. 认证头(Authentication Header, AH)[RFC 4302]:
    • 提供源认证和数据完整性保护。
    • 不提供机密性(即不加密数据)。
  2. 封装安全载荷(Encapsulation Security Protocol, ESP)[RFC 4303]:
    • 提供源认证、数据完整性保护,并且提供机密性(加密数据)。
    • ESP 比 AH 更常用,因为它提供了更全面的安全服务。ESP 也可以配置为只提供认证和完整性而不加密。

防火墙包括哪三类?这三类的主要区别?入侵检测系统与防火墙的主要区别?

防火墙

防火墙主要有三种类型:

  1. 无状态包过滤器

    • 逐个检查数据包,根据固定的规则集决定转发或丢弃。
    • 决策依据通常是 IP/TCP/UDP 头部信息:
      • 源/目标 IP 地址
      • TCP/UDP 源/目标端口号
      • ICMP 消息类型
      • TCP 标志位(SYN, ACK, FIN, RST 等)
    • 示例规则
      • 阻止 IP 协议号为 17 (UDP) 且源或目标端口为 23 (Telnet) 的所有进出数据报,从而禁止所有 UDP Telnet 连接。
      • 阻止入站 TCP 段中 ACK 位为 0 的包(即阻止外部客户端主动发起对内部服务器的 TCP 连接,但允许内部客户端连接外部服务器,因为其响应包 ACK 位为 1)。
    • 访问控制列表(Access Control Lists, ACLs):防火墙规则通常以 ACL 的形式组织,规则按顺序匹配,从上到下。这类似于 OpenFlow 的转发规则。
  2. 有状态包过滤器

    • 无状态过滤器是「一刀切」的工具,可能允许一些「无意义」的包通过(例如,一个目标端口为 80 且设置了 ACK 位的包,即使之前并没有建立 TCP 连接)。
    • 有状态过滤器会跟踪每个 TCP 连接的状态(如 SYN, ESTABLISHED, FIN_WAIT)。
    • 它会判断传入和传出的数据包是否符合当前连接状态的「逻辑」。
    • 对于不活动的连接,有状态防火墙会设置超时,超时后不再允许相关数据包通过。
    • ACL 规则会增加一个「检查连接状态表」的条件。
  3. 应用网关

    • 不仅检查 IP/TCP/UDP 头部,还会检查应用层数据。
    • 可以为特定应用(如 HTTP, FTP, Telnet)提供细粒度的访问控制。
    • 示例(Telnet 网关):
      1. 要求所有内部用户通过 Telnet 网关访问外部 Telnet 服务。
      2. 对于授权用户,网关代表用户建立到目标主机的 Telnet 连接。
      3. 网关在用户和目标主机之间的两个连接之间中继数据。
      4. 路由器上的包过滤器会阻止所有不是源自该 Telnet 网关的 Telnet 连接请求。

入侵检测系统

传统的包过滤防火墙主要基于头部信息,且通常不跨会话进行关联检查。

入侵检测系统

入侵检测系统(Intrusion Detection System, IDS)是一种监控网络或系统活动,以发现恶意行为或策略违反迹象的设备或软件。

IDS 的能力通常超越传统防火墙:

  • 深度包检测(Deep Packet Inspection, DPI):查看数据包的内容,例如,检查数据包中的字符特征串是否与已知病毒库或攻击特征库匹配。
  • 多包关联分析:分析多个数据包之间的关联,以识别更复杂的攻击模式,例如:
    • 端口扫描:检测是否有主机在尝试连接目标系统的大量端口。
    • 网络映射:检测是否有工具在探测网络拓扑。
    • 拒绝服务攻击:识别异常流量模式。

IDS 可以部署在网络中的不同位置(例如,在防火墙之后监控内部网络,或在 DMZ 区监控面向公众的服务),形成多层检测。

对比

这部分原笔记没有。

防火墙主要分为以下三类,其核心区别在于工作层次、检测粒度及功能侧重点:

  1. 包过滤防火墙(Packet Filtering Firewall)
    • 工作层次:网络层和传输层。
    • 工作原理:基于 IP 包头信息(如源/目标 IP、端口、协议类型)进行简单规则匹配,决定允许或丢弃数据包。
    • 特点
      • 性能高,对网络延迟影响小。
      • 无法检测应用层内容(如 HTTP 请求中的恶意代码)。
      • 无状态(早期版本),无法跟踪连接状态(如 TCP 握手)。
  2. 状态检测防火墙(Stateful Inspection Firewall)
    • 工作层次:传输层,可部分关联应用层。
    • 工作原理:维护连接状态表(如 TCP 会话状态),动态允许已建立连接的数据包通过。
    • 特点
      • 能防御 IP 欺骗、SYN 洪水等基于状态的攻击。
      • 仍无法深度解析应用层协议(如识别 HTTP 中的 SQL 注入)。
  3. 应用层防火墙(Application/Proxy Firewall)
    • 工作层次:应用层。
    • 工作原理:作为代理中介,完全解析应用协议(如 HTTP、FTP),过滤恶意内容。
    • 特点
      • 安全性最高,可防御 XSS、SQL 注入等应用层攻击。
      • 性能开销大,可能引入较高延迟。
对比维度 防火墙(Firewall) 入侵检测系统(IDS)
核心功能 访问控制(允许/阻止流量) 威胁检测(监控并报警异常行为)
工作位置 网络边界(如网关) 旁路部署(监听流量,不直接拦截)
响应方式 主动拦截可疑流量 被动报警,需管理员干预(部分 IPS 可主动阻断)
检测能力 基于预定义规则(如 ACL) 基于签名(已知攻击)或异常行为分析(AI)
部署目标 防御外部威胁(第一道防线) 发现内外威胁(包括内部横向移动)

  1. 虽然叫「补码」,但这和计算机中整数表示的「补码」无关,实际操作是取反。计算机网络中的校验和实际上是「补码和」(One's Complement Sum),而计算机的「补码」则是「二补码」(Two's Complement),「反码」才是「一补码」(One's Complement)。 ↩︎