KaiSpace
tech

CS2105 Computer Networks

CS2105 Note

Lecture 0 - Welcome to CS2105

0.1 课程核心目标与哲学

CS2105 并不是一门教你如何插网线、配置Cisco router hardware,或者考取网络工程师认证(如 CCNA)的职业培训课。这门课的核心目的是教授计算机网络的核心原理与概念 (Principles and Concepts),并以当今最成功的网络系统——Internet (互联网) 作为主要案例进行深度剖析。

  • 不会涉及的内容:底层硬件的具体配置(这属于 CS3103 实验课的内容);移动与无线网络(Mobile and wireless networks,如 3G/4G/5G/WiFi 物理层细节,这部分在高级课程 CS4222 中讨论)。
  • 教授的期望:不要只盯着分数(Grades),而是要理解网络架构的演进。现有的网络架构是几十年前的工程师在当时的视野下设计的(可能存在短视),作为新一代的计算机科学家,你们的目标是发现现有架构的缺陷,并思考如何构建更好的下一代网络。

0.2 课程考核分配与政策细则

  • 期末考试 (Final Exam):50%。允许携带 Cheat Sheet(备忘单),但不允许开卷带往年真题。
  • 期中考试 (Midterm Test):25%。在第 7 周(Week 7)的周五进行。
    • 【考试形式深度解析】:教授特别强调,期中考试采用 MRQ (Multiple Response Question, 多项选择题) 而不是传统的 MCQ(单选题)。MRQ 允许答案有 1 个、2 个甚至 0 个正确选项。这是因为在网络工程中,很多时候排除了三个错误答案本身就代表了极高的知识水平。MRQ 采用部分给分制 (Partial Score),严厉打击盲目瞎猜,旨在真实反映学生的知识掌握度。
  • 编程作业 (Assignments):20%。共 4 个独立的编程作业,推荐使用 Python。
    • 【学术诚信 (Plagiarism Policy)】:网络编程作业严格禁止抄袭。你可以向朋友寻求“定性 (Qualitative)”的建议(例如:“你可能需要在发送消息之间增加延迟”),但绝不能分享、查看甚至讨论具体的代码实现(例如:“你需要定义一个变量 d 并设置倒计时”)。禁止使用在线开源代码,对 AI 辅助工具(如 Co-pilot / ChatGPT)有极其严格的限制。课程组故意不列出所有的 Corner Cases(边缘情况),就是为了让学生在编程中亲身体验网络环境的复杂性并自行踩坑。
  • 课堂参与 (Participation):5%。

0.3 终极真理源泉 (Source of Truth)

  • 核心教材:《Computer Networking: A Top-Down Approach》(第 9 版 / Global Edition,Kurose and Ross 著)。
  • 【学习建议】:网络技术日新月异,如果将所有最新的协议(如 WiFi 6, HTTP/3)都塞进课堂,课程容量会爆炸。因此,课堂上主要教授最基础、最经典的经典协议(如 HTTP 1.0/1.1)。幻灯片无法涵盖所有的细节,如果课堂讲解、幻灯片与教材出现分歧,永远以教材为准 (Textbook is the source of truth)

Lecture 1 - Introduction

1.1 什么是 Internet?

在课堂上,教授用了一个非常生动的“异世界动漫”比喻来形容这门课的本质:“我转生为 17 世纪的贵族,并与我的未婚妻展开了一场异地恋 (I reincarnated as a 17th century aristocrat in a long-distance relationship with my fiancée)”。 网络通信的本质,就如同 Alice 和 Bob 在 17 世纪通过错综复杂的全球邮政系统传递信件。

从严谨的计算机科学角度,我们可以从两个维度来定义 Internet:

  1. 硬件与组件视角 (Nuts and Bolts View)

    • Network Edge (网络边缘):指连接在网络边缘的终端系统(Hosts / End Systems)。你的手机、个人电脑、Mac、智能电视,甚至远端的 Facebook 服务器,只要它位于网络的端点并运行网络应用程序,它就是 Host。

    • Network Core (网络核心):由相互连接的路由器(Routers)和交换机组成的网状结构(Mesh),以及各级互联网服务提供商(ISP,如 SingTel, StarHub)。它们就像是邮政系统中的各个中转邮局,负责把数据包裹从源头搬运到目的地。

    • Physical Links (物理链路):连接边缘和核心的媒介。包括有线媒介(Coaxial cable 同轴电缆、Fiber optics 光纤、Unshielded twisted pair 无屏蔽双绞线)和无线媒介(Radio waves 无线电波)。注意,无线电波虽然没有实体质量,但它依然是物理层媒介。

      image-20260225103407332

  2. 服务视角 (Service View)

    • Hosts run network applications: Internet 是一种为网络应用程序(如 Web、VoIP、Email、网络游戏)提供通信服务的分布式基础设施

    • Applications communicate using protocols: 在这个基础设施上,应用程序通过交换 Message 并遵循特定的 Protocols (协议) 来进行通信。(e.g. http, ftp, smtp, tcp, rtp)

1.2 网络核心:Packet Switching (分组交换)

(🔗 跨章节参考:这里介绍的 Packet Switching 是后续 Lecture 4 可靠数据传输和 Lecture 6 IP 路由的基础。)

网络核心中的路由器如何转发数据?主要有两种方式,而互联网坚定地选择了第一种:

  • Packet Switching (分组交换)
    • 原理:发送方将应用层的长报文(Message)切割成一个个独立的数据块,称为 Packet(分组/数据包)
    • Store-and-forward (存储转发) 机制:这是极其重要的考点。路由器在将一个 Packet 转发到下一跳之前,必须先完整地接收并存储该 Packet 的所有比特。如果不完整接收,路由器就无法验证数据是否损坏,也无法决定其转发路径。
    • 资源共享 (Resource sharing on demand):链路的带宽被所有用户动态共享。如果有两个用户同时发送大量数据,路由器会把多出来的数据包放入队列(Queue)中排队等待。
    • best effort service
  • Circuit Switching (电路交换)
    • 原理:主要用于传统的电话网络。在通信开始前,网络必须在收发双方之间建立一条端到端的专属连接 (Dedicated allocation)
    • 优缺点:优点是性能有绝对保障,不需要排队;缺点是极度浪费资源。如果 Alice 和 Bob 建立连接后 10 分钟不说话,这条线路的带宽就白白闲置了,别人也无法使用。

1.3 网络结构:网络的网络

互联网是由众多网络连接而成的复杂系统 :

  • Access ISP: 用户连接互联网的第一站(如学校、公司、家庭网络)。StarHub, SingTel都属于这一层。

  • Reginal ISP & Global ISP: access ISP (Tier 3) 连接到regional ISP (Tier 2),再连接到第一层 (Tier-1) ISP(如 AT&T, NTT)。

  • IXP (Internet Exchange Point): 互联网交换中心,让不同的 ISP 可以在此互联和对等传输数据 。

    image-20260225105016513

  • content provider network: 像 Google 这样的巨头拥有自己的私人网络,绕过传统的 Tier-1 ISP,直接连接到较低层的网络 。

    image-20260225104952447

1.4 网络性能的四大延迟 (Sources of Delay)

packet sending过程:

  1. sender transmit package onto the link as a sequence of bits.
  2. Bits are propogated to the next node (e.g. a router) on the link.
  3. Router stores, processes and forwards the packet to the next link.
  4. Steps 2&3 repeat till the packet arrives at the receiver.

Router一般有一个queue来储存incoming packages,如果满了会导致丢包。

image-20260225110355870

当一个 Packet 从源头传输到目的地时,它会经历四种不同的时间延迟(End-to-end delay = 处理 + 排队 + 传输 + 传播):

  1. Processing Delay (处理延迟):路由器检查包头、查找路由表、决定将数据包导向哪个输出链路所需的时间。通常极短(微秒级)。
  2. Queuing Delay (排队延迟):数据包在路由器的输出队列中等待被推上链路的时间。这个延迟是动态变化的。如果网络拥堵,队列满了,新到达的 Packet 就会被丢弃,这就是 Packet Loss (丢包) 的根本原因。
  3. Transmission Delay (传输延迟):将整个数据包的所有比特(Bits)推(Push)到物理链路上所需的时间。计算公式:Packet Size (bits) / Link Bandwidth (bps)注意:链路的带宽直接决定的是传输延迟,带宽越大,把包推上链路的速度越快。
  4. Propagation Delay (传播延迟):比特在物理媒介中从一端传播到另一端所需的时间。计算公式:Link Length / Propagation Speed。信号在光纤中的传播速度接近光速。

image-20260225110850825

End-to-end packet delay:从src到dst的总时间。

吞吐量 (Throughput): 单位时间内成功end-to-end传输的比特数 。

1.5 分层架构与协议 (Layering & Protocols)

  • 什么是协议? 就像人类见面先说“Hi”再问时间一样,协议定义了网络实体之间交换报文的格式 (Format)、顺序 (Order),以及在发送/接收报文时应采取的动作 (Actions)

  • Layering (分层思想):计算机科学中处理复杂系统的终极武器——抽象 (Abstraction)

    • 分层将复杂的网络功能分解,每一层只负责特定的功能(提供 Service),并通过简单的接口与其上下层交互。
    • 这样做隐藏了底层的复杂细节(Hide details from each other)。应用层开发者完全不需要知道底层的光纤是如何发送光信号的。
  • 互联网五层协议栈

    1. Application (应用层):支持网络应用(HTTP, SMTP, DNS)。

    2. Transport (传输层):进程到进程的数据传输(TCP, UDP)。

    3. Network (网络层):主机到主机的路由与寻址(IP)。

    4. Link (链路层):相邻网络节点间的数据传输。

    5. Physical (物理层):在线缆或空气中传输原始比特流。 (注:OSI 模型的 Session 层和 Presentation 层在 Internet 架构中被合并入 Application 层处理)

      image-20260225111507719

      image-20260225111519462


Lecture 2 - Application Layer

每一个internet application都要用application layer protocol。

2.1 网络应用架构 (Application Architecture)

开发网络应用时,首先要决定采用哪种系统架构:

  1. Client-Server (C/S 架构,客户端-服务器)
    • Server:必须保持永远在线 (Always-on),拥有固定的公网 IP 地址(否则客户端找不到它)。它是服务的被动提供者。
    • Client:主动发起通信,客户端之间通常不直接相互通信(例如你的浏览器不会直接和我的浏览器通信)。
  2. Peer-to-Peer (P2P 架构,点对点)
    • 没有永远在线的中心服务器。任意的终端系统(Peers)之间直接通信。
    • 优点是高度的可扩展性 (Scalability),用户越多,系统整体的提供能力越强;缺点是难以管理和安全控制。
  3. Hybrid (混合架构):结合两者优点。用户central server注册IP address,然后establish P2P network。

2.2 传输层服务需求 (Service Requirements)

不同的应用对底层网络提供的服务要求不同:

  • Data integrity:文件传输、邮件必须 100% 可靠;实时音视频可以容忍部分丢包。

  • Timing (时延):在线游戏、实时通讯对延迟要求苛刻。

  • Throughput (吞吐量):流媒体需要最低保障带宽;而网页浏览是弹性的。

  • Security (安全性):机密性需求。

    image-20260225113041377

2.3 Application Layer Protocols

1) 应用层协议定义的内容

应用层协议规定了应用程序之间如何进行通信,具体包含以下四个维度:

  • 交换的消息类型:例如请求消息(request)和响应消息(response)。
  • 交互规则:规定了应用程序在何时以及如何发送消息、如何对消息做出响应。
  • 消息语法:定义了消息中包含哪些fields,以及这些fields是如何划分和排列的。
  • 消息语义:明确了各个field中所包含信息的具体含义。

2) 协议的分类

根据开放程度,协议被分为两大类:

  • 公开协议 (Open Protocols)
    • 通常在 RFCs(请求意见稿)文档中进行定义。
    • 其最大的特点是支持互操作性(Interoperability),允许不同开发者开发的软件互相通信。
    • 典型示例:HTTP(万维网协议)、SMTP(电子邮件协议)。
  • 私有协议 (Proprietary Protocols)
    • 由特定公司或组织私有,不对外完全公开。
    • 典型示例:Skype。

image-20260225113303313

一个packet需要有IP address和port number才能被送到正确的地方。

一个packet由TCP或者UDP处理。(further covered in section 5)

TCP 服务:面向连接、可靠传输、具有flow control (not overwhelming the receiver)和congestion control (throttle sender when the network is overloaded);不保证timing, minimum throughput以及security。

UDP 服务:无连接、不可靠传输;不提供flow和congestion control 。

2.4 Web and HTTP

  • HTTP (Hyper-Text Transfer Protocol) 是 Web 的核心协议。它构建在 TCP 传输层之上。

  • Web 页面由一个 Base HTML 文件和多个对象(Objects,如图片 imgdoge.jpg)组成。

  • Web objects are addressable by a Uniform Resource Locator (URL)

  • HTTP 连接类型

    • Non-persistent (非持久连接 - HTTP 1.0):每次请求一个对象,都要建立一次 TCP 连接(三次握手),传输完毕后立即关闭。如果页面有 10 张图片,就需要建立 10 次独立的 TCP 连接,极度消耗时间和服务器资源。
    • Persistent (持久连接 - HTTP 1.1):建立一次 TCP 连接后,可以通过这条已经开启的管道连续发送多个对象的请求和响应,大大降低了延迟。
  • HTTP Request

    image-20260225115526030

    Connection: close: 告诉服务器在发送完请求的对象后关闭连接 。

    image-20260225115646702

    image-20260225115710487

curl (Client URL) 是现代互联网开发的标配。它的口号是“利用 URL 语法传输数据”,支持的协议多到数不清(HTTP, HTTPS, FTP, FTPS, SCP, SFTP 等)。

核心特性

  • 非交互式: 你给它一个指令,它执行完就返回结果,非常适合放在脚本(Script)里。
  • 功能极其强大: 支持 Header 自定义、Cookie 处理、用户代理伪造、文件上传下载、断点续传。
  • 安全性: 完美支持 SSL/TLS 加密传输。

常见用法

  • 获取网页源码: curl https://www.google.com
  • 测试 API: curl -X POST -d "name=Gemini" https://api.example.com/login
  • 下载文件: curl -O https://example.com/file.zip

Non-persistent vs Persistent

HTTP 1.0 (non-persistent)

image-20260225120220109

Rount trip time(RTT): 一个packet从client到server再回来的时间

HTTP 1.0需要2*RTT + file transmission time传输一个文件

HTTP 1.1 (persistent)

image-20260225120355255

pipeline vs sequential vs multiplexing (HTTP 2)

pipeline

image-20260225121020123

image-20260225121113444

Stateless vs Stateful

HTTP 协议本身不保存client的历史信息。为了记住用户登录状态,引入了 Cookies(本质上是保存在client的 Key-value pairs 键值对,每次请求时附带发送给服务器)。

image-20260225121512372
如果一个网页没有任何变动,无需每刷新一次都要下载resources。我们在browser的cache中存If-modified-since: <date>,如果server发现没有任何修改就返回304 Not Modified。

image-20260225133717606

2.4 DNS (Domain Name System)

(🔗 跨章节参考:DNS 完美体现了分层和抽象思想。人们记不住 32 位的 IP 地址,所以我们使用名字。)

  • DNS 是互联网的核心目录服务。它的唯一任务是将人类可读的 Host names(如 www.comp.nus.edu.sg)翻译成机器用于寻址的 IP 地址(如 137.132.x.x)。

  • 分布式分层数据库

    • 根域名服务器 (Root)

    • 顶级域名服务器 (TLD):负责 .com, .org, .edu, .sg 等 。

    • 权威域名服务器 (Authoritative):组织自身的 DNS 服务器 。

      image-20260225141033937

    Resource Record (RR)

    • A: 域名 → IP 。

    • NS: 域名 → 该域权威服务器的主机名 。

    • CNAME: 别名 → 规范名称 。

    • MX: 邮件域 → 邮件服务器名称 。

      image-20260225140812914

    查询方式

    • 递归查询 (Recursive):本地 DNS 服务器直接问根服务器,然后根服务器代劳询问TLD->authoritative,最后把IP原路返回给本地DNS服务器。
    • 迭代查询 (Iterative):本地 DNS 服务器询问root,root告诉本地服务器下一个应该问哪个服务器 。

    dig指令会输出域名的所有DNS记录,例如dig www.facebook.com any

    DNS Caching:

    • 一旦学习到了映射关系,它会将其存储在本地缓存中 。

    • 下次同样的查询可以直接从缓存获取,无需再走复杂的层级查询流程 。

    • 缓存会有过期时间 (TTL),以保证信息不会永久陈旧 。

    安全与运行:DNS 运行在 UDP/53 端口 。常见威胁包括 DNS 劫持、中毒/缓存污染。

    DNS服务器和路由器是两套系统,DNS是应用层,作用在UDP协议以及网络层之上。


Lecture 3 - Socket Programming

3.1 什么是 Socket?

  • 应用层进程将底层复杂的 Internet 视为一个“黑盒(Black box)”。进程如果要把数据送到网络上,就像你要把信丢进邮筒。这个“邮筒”就是 Socket

  • 编程层面上,Socket 是一套操作系统提供的 API。

  • Socket 的定位公式:Socket = IP Address (定位主机) + Port Number (端口号,定位该主机上的具体进程)。

    • 例如,Web 服务器固定监听 Port 80;一台主机上可以同时运行 Web 服务(Port 80)和邮件服务(Port 25),通过端口号来区分流量。

    • Multiplexing/De-multiplexing

      multiplexing:sender的transport layer会给不同socket发出的数据打上不同标签,封装成segment,然后统一从network layer发送出去

      demultiplexing:receiver通过查看header的标签将数据交给对应的socket。

      image-20260225143712529

3.2 UDP Socket 与 TCP Socket 的核心区别

教授在课堂上展示了 Python 代码的运行逻辑,这是 Assignment 1 的核心基础。

  • UDP Socket (Datagram Socket)

    • 特征:无连接 (Connection-less)、不可靠。
    • 单一 Socket 处理一切:因为没有建立专属连接的概念,UDP 服务器只需要创建一个 Socket。如果有一万个客户端发消息过来,这一个 Socket 就能接收所有人的数据报。
    • 寻址要求:正如教授所说,“如果你写了一封长信,你需要把它装进信封并写上地址”。每次调用 sendto() 发送 UDP 数据时,必须显式地附带目标 IP 和目标端口号
  • TCP Socket (Stream Socket)

    • 特征:面向连接 (Connection-oriented)、可靠传输。
    • 双重 Socket 机制 (Welcome Socket vs Connection Socket)
      1. TCP 服务器首先创建一个 Welcome Socket (欢迎套接字),绑定在特定端口(如 80)上,专门用于监听(Listen)新客户端的连接请求。
      2. 当客户端发起连接,Welcome Socket 接收请求后,操作系统会专门为这个客户端 Fork(派生)出一个全新的、专属的 Connection Socket (连接套接字)
      3. 此后,服务器与该特定客户端的所有数据交互,都只通过这个专属的 Connection Socket 进行。Welcome Socket 继续监听下一个新客户。
    • 由于建立了一条虚拟的“管道”,向 TCP Socket 写入数据时,不再需要附加目标地址,因为管道的另一端已经是固定的了。

    3.3 Socket Programming

    1. UDP (面向无连接) —— 像寄明信片

    在 UDP 中,服务器不需要“接电话”,它只是坐在那里,谁给它发短信它就收着。

    UDP Server (接收方)

    Python

    import socket
    
    # 1. 创建 Socket: AF_INET (IPv4), SOCK_DGRAM (UDP)
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 2. 绑定端口
    server_socket.bind(('127.0.0.1', 12000))
    print("UDP 服务器已启动,等待数据...")
    
    while True:
        # 3. 接收数据: recvfrom 会返回数据和发送者的地址
        message, client_address = server_socket.recvfrom(2048)
        
        modified_message = message.decode().upper() # 处理数据(转大写)
        print(f"收到来自 {client_address} 的消息: {message.decode()}")
        
        # 4. 发回响应
        server_socket.sendto(modified_message.encode(), client_address)
    

    UDP Client (发送方)

    Python

    import socket
    
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_addr = ('127.0.0.1', 12000)
    
    message = input("请输入要发送给 UDP 服务器的内容: ")
    # UDP 不需要 connect,直接 sendto
    client_socket.sendto(message.encode(), server_addr)
    
    modified_message, _ = client_socket.recvfrom(2048)
    print(f"服务器返回: {modified_message.decode()}")
    
    client_socket.close()
    

    2. TCP (面向连接) —— 像打电话

    TCP 严格遵循课件里的流程:服务器必须先 listen,客户端必须先 connect(三次握手)。

    TCP Server (监听方)

    Python

    import socket
    
    # 1. 创建 Socket: SOCK_STREAM (TCP)
    welcome_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 2. 绑定并监听
    welcome_socket.bind(('127.0.0.1', 13000))
    welcome_socket.listen(1) # 开始监听,1 表示最大排队连接数,多的被reject
    print("TCP 服务器已启动,等待连接...")
    
    while True:
        # 3. 接受连接: accept() 会block program,直到有人连进来
        # 它返回一个新的 socket (connection_socket) 专门为这个客户服务
        connection_socket, addr = welcome_socket.accept()
        print(f"与 {addr} 建立连接!")
        
        # 4. 收发数据
        sentence = connection_socket.recv(1024).decode()
        capitalized_sentence = sentence.upper()
        connection_socket.send(capitalized_sentence.encode())
        
        # 5. 关闭服务 Socket(欢迎 Socket 继续运行)
        connection_socket.close()
    

    TCP Client (发起方)

    Python

    import socket
    
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # TCP 必须先建立连接(进行三次握手)
    client_socket.connect(('127.0.0.1', 13000))
    
    message = input("请输入要发送给 TCP 服务器的内容: ")
    client_socket.send(message.encode())
    
    modified_sentence = client_socket.recv(1024)
    print(f"服务器返回: {modified_sentence.decode()}")
    
    client_socket.close()
    

    核心观察点:

    1. 数据的编码:网络传输的是字节流,所以 Python 字符串必须先 .encode() 变成 bytes 才能发送,接收后要 .decode()
    2. UDP 的地址感:在 UDP Server 中,recvfrom 必须带回 client_address,否则你不知道要把回信寄给谁。
    3. TCP 的双 Socket 机制:注意 TCP Server 有两个 Socket。welcome_socket 就像是酒店大堂的迎宾员,而 connection_socket 则是专门带你去房间的服务员。一旦连接建立,后续通信就不再占用迎宾员的时间了。

Lecture 4 - Reliable Protocols

(🔗 跨章节参考:这节课是全书理论的巅峰。正如 Lecture 6 会讲到的,底层的 IP 网络层是“尽力而为(Best Effort)”和不可靠的。我们要如何在不可靠的底层(Unreliable Channel)之上,在传输层构建出像 TCP 这样绝对可靠的服务?这就是 RDT 模型要解决的问题。)

4.1 面对不可靠信道的挑战

network layer是不稳定的,可能导致数据包:

  1. corrupt packets
  2. drop packets
  3. re-order packets
  4. deliver packets after an arbitrarily long delay

我们的transport layer service应该保证packets被按照原来顺序正确deliver。

4.2 Reliable Delivery Transfer渐进式协议设计

image-20260225152858862

我们只考虑one-directional data transfer,但是control data可能两方流动

前置:Finite State Machine (FSM)

用于描述protocol的sender和receiver。

image-20260225153050872

  • RDT 1.0 (完美信道):假设信道完全可靠。发送方直接发,接收方直接收,不需要任何额外机制。

    image-20260225153149535

  • RDT 2.0 (应对比特翻转)

    • 引入 Checksum (校验和) 来检测错误。

    • 引入 ACK (Acknowledge, 确认)NAK (Negative Acknowledge, 否认)。收到好包回 ACK,收到坏包回 NAK 并触发重传。

      image-20260225153253057

      image-20260225153338425

    image-20260225153358005

    • 致命缺陷:如果 ACK/NAK 在传输中本身损坏了怎么办?发送方不知道接收方到底收没收到,如果直接重传,会导致接收方收到重复的数据包 (Duplicate packet) 且无法分辨。

    image-20260225153546335

  • RDT 2.1 & 2.2 (解决重复包问题)

    • 引入 Sequence Number (序列号)。给每个数据包打上编号(在停等协议中,只需要 0 和 1 两个编号交替使用即可)。如果接收方收到同编号的包,就知道是重复包,直接丢弃但依然回复 ACK。

      image-20260225153717340

      image-20260225153735156

    • 在 RDT 2.2 中,我们淘汰了 NAK。如果接收方收到坏包,它会发送一个带有上一个成功接收包序列号的 ACK。发送方收到两个相同序列号的 ACK(Duplicate ACKs),就知道最新发送的包出错了,触发重传。

  • RDT 3.0 (应对丢包)

    • 引入 Timer (定时器)。发送方发包后启动倒计时。如果在超时时间(Timeout)内没有收到 ACK,就假定包丢了,触发超时重传 (Retransmission)

      image-20260225155354887

      image-20260225155459650

    • 这被称为top-and-Wait,它在逻辑上完美解决了所有错误,但在性能上存在巨大灾难。

    image-20260225155104330

4.3 性能瓶颈与 Pipelining

  • Utilization (信道利用率) 极低:在停等协议中,发送方发完一个包后,必须死等一个往返时间(RTT)才能发下一个。如果链路带宽很大,这相当于让一条 8 车道的高速公路上一次只跑一辆车。

  • 解决方案 - Pipelining (流水线):允许发送方在收到 ACK 之前,连续发送多个数据包,填满整个链路容量。

    • Go-Back-N (GBN, 回退 N 步):接收方只接受按序到达的包。如果中间丢了一个包,即使后面的包安全到达,接收方也会丢弃它们。发送方超时后,必须重传丢失的包及其之后所有的包。

      image-20260225232918636

      image-20260225232928739

    • Selective Repeat (SR, 选择性重传):接收方缓存乱序到达的包,并对每个包独立进行 ACK。发送方maintain timer for each unACKed packet,所以只需重传那个真正丢失的包。

      image-20260225233405493

    • (注:现实中的 TCP 是 GBN 和 SR 的混合体,既有累积确认,又有选择性重传。)

4.4 Summary

image-20260225233801023

image-20260225233841187


Lecture 5 - UDP and TCP

Internet protocols are described in documents known as Request for Comments (RFC).

5.1 多路复用与多路分解 (Multiplexing and Demultiplexing)

这是传输层最核心的功能:将网络层“主机到主机”的通信,细化为“进程到进程”的通信。

  • 发送端 (Multiplexing):收集不同 Socket 传来的数据,封装上 Transport 层的头部(加上源端口和目的端口),交给底层的 IP 层。
  • 接收端 (Demultiplexing):收到 IP 数据报后,读取传输层头部的端口号,将数据精准投放给对应的 Socket。

5.2 UDP (User Datagram Protocol)

  • 极简主义:UDP 除了提供 multiplexing/de-multiplexing 和基础的 Checksum 错误检测外,什么都不做。它不新建立连接,不保证可靠性。

  • Demultiplexing 机制:UDP 仅依赖 2-Tuple(目的 IP,目的 Port) 就能将数据导向 Socket。

  • 优点:速度极快,没有三次握手延迟,报文头部开销小(仅 8 bytes),而且没有拥塞控制(可以以应用层期望的最大速度 Blast 轰炸式发送数据,这对于容忍丢包的视频流媒体非常有用)。

    image-20260225235035030

校验和 (Checksum) 计算

  1. 将段内容视为16位整数序列。
  2. 进行求和,产生的溢出位需回卷(Wrap-around)加到末尾 。
  3. 对最终结果取反码(1's complement) 。
  4. 接收端验证:将所有内容(含校验和)相加,若结果全为“1”则认为无错 。

应用场景:流媒体、实时游戏、以及最新的HTTP/3(QUIC协议基于UDP实现其自身的可靠性) 。

5.3 TCP (Transmission Control Protocol)

  • 面向连接与可靠字节流:TCP 提供的是连续的字节流(In-order byte stream),而不是独立的数据报。应用层把数据交给 TCP,TCP 会根据最大报文段长度(MSS)自行将其切割成 Segments。

  • Demultiplexing 机制(核心考点): 与 UDP 不同,TCP 依靠 4-Tuple(四元组:源 IP,源 Port,目的 IP,目的 Port) 来精准定位 Socket。 场景解析:为什么必须是四元组?假设一台 Web 服务器只在 Port 80 监听。如果有 1000 个不同的客户端同时连接这个 Port 80,服务器如何区分它们?因为每一个客户端的 Source IP 或 Source Port 必然不同,服务器通过这四个元素的组合,就能为每一个客户端精确分配之前提到的专属 Connection Socket

  • TCP 报文段结构:包含 Sequence Number(用于按序重组)、ACK Number(用于确认)。其中还有一个重要的 Offset (偏移量) 字段,以 4 bytes(32 bit) 为单位,指示 TCP 头部的长度,因为 TCP 头部可能包含可变长度的 Options 选项。

    • Sequence Number: 存储的是这个data segment的第一个byte

      image-20260226003731287

    • TCP用cumulative ACK,会有一个字段保存cumulative ACK。保存发送方期望收到的下一个字节的编号(累积确认)

      image-20260226004100613

    image-20260226004707649

    最好结合上面这幅图理解ACK和seq如何变动。

  • 单工与全双工 (Simplex vs Full-Duplex):TCP 是全双工的,即连接建立后,双方可以同时发送和接收数据(就像打电话)。而单工是指单向通信(就像听 Spotify 广播,服务器发给你,你不能发给服务器)。

    image-20260226005513565

image-20260226002404099

  • 超时与重传:超时时间(RTO)基于往返时间(RTT)的估计动态调整

    RTTsRTT_s是上一次的RTT。

    RTTEstimated=(1α)×RTTEstimated+α×RTTsRTT_{Estimated} = (1-\alpha)\times RTT_{Estimated} + \alpha \times RTT_{s} (α=18\alpha = \frac{1}{8})

    RTTDev=(1β)×RTTDev+β×RTTsRTTEstimatedRTT_{Dev} = (1-\beta)\times RTT_{Dev} + \beta \times |RTT_s - RTT_{Estimated}|

    RTO=RTTEstimated+4×RTTDev)RTO=RTT_{Estimated}+4×RTT_{Dev})

    这里都使用上一次的RTT更新当前的RTT。Exponential Weighted Moving Average (EWMA)。

  • 快速重传:若收到3个冗余确认(Duplicate ACKs),则在超时前立即重传丢失段 。

  • Bits

    SYN (Synchronize)

    • 含义:用于建立连接时同步序列号
    • 作用:当你想发起一个新连接时,你会发送一个 SYN 包。它告诉对方:“我想和你建立连接,我的起始序列号是从 X 开始的。”
    • 场景:只在三次握手的前两步(SYN 和 SYN/ACK)中出现。

    ACK (Acknowledgment)

    • 含义:用于确认收到数据。
    • 作用:当这个位设为 1 时,TCP 头部的“确认号 (Acknowledgment Number)”字段才有效。它告诉对方:“我收到了你发来的 N 字节之前的所有数据,接下来的数据请从第 N+1 个字节开始发。”
    • 场景:除了连接建立的第一步(纯 SYN 包)外,几乎所有 TCP 报文段都会把 ACK 位设为 1。

    FIN (Finish) —— 终止

    • 含义:用于释放连接
    • 作用:它告诉对方:“我已经没有数据要发送了,我打算关闭我这边的传输通道。”
    • 场景:出现在四次挥手(Connection Teardown)的过程中。
  • 连接管理

    建立连接(三次握手):客户端发送SYN → 服务端回SYN/ACK → 客户端发ACK。

    image-20260226012027513

    • Attacks:
    1. SYN Flooding: DoS style attack by sending SYN.
    2. SYN/ACK Flooding: DoS style to overwhelm network.

    关闭连接(四次挥手):双方均需发送FIN位并确认,过程包括FIN、ACK、FIN、ACK 。

    image-20260226013254897

  • 拥塞控制与流量控制 (Congestion & Flow Control)

    • 流量控制:防止发送方发得太快,把接收方的缓存撑爆。所以发送rwnd(receive window)字段告诉对面自己还剩多少buffer可以用。
    • 拥塞控制:防止发送方发得太快,把整个网络(中间路由器队列)撑爆。当网络丢包时,TCP 会主动减速(线性增加,乘性减小),以缓解网络拥堵。(注:具体拥塞控制算法属 CS3103 高级课程范畴,本课仅需概念认知)

image-20260226014010918


Lecture 6 - Network Layer I

6.1 网络层的核心目标与“细腰”模型

(🔗 跨章节参考:如果说应用层是 Alice,传输层是管家,那么网络层就是真正负责跨越千山万水运送信件的邮政系统实体。)

  • 核心目标:提供互联网上任意两台主机(Host-to-Host)之间的通信服务。
  • 为了实现这个目标,网络层需要解决两大子问题:
    1. Addressing (寻址):每台主机必须有唯一的地址(IP Address)。
    2. Routing (路由):必须在相互连接的网状路由器中,找到一条从源到目的地的可行路径。
  • The Thin Waist of the Internet (互联网的细腰)
    • 互联网是一个沙漏型(Hourglass)架构。最上层有无数种应用(HTTP, FTP, SMTP),最下层有无数种物理链路(WiFi, 光纤, 4G, 以太网)。
    • 然而,在网络层,几乎只有一种协议统治着整个互联网:IP (Internet Protocol)。这种“细腰”设计使得互联网极具扩展性——只要你的应用支持 IP,只要你的底层硬件支持 IP,你就能接入互联网。

6.2 路由器 (Router) 到底在做什么?

  • Router (路由器) 是连接不同网络的设备(它拥有两个或多个接口/端口,每个接口连接一个不同的子网)。而Switch(交换机)则是在同一个网络内搬运数据,一个端口即可。
  • Forwarding (转发) vs Routing (路由)
    • Routing (路由):是宏观层面的策略。路由器之间交换信息,运行路由算法,计算出从 A 到 B 的最佳路径,并生成转发表 (Forwarding Table)
    • Forwarding (转发):是微观层面的动作。当一个数据报到达路由器的某个输入端口时,路由器查看包头的目的 IP 地址,查阅转发表,将数据报移送到正确的输出端口。
    • 【考点澄清】:教授特别强调,虽然名字叫“Router”,但它在处理数据包时,唯一必须执行的动作是 Forwarding。计算路由策略通常由后台协议或集中式控制器完成。

6.3 IPv4 地址与子网 (Subnets)

  • IP 地址:在 IPv4 中,IP 地址是一个 32 位的二进制数字(例如 137.132.228.5)。

  • 谁拥有 IP 地址? 严格来说,IP 地址不是分配给主机或路由器的,而是分配给网络接口 (Network Interfaces) 的。一个拥有一块有线网卡和一块无线网卡的笔记本电脑,可以同时拥有两个 IP 地址。路由器有多个端口,因此必然有多个 IP 地址。

  • Subnet (子网)

    • 定义:在不经过任何路由器(Router)的情况下,可以直接通过物理链路(或交换机)相互通信的一组接口的集合。
    • 案例分析:如果你用一根网线把两台电脑直连,这两台电脑的接口就构成了一个极小的子网。路由器的一个端口与其连接的局域网设备共同构成一个子网。如果一个路由器连接了 3 个不同的局域网,那么这个路由器就跨越了 3 个子网。

    image-20260226110727499

  • 层次化编址与聚合:通过系统化的地址分配,可以将具有相同前缀的一组地址聚合在一起(Address Aggregation),从而大幅减小路由器的转发表规模 。

  • 确定subnet数量:在每个路由器的接口(Interface)处剪一刀,把路由器这个实体从图上拿走。拿走路由器后,剩下的部分如果还能通过线缆互相连通,它们就属于同一个子网:

    • 包含主机的区域: 几台电脑连在一个交换机上,再连到路由器的某个口。撤掉路由器后,这几台电脑和原本连接路由器的线头组成一个孤岛。
    • 纯线缆区域: 两个路由器之间只有一根线。撤掉两个路由器后,这根线本身就成了一个孤岛。

    image-20260226111327668

    这张图是有六个subnets。

6.4 子网与子网掩码 (Subnets & Subnet Mask)

  • 子网定义:物理上直接互连、无需经过路由器即可相互通信的一组设备接口集合 。

  • 地址结构:IP 地址逻辑上分为**网络前缀(Subnet Prefix)主机 ID(Host ID)**两部分 。

  • CIDR 表示法:格式为 a.b.c.d/x,其中 x 代表网络前缀的位数 。

  • 子网掩码:用于判断 IP 地址属于哪个子网。通过将 IP 地址与子网掩码进行按位“与”(AND)操作,可以得出网络地址 。

    image-20260226111500703

  • IP address allocation: organization会购买ISP的address space,ISP从ICANN (Internet Corporation for Assigned Names and Numbers) 购买address space。最终会形成下面的这种hierarchical Addressing形式。

    image-20260226111702481

6.5 NAT (Network Address Translation,网络地址转换)

(🔗 跨章节参考:结合 Lecture 5 的端口概念,这里解释了我们为什么能够在局域网共享上网。)

  • 动机 (Motivation):IPv4 的 32 位地址空间(约 42 亿个)早已耗尽。你在家里电脑上分配到的通常是 192.168.x.x172.x.x.x 这样的私有 IP 地址 (Private IP)
  • 问题:私有 IP 地址在公网(互联网)上是不可路由的。如果你用 172.26.184.3 去请求 Netflix 的服务器,Netflix 的服务器即便想回传视频,互联网的路由器也不认识这个私有地址,数据根本回不来。
  • NAT 的解决方案
    • 你家里的路由器(NAT Router)被 ISP 分配了唯一的一个公共 IP 地址 (Public IP),比如 137.132.228.5
    • 当 Alice (172.26.184.3, 端口 3345) 用这个Private IP想访问外部网络时,NAT 路由器会拦截这个数据包。
    • NAT 路由器将数据包的主机源 IP 替换为自己的公共 IP,并将源端口替换为一个新的伪装端口(例如 5001)。然后 NAT 在其转换表 (Translation Table) 中记录下这种映射关系。
    • 对于外部的 Netflix 看来,它是在和你的 NAT 路由器(137.132.228.5:5001)通信,而不是和 Alice 通信。
    • 当 Netflix 的回包到达时,NAT 路由器查看目的端口 5001,查对转换表,将目的 IP 和端口替换回 Alice 的私有 IP 和真实端口,然后将数据包丢进局域网传给 Alice。
  • 巧妙之处
    • NAT 完美利用了传输层(TCP/UDP)的 16 位端口号 (Port Number) 来作为multiplexing和de-multiplexing的凭证,从而让一个局域网内成百上千台设备,可以只消耗一个公网 IPv4 地址就能同时上网。
    • 可以随意重组内部网络而不需要告知外界。
    • 可以更改ISP而不影响内部网络IP。
    • 由于内部网络不被外部可见,所以更安全。

Lecture 7 - Network Layer II

1. 简介与学习目标 (Introduction & Learning Objectives)

本节课继续探讨网络层,重点关注数据包如何在互联网中导航 。核心学习目标包括:

  • 了解路由器中最长前缀转发 (longest prefix forwarding) 的工作原理 。
  • 了解互联网上路由协议 (routing protocols) 的用途 。
  • 掌握 Bellman-Ford 方程 的原理 。
  • 了解 距离向量 (Distance Vector, DV) 算法 的工作机制 。
  • 了解 ICMP 协议以及网络层底层操作 。

2. 转发与路由 (Forwarding vs. Routing)

为了在任意两台主机之间提供通信服务,网络层必须解决寻址、路径确定和协议一致性等问题 。这是通过两个截然不同的网络层功能来实现的:

  • 转发 (Forwarding / 数据平面 Data Plane): 将数据包从合适的输入链路移动到正确的输出下一跳的本地、每个路由器的操作 。这类似于邮递员将信件分拣到特定的投递箱中。
  • 路由 (Routing / 控制平面 Control Plane): 确定数据包所采用的从源到目的地的路径的全局网络过程 。这涉及管理、规划、成本和服务的决策 ,并且在转发操作之前执行 。

3. IP 寻址与转发表 (IP Addressing and Forwarding Tables)

IP 地址是用于标识主机或路由器接口的全球唯一的 32 位标识符 。

  • 分层寻址与路由聚合 (Hierarchical Addressing & Route Aggregation): 路由表不是列出每一个 IP 地址,而是将地址分组为块(子网)。这种层次结构允许有效通告路由信息,并显著缩小了转发表的规模 。
  • 最长前缀匹配 (Longest Prefix Match): 当路由器收到一个数据包时,它会在其转发表中查找目标地址,并将其与可用的最长地址前缀进行匹配 。例如,如果一个数据包的目的地同时匹配 /16 路由和 /23 路由,路由器将根据 /23 路由进行转发,因为它更具体。

4. 路由算法 (Routing Algorithms)

路由涉及在网络图中寻找两个顶点之间的最低成本路径 。在这个图中,路由器是顶点,物理链路是边,每条边都有相关的成本(可以代表距离、带宽、拥塞或金钱成本)。

Bellman-Ford 方程

路由器使用 Bellman-Ford 方程在数学上确定最佳路径 。 公式为:Dα(z)=minaN{c(α,a)+Da(z)}D_\alpha(z) = \min_{a\in N} \{c(\alpha,a) + D_a(z)\}

  • Dα(z)D_\alpha(z) 是从节点 α\alpha 到节点 zz 的最低成本路径的成本 。
  • c(α,a)c(\alpha,a) 是从 α\alpha 到其直接邻居 aa 的链路成本 。
  • 最小值是遍历 α\alpha 的所有直接邻居 aa 得到的 。

距离向量 (Distance Vector, DV) 算法

DV 算法在网络环境中应用 Bellman-Ford 方程 。其主要特点是:

  • 分布式 (Distributed): 每个节点只与其直接相连的邻居通信,传递其本地距离估计值,并根据回复重新计算自己的路由表 。

  • 迭代式 (Iterative): 计算步骤会一直循环,直到没有更多的路由更新或变化需要分享 。

  • 异步 (Asynchronous): 节点不需要同步操作 。只要检测到本地链路成本变化或收到邻居的更新消息,它们就会进行更新 。

  • 路由信息协议 (RIP): 这是 DV 算法的一个实际实现 。它使用跳数作为成本度量(对网络拥塞不敏感)。每 30 秒通过 UDP 端口 520 交换一次路由表 。如果 3 分钟内没有收到相邻路由器的更新,则认为该邻居已发生故障 。

    image-20260427220038159

(注:幻灯片还简要提到了 链路状态 (Link State) 算法 如 OSPF,路由器向所有其他路由器广播链路成本,允许每个路由器使用 Dijkstra 算法在本地计算路径。这需要掌握完整的网络拓扑结构和链路成本 。)

5. 自治域内 (Intra-AS) 与 自治域间 (Inter-AS) 路由

因为互联网是一个庞大的“网络之网络”,路由是通过自治系统 (Autonomous Systems, AS)(如 ISP)分层处理的 。

image-20260427220415456

  • 域内路由 (Intra-AS Routing): 负责在单一自治系统 (AS) 内部寻找路径 。由于它由单一管理机构控制,因此不需要策略决策,主要侧重于性能 。常见的协议包括 RIP 和 OSPF。

  • 域间路由 (Inter-AS Routing): 处理不同 AS 之间的接口 。在这里,管理策略通常优先于性能,因为管理员希望控制其流量如何路由以及谁通过其网络进行路由 。事实上的标准协议是 BGP 。

    为什么BGP是application layer却给定了network layer的标准?

    功能上: BGP 的最终目的是交换网络可达性信息,并据此计算出路径,从而更新路由器的网络层转发表 (Forwarding Table) 。因此,从架构功能上看,BGP 毫无疑问是网络层控制平面的核心组件。

    载体上: BGP 并没有直接封装在 IP 数据报中,而是作为 Payload 封装在了 TCP 报文中(运行在 TCP 端口 179)。根据 TCP/IP 协议栈的严格分层定义,任何直接构建在传输层(TCP/UDP)之上的协议都被视为应用层协议。

    打个比方: 假设你要颁布一项国家法律(相当于网络层路由规则),你选择通过邮政快递(相当于 TCP)将法律文件寄给各个省长。虽然你使用了快递系统(应用层载体),但这并不改变这份文件是用来治理国家(网络层功能)的本质。

6. 互联网控制消息协议 (ICMP)

ICMP 消息封装在 IP 数据报中 ,主机和路由器使用它来传达网络层面的诊断和错误报告

  • 常见用途: 错误报告(如主机/网络/端口/协议不可达,或 TTL 过期)以及回显请求/应答。

    image-20260427220614251

    image-20260427220658597

  • ping 命令: 使用 ICMP 回显请求/应答来检查远程主机是否响应,并测量往返时间。

    image-20260427220628408

  • traceroute 命令: 发送一系列具有不同 TTL (Time-To-Live) 值的小数据包 。当 TTL 在某个路由器处降至 0 时,该路由器丢弃数据包并发送回 ICMP 错误消息,从而揭示数据包走过的路径。

    image-20260427220725706

互联网采用“尽力而为”的服务模型 。它对以下几点不提供任何保证

  1. 数据报是否成功传送到目的地 。
  2. 交付的时间或顺序 。
  3. 端到端流可用的带宽 。

尽管缺乏保证(这些由上层协议保证),但这种简单的机制使得互联网得以广泛部署 。可靠性和性能反而通过充足的带宽配置 、弹性的拥塞控制 和分布式应用层服务(如数据中心和 CDN)来实现 。

IP 沙漏模型 (The IP Hourglass)

互联网协议栈呈沙漏状,IP 协议是其“纤细的腰部” (thin waist) 。虽然物理层、链路层、传输层和应用层有众多协议,但通用网络层协议只有一个(IP),数十亿的联网设备都必须实现它 。

image-20260427221113062

路由器架构 (Router Architecture)

路由器在物理上分为两个截然不同的处理平面:

  • 控制平面 (Control Plane / 软件): 运行路由和管理协议,通常在路由处理器上以毫秒级的时间框架运行 。
  • 数据平面 (Data Plane / 硬件): 处理实际的数据包转发 。它在高速交换结构中以极快的速度(纳秒级)运行 。为了实现这种速度,路由器通常使用 TCAM(三元内容寻址存储器)进行最长前缀匹配,它可以在一个时钟周期内检索出地址,而不管转发表的大小如何 。

Lecture 8 - Link Layer I

1. Link Layer简介与核心概念

image-20260427224723076

Link Layer在网络协议栈中位于网络层和物理层之间,负责在相邻节点之间传输数据 。Link Layer一般作用在局域网中。

  • 节点 (Node):交换数据的设备,例如主机 (hosts) 和路由器 (routers) 。
  • 链路 (Link):连接相邻节点的通信信道(传输介质),例如铜线、光纤、无线电或卫星。
  • 相邻 (Adjacent):两个节点之间通过单跳 (single hop) 直接连接。
  • 帧 (Frame):链路层的数据包 。IP 数据报会被封装在链路层的帧中进行传输 。
  • 实现位置:链路层(和物理层)主要在网络接口卡(NIC,即网络适配器,如以太网卡或 Wi-Fi 适配器)的芯片上实现,具有半自主性 。

2. 链路层提供的可能服务

不同的链路层协议可能提供不同组合的服务 :

  • Framing:将数据报封装到帧中,并添加头部 (Header) 和尾部 (Trailer) 。
  • 链路访问控制 (Link Access Control):当多个节点共享同一链路时,需要协调哪些节点可以在特定时间发送帧 。
  • 错误检测 (Error Detection):信号衰减或噪声通常会导致错误 。接收方通过检测机制发现错误后,可能会要求发送方重传或直接丢弃该帧 。
  • 错误纠正 (Error Correction):接收方不仅能识别错误,还能直接纠正位错误,而无需请求重传 。
  • 可靠交付 (Reliable Delivery):通常用于容易出错的链路(如无线链路),很少用于低误码率的链路(如光纤) 。

3. 网络链路的两种主要类型

  • 点对点链路 (Point-to-point link):发送方和接收方通过专用链路连接 。不需要多路访问控制 。协议例子包括 PPP 和 SLIP 。
  • 广播链路/共享介质 (Broadcast link):多个节点连接到一个共享的广播信道 。当一个节点发送帧时,该信道会广播该帧,所有其他节点都会收到副本(如 Wi-Fi、卫星、早期以太网) 。如果多个节点同时传输,会发生碰撞 (Collision)

4. 多路访问协议 (Multiple Access Protocols)

为了解决广播链路中的碰撞问题,需要使用多路访问协议来协调信道的使用 。一个“理想”的多路访问协议应具备四个特性:无碰撞 (Collision Free)、高效 (Efficient)、公平 (Fairness) 以及完全去中心化 (Fully decentralized) 。

协议主要分为三大类:

A. 随机访问协议 (Random Access Protocols)

节点以信道全速传输数据,节点间没有预先协调,因此允许碰撞发生,但协议规定了如何检测和从碰撞中恢复 。

  • 时隙 ALOHA (Slotted ALOHA):时间被划分为相等的时隙 。节点只能在时隙开始时传输 。如果发生碰撞,节点会在后续时隙中以概率 p 尝试重传,直到成功 。最高效率仅为 37% 。它具有公平性和去中心化,但无法避免碰撞。

    image-20260427230526149

  • 纯 ALOHA (Pure ALOHA):无需划分时隙,无时间同步 。节点只要有数据就立即发送整个帧 。如果碰撞,等待1个帧的传输时间后,以概率 p 重传 。最高效率更低,仅为 18% 。

    image-20260427230509762

  • CSMA (载波侦听多路访问):“发前先听” 。信道空闲才发送,信道忙则等待 。但由于传播延迟 (propagation delay),两个节点可能无法立即听到对方的传输,碰撞依然会发生 。在基础的 CSMA 中,即使发生碰撞,节点也会继续把帧发完,浪费信道时间。

    image-20260427230544629

  • CSMA/CD (带有冲突检测的 CSMA):对 CSMA 的改进 。节点在发送期间如果检测到碰撞,会立刻中止传输

    image-20260427230722364

    • 二进制指数退避算法 (Binary Exponential Backoff):中止传输后,节点等待随机延迟再重传 。算法根据当前负载估算动态调整等待时间:发生第 m 次碰撞后,节点会从 {0,1,...,2m1}\{0, 1, ..., 2^m - 1\} 中随机选择一个数 K,并等待 K 个时间单位 。碰撞越多(意味着网络负载越重),潜在的退避等待时间就越长 。
    • 最小帧大小限制:CSMA/CD 要求传输时间必须大于等于最大往返传播延迟 (2×max(dprop)dtrans2 \times max(d_{prop}) \le d_{trans}),否则节点可能在完成发送后才收到碰撞信号,导致无法重传。因此以太网规定了最小帧大小(例如 64 字节) 。

B. 轮流协议 (Taking-Turns Protocols)

  • 轮询 (Polling):由一个主节点 (Master node) 采用轮询方式,依次告知每个从节点可以发送的数据量。优势是无碰撞、完美公平;缺点是有轮询开销,且主节点存在单点故障风险(非去中心化)。
  • 令牌传递 (Token Passing):一个特殊的控制帧(令牌)在节点间顺序传递 。节点拿到令牌后,有数据才发送(并限制最大发送量),没数据或发送完毕后把令牌传给下一节点。优点是完全去中心化且高效;缺点是如果令牌丢失,将导致整个网络中断。
  • TDMA (时分多址):将时间分为多个“轮”,每个节点在每一轮中获得固定长度的时隙供专享使用 。如果有节点不发送数据,该时隙就闲置,导致效率低下(最大吞吐量被限制为 R/N) 。

    image-20260427231412164

  • FDMA (频分多址):将信道频谱划分为不同的频段,每个节点分配一个固定的频段 。同样存在未使用的频段被浪费、效率低下的问题 。

    image-20260427231353235


为了保护数据 (D) 的完整性,通常会附加错误检测和纠正位 (EDC) 。这些机制在多数情况下能捕捉错误,但不能保证 100% 发现所有极端情况下的误码 。

A. 奇偶校验 (Parity Checks)

  • 单比特奇偶校验 (Single bit):发送方附加 1 个校验位,使得总数据加上校验位中的“1”的个数保持偶数(偶校验) 。它可以检测出奇数个比特错误,但如果发生偶数个比特错误则无法发现 。在出现“突发错误 (bursts)”时,其未检测出错误的概率可能接近 50% 。

  • 二维奇偶校验 (2-D Parity Checking):将数据划分为 ii 行和 jj 列,分别计算每行和每列的奇偶校验位(共 i+j+1i+j+1 个校验位) 。这种方案不仅能检测出任意的 2 位错误,还能检测并纠正单个比特的错误

    image-20260427232947338

B. 循环冗余校验 (CRC, Cyclic Redundancy Check)

CRC 是一种常用于链路层(如以太网、Wi-Fi)的强大错误检测码,硬件实现简单且高效 。它基于模 2 算术(加减法均等同于异或 XOR 操作)实现 。

  • 工作原理
    1. 发送方与接收方预先约定一个 r+1r+1 位的生成器 (Generator, 表示为 G) 。
    2. 发送方将要发送的数据 D 后面追加 r0
    3. 发送方将追加后的数据除以 G(模 2 除法),得到的余数就是 r 位的 CRC 校验码 (表示为 R) 。
    4. 发送方最终发送附加了 R 的数据:(D, R)
    5. 接收方收到数据后,用收到的 (D, R) 除以 G。如果余数不为零,则检测出错误 。
  • 性能:CRC(也称作多项式码 Polynomial code )能够检测出所有奇数个错误、所有长度小于等于 r 位的突发错误,以及有 10.5r1 - 0.5^r 的概率检测出大于 r 位的突发错误 。

Lecture 9 - Link Layer II

  • 链路层的核心职责是在相邻节点(如主机或路由器)之间,通过单一链路传输数据报。

  • 网络层的 IP 数据报在传输前,会被封装到链路层的帧(Frame)中。

  • 在不同类型的链路上可能会使用不同的链路层协议,每种协议提供的服务可能有所差异。

  • 为了将多个节点通过广播链路互联,链路层需要解决多个关键问题,包括物理寻址、定义通信协议(如成帧和链路接入控制),以及处理传输错误(如错误检测和可靠性保证)。

    image-20260427234703551

2. 以太网基础 (Ethernet)

  • 以太网技术起源于 20 世纪 70 年代中期,是目前处于绝对统治地位的有线局域网(LAN)技术。
  • 相比于令牌环(Token Ring)和 ATM 技术,以太网在设计上更简单且成本更低。
  • IEEE 802.3 标准定义了一系列以太网规范,涵盖了从 2 Mbps 到 100 Gbps 的不同传输速率。
  • 以太网支持双绞线和光纤等不同的物理层介质,但不同版本始终保持着相同的 MAC 协议和帧格式。
  • 以太网提供的是一种“不可靠”的数据交付服务,接收端的网卡(NIC)不会向发送端返回确认(ACK)或否定(NAK)信号。
  • 丢失或丢弃的数据必须依赖上层协议(如 TCP中的checksum)来恢复,否则数据将永久丢失。
  • 以太网采用带有二进制指数退避算法的 CSMA/CD 技术作为其多路访问协议。

3. 以太网帧结构 (Ethernet Frame Structure)

  • 前导码 (Preamble):占用 8 个字节,前 7 个字节的模式为 10101010,最后一个字节为 10101011 。前导码提供了一种“方波”模式,用于同步发送端和接收端的时钟速率,并让接收端识别比特的物理宽度。

  • 目的与源 MAC 地址:分别占用 6 个字节 。当网卡收到一个帧时,如果目的 MAC 地址与其自身匹配或为广播地址,则将数据交给网络层;否则直接静默丢弃该帧。

  • 类型 (Type):占用 2 个字节,主要用于标识被多路复用的网络层协议(例如 IP、ARP 或 AppleTalk 等)。

  • 数据 (Data):负载长度在 46 到 1500 字节之间 。最大限制 1500 字节对应于链路的最大传输单元 (MTU),而 46 字节的最小限制则是为了确保以太网能够有效检测出信道冲突 。

  • 循环冗余校验 (CRC):占用 4 个字节,用于错误检测,任何被检测出损坏的帧都将被丢弃 。

    image-20260427234434128

4. 局域网物理拓扑 (Physical Topologies)

  • 总线拓扑 (Bus Topology):在 90 年代中期之前非常流行,所有的节点都挂载在同一根主干电缆(同轴电缆)上 。它是一个广播型局域网,容易发生严重的数据冲突,且一旦主干电缆损坏,整个网络就会瘫痪,故障排查也十分困难 。
  • 星型拓扑 - 早期集线器 (Hub):90 年代末期成为主流,所有节点直接连接到一个中心的集线器上 。集线器是一种物理层设备,它仅负责将收到的比特信号放大并向所有其他接口广播,因此仍无法解决碰撞冲突的问题 。
  • 星型拓扑 - 现代交换机 (Switch):自 2000 年代初开始普及,目前占据主导地位 。节点直接连接到交换机,交换机作为真正的存储转发设备,彻底消除了链路上的数据冲突 。

5. 链路层交换机 (Link-layer Switches)

image-20260427235351738

  • 交换机是工作在链路层(Layer-2)的局域网设备,专门处理数据帧的存储和转发 。
  • 它通过检查输入帧的 MAC 地址,选择性地将帧转发到一个或多个适当的输出链路 。
  • 交换机允许多个节点同时进行传输(例如 A 传给 A',B 传给 B')而不会发生冲突 。
  • 转发表与自学习 (Switch Table & Self-learning):交换机维护着一个包含 “MAC 地址、对应接口、存活时间 (TTL)” 的转发表 。它通过“监听”到达帧的源 MAC 地址和输入接口来自动学习网络拓扑,无需管理员手动配置(即插即用) 。
  • 转发与过滤算法:当交换机收到帧时,先使用目的 MAC 地址查找转发表 。如果目的节点与发送节点在同一网段,交换机将过滤(丢弃)该帧 ;如果转发表中记录了对应的输出接口,则将其转发过去 ;如果转发表中没有记录,交换机将向除输入接口外的所有接口进行泛洪广播 (Flood) 。
  • 交换机可以被配置成层次化的层级结构,但必须确保整体物理拓扑不存在环路 (loop-free) 。

6. 交换机与路由器的对比 (Switches vs. Routers)

  • 路由器属于网络层设备,它主要检查 IP 地址,并通过计算路由算法来将数据包转发到目标网络。

  • 交换机属于链路层设备,它检查的是 MAC 地址,并基于其转发表将帧发送到对应的输出链路或进行广播。

  • 这两种设备都依赖于存储并转发 (Store-and-forward) 机制来处理数据流量。

    image-20260427235627607

7. IP 地址与 MAC 地址 (IP Address vs. MAC Address)

  • IP 地址长度为 32 比特,是网络层地址,负责将数据报从最初的源主机导航到最终的目的主机 。

  • MAC 地址长度为 48 比特,是链路层地址,专门用于在单条相邻链路间物理地移动数据帧 。

  • IP 地址具有层次化的网络前缀和主机 ID 结构,并且通常是动态分配的,便于网络路由与地址聚合(类似于邮政地址) 。

  • MAC 地址一般是永久烧录在网卡 ROM 中的,结构扁平,用以唯一标识底层物理硬件(类似于不可更改的身份证号) 。

  • MAC 地址常以十六进制形式表示(如 5C-F9-DD-E8-E3-D2),由 IEEE 统一管理,前三个字节通常代表网络适配器的设备制造商 。全 F 的地址 (FF-FF-FF-FF-FF-FF) 作为链路层广播地址保留使用 。

    image-20260428000529796

8. 地址解析协议 (ARP: Address Resolution Protocol)

  • ARP 协议的作用是通过已知的目标 IP 地址,查询获取其对应的链路层 MAC 地址 。

  • 网络中的每一个 IP 节点内部都维护着一张 ARP 表,记录了同一子网内其他主机的 IP 地址、对应的 MAC 地址以及缓存记录过期时间 (TTL) 。

    image-20260428000727487

  • 同子网内的 ARP 寻址机制:当主机 A 要发送数据给同子网的主机 B,且 A 的 ARP 表中没有 B 的 MAC 地址时,A 会在局域网内发出一个 ARP 查询广播包(目标 MAC 被设为 FF-FF-FF-FF-FF-FF)。同子网的其他节点会收到这个广播但不会处理,只有目标主机 B 识别出自身 IP,并用包含其 MAC 地址的帧直接回复主机 A。

  • 跨子网发送帧的地址变换:当主机 A 向位于另一个子网的主机 B 发送数据时,IP 数据报的源 IP 始终是 A,目的 IP 始终是 B 。然而,数据帧的 MAC 地址会逐跳发生改变。A 发出的帧,其源 MAC 是 A 自身,而目的 MAC 则是其连接的第一跳路由器 (R) 的接口地址。路由器 R 接收并解开该帧,将数据送至网络层处理,接着使用路由器 R 另一端接口的 MAC 作为新的源 MAC,以主机 B 的 MAC 作为目的 MAC,重新封装并发送这个帧。

Lecture 10 - Network Security I

一、 网络安全的核心目标

在理想的通信模型中,发送方(例如 Alice)和接收方(例如 Bob)可以通过互联网直接进行安全对话。然而,现实中的网络充满了威胁,如窃听者 (Eve) 或恶意入侵者 (Trudy) 。

为了保障通信安全,网络安全机制必须实现以下四个核心目标:

  • 机密性 (Confidentiality): 确保只有发送方和指定的接收方能够“理解”信息的具体内容 。
  • 消息完整性 (Message Integrity): 确保消息在传输过程中或传输后没有被篡改,且任何篡改都能被检测出来 。
  • 身份认证 (Authentication): 发送方和接收方需要能够确认彼此的真实身份 。
  • 不可否认性 (Nonrepudiation): 能够证明两个实体之间确实发生过某次交易或通信(通常用于法律场景) 。

💡 安全的本质是权衡 (Trade-off) 绝对的安全在现实中是不可能实现的 。优秀的网络安全本质上是风险管理,即在成本、可用性和便利性的限制下,尽可能地提高系统的安全性 。

二、 密码学基础语言

密码学 (Cryptography) 是实现网络安全的底层技术基石。

  • 明文 (Plaintext): 消息的原始形式 。
  • 密文 (Ciphertext): 经过加密处理后的消息 。
  • 密钥 (Key): 输入到加密或解密算法中的一串数字或字符参数 。

根据密钥的使用方式,密码学主要分为两大类:

  1. 对称密钥加密 (Symmetric Key Cryptography): 发送方和接收方使用相同的密钥 。
  2. 非对称/公钥加密 (Asymmetric/Public Key Cryptography): 发送方和接收方使用不同的密钥 。

三、 对称密钥加密 (Symmetric Key)

1. 经典替换密码

  • 凯撒密码 (Caesar's Cipher): 将字母表进行固定位数的平移(如右移 3 位) 。可以通过暴力破解轻易攻破 。
  • 单表替换密码 (Monoalphabetic Cipher): 建立一个包含 26 个字母的乱序映射表 。
    • 弱点: 容易受到统计分析攻击。例如,英文中字母 'e' (13%) 和 't' (9%) 的出现频率最高,攻击者可据此破解 。
  • 多表替换密码 (Polyalphabetic Encryption): 使用多个替换映射表,并按照一个循环模式(Cycling Pattern)依次对字母进行加密,大大增加了破解难度 。

2. 现代块密码 (Block Ciphers)

现代对称加密通常将消息分成固定长度的块(如 64 位),对每个块独立加密 。

  • DES (数据加密标准): 56 位密钥,64 位数据块 。目前已不再安全(可通过暴力破解在一天内攻破) 。改进版为 3DES(使用 3 个不同密钥加密 3 次) 。
  • AES (高级加密标准): 替代了 DES。使用 128、192 或 256 位密钥,128 位数据块,极其安全(暴力破解 128 位 AES 需要耗费难以想象的时间) 。

3. 对称加密的致命弱点

密钥分发问题: 通信双方必须在通信前共享同一个密钥 KSK_S 。如果双方从未见过面,如何在不安全的网络上安全地协商并传递这个共享密钥? 这引出了公钥加密。

四、 公钥加密 (Public Key Cryptography)

公钥密码学彻底改变了密钥管理方式:通信双方不需要共享秘密密钥 。

  • 公钥 (Public Key, K+K^+): 公开给所有人 。用于加密消息。
  • 私钥 (Private Key, KK^-): 仅由接收者自己严格保密 。用于解密消息。
  • 任何人都可以用 Bob 的公钥向他发送加密信息,但只有 Bob 能用自己的私钥解密 。

RSA 算法原理

RSA 是最著名的公钥加密算法 。它的核心依赖于大数分解的数学难题和模运算 (Modular arithmetic)。

生成密钥对的步骤:

  1. 选择两个极大的质数 ppqq
  2. 计算 n=pqn = pq 以及 z=(p1)(q1)z = (p-1)(q-1)
  3. 选择一个与 zz 互质的数 ee(且 e<ne < n) 。
  4. 选择一个数 dd,使得 edmodz=1ed \bmod z = 1
  5. 公钥为 (n,e)(n, e),私钥为 (n,d)(n, d)

加密与解密过程:

  • 加密: c=memodnc = m^e \bmod n
  • 解密: m=cdmodnm = c^d \bmod n

RSA 的重要特性: 先用公钥加密再用私钥解密,或者先用私钥加密再用公钥解密,结果是一样的,即:K(K+(m))=K+(K(m))=mK^-(K^+(m)) = K^+(K^-(m)) = m

五、 混合加密与会话密钥 (Session Keys)

在实际应用中,RSA 虽然解决了密钥分配问题,但其底层巨大的指数运算导致计算成本极高 。相比之下,DES/AES 的速度至少比 RSA 快 100 倍 。

解决方案:将两者结合使用 在实际的网络传输(如安全文件传输)中,我们通常采用一种称为“会话密钥”的混合机制:

  1. 发送方 (Alice) 随机生成一个一次性的对称密钥,称为会话密钥 (Session Key, KSK_S)

  2. Alice 使用接收方 (Bob) 的RSA 公钥对这个会话密钥进行加密,并发送给 Bob 。

  3. Bob 收到后,用自己的RSA 私钥解密,提取出会话密钥 KSK_S

  4. 随后,双方即可使用这个极其高效的对称密钥 KSK_S 对庞大的实际文件数据进行加密传输 。

Lecture 10 - Network Security II

1. 核心动机与网络安全目标 (Motivation & Goals)

在互联网中实现安全通信(例如 Alice 和 Bob 之间的通信),需要防范潜在的攻击者(如 Trudy/Eve)。网络安全的核心建立在 CIA 三要素 模型之上 :

  • 机密性 (Confidentiality): 只有发送方和预期的接收方能够“理解”消息的内容 。
  • 完整性 (Integrity): 发送方和接收方希望确保消息在传输过程中或传输后未被篡改,且如果被篡改能被检测出来 。
  • 身份认证 (Authentication): 发送方和接收方希望确认彼此的真实身份 。 (不是CIA三要素之一)
  • 可用性 (Availability): 服务必须对用户是可访问且可用的 。

2. 消息完整性 (Message Integrity) 与哈希函数 (Hash Functions)

2.1 错误检测 vs. 恶意篡改

  • 早期的错误检测机制(如 Checksum 校验和、Parity 奇偶校验、CRC 循环冗余校验)主要用于检测意外的数据损坏 。
  • 例如,互联网校验和(Internet Checksum)极易产生冲突(Collision),不同的消息很容易产生相同的校验和 。
  • CRC 的输出对输入存在偏差(输入的微小变化导致输出的微小变化),因此也很容易人为构造出具有相同 CRC 校验和的两个不同句子 。
  • 结论:这些机制的设计初衷是为了检测意外错误,而非防范恶意攻击 。

2.2 密码学哈希函数 (Cryptographic Hash Function)

  • 哈希函数 H(.)H(.) 接受任意长度的输入 mm,并生成固定长度的消息摘要(Message Digest 或 Fingerprint)。
  • 它是一种多对一(Many-to-1)的映射。
  • 密码学安全性: 在计算上,几乎不可能找到两个不同的消息 xxyy,使得它们的哈希值相同(即 H(x)=H(y)H(x) = H(y))。
  • 敏感性: 输入的微小变化会导致哈希输出发生巨大的变化。
  • 常见的哈希算法包括 MD5(生成 128 位摘要)和 SHA-1(生成 160 位摘要),但目前这两种算法在密码学上已被破解/弃用(NIST 于 2011 年正式弃用 SHA-1),现多被 SHA-2 或 SHA-3 取代。
  • 哈希与加密的区别: 哈希是单向的,无法“解密”;加密同一输入两次会产生不同的密文(除 ECB 模式外),但哈希同一输入两次必然产生相同的哈希值;且哈希的计算速度比加密快。

2.3 消息认证码 (MAC: Message Authentication Code)

  • 如果仅仅发送消息 mm 和其哈希值 H(m)H(m),攻击者可以轻易截获、修改消息为 mm',并重新计算 H(m)H(m') 发送给接收者,接收者无法察觉 。
  • 解决方案: 发送方和接收方共享一个“认证密钥” ss
  • 发送方发送 (m,H(m+s))(m, H(m+s))
  • 由于 ss 只有通信双方知道,接收方收到 mm 后,加上自己保存的 ss 重新计算哈希并比对,从而验证消息是否被篡改 。

2.4 哈希的实际应用

  • 软件完整性: 验证下载的软件(如 VLC 播放器)是否真实,防范病毒篡改(通过比对 SHA256 校验和)。
  • 密码存储: 系统数据库不存储明文密码,而是存储密码的哈希值。因此密码无法被“找回”,只能“重置”。
  • 时间戳与数据完整性: 用于区块链(Blockchain)验证区块未被修改,以及存储学位证书(如 OpenCerts)的哈希值以证伪。

3. 数字签名 (Digital Signatures)

数字签名是手写签名的密码学模拟版本 。

3.1 签 名的核心要求

  • 可验证性 (Verifiable): 接收者(Alice)能够验证该签名和消息确实是由发送者(Bob)生成的 。
  • 不可伪造性 (Unforgeable): 除了 Bob 之外,任何人都不应能生成该签名和消息 。
  • 不可否认性 (Non-repudiation): 接收者可以拿着消息和签名在法庭上证明这是发送者签署的 。

3.2 基于 RSA 的数字签名原理

  • 重要数学属性: KB(KB+(m))=m=KB+(KB(m))K_B^-(K_B^+(m)) = m = K_B^+(K_B^-(m))。即先用公钥加密再用私钥解密,与先用私钥加密再用公钥解密,结果是相同的 。
  • 简单签名方案: Bob 用他自己的私钥 KBK_B^- 加密消息 mm,创建签名 KB(m)K_B^-(m)
  • 验证: Alice 收到消息 mm 和签名 KB(m)K_B^-(m) 后,用 Bob 的公钥 KB+K_B^+ 应用于签名,检查 KB+(KB(m))K_B^+(K_B^-(m)) 是否等于 mm。如果相等,说明只有拥有 Bob 私钥的人才能生成此签名 。

3.3 签名优化:对哈希值签名

  • 使用公钥密码学对超长消息进行加密计算代价非常高昂 。
  • 优化方案: 首先使用哈希函数对长消息 mm 生成固定长度的摘要 H(m)H(m)
  • 然后,Bob 仅用私钥对这个摘要进行加密/签名,即生成 KB(H(m))K_B^-(H(m))

4. 公钥基础设施 (PKI) 与数字证书

公钥密码体制存在一个致命弱点:公钥本身也需要被安全地共享 。如果攻击者在交换公钥的阶段介入,就可以伪造身份 。

4.1 证书授权中心 (CA: Certification Authority)

  • 为了解决公钥分发问题,引入了 PKI(公钥基础设施),其核心是数字证书和 CA 。
  • CA 的作用是将特定的公钥与特定的实体(Entity)绑定在一起 。
  • 实体向 CA 注册其公钥并提供身份证明,随后 CA 生成包含该实体公钥的数字证书,并用 CA 自己的私钥对其进行数字签名 。

4.2 数字证书的内容与验证

  • 证书包含的信息: 所有者的身份(如域名 google.com)、所有者的公钥、证书的有效时间窗口,以及 CA 的签名 。
  • 验证过程: 当 Alice 需要 Bob 的公钥时,她获取 Bob 的证书,然后使用 CA 的公钥(KCA+K_{CA}^+)验证证书上的签名。验证通过后,即可安全提取 Bob 的公钥(KB+K_B^+)。
  • 信任链问题: 我们如何得知并信任 CA 的公钥?操作系统或浏览器内部预置了一个“受信任的根证书颁发机构”列表,这些 CA 的公钥被视为普遍共识 。

4.3 CA 滥用与安全隐患

  • 由于整个体系极度依赖 CA 的可信度,一旦 CA 被攻破或滥用,后果严重。
  • 案例 1(DigiNotar): 2011 年该荷兰 CA 遭入侵,签发了超过 500 个针对 Google、Mozilla 等域名的欺诈证书,导致其破产。
  • 案例 2(Turktrust): 其下属机构意外签发了针对 gmail.com 的假证书 。
  • 案例 3(Lenovo SuperFish): 联想电脑曾预装中间人广告软件,能够破坏 HTTPS 连接并篡改证书 。

5. 防火墙与网络安全运营 (Firewalls)

防火墙用于将组织的内部网络与外部更庞大的互联网隔离,允许特定数据包通过,同时拦截其他数据包 。

5.1 防火墙的作用

  • 防止拒绝服务(DoS)攻击,例如 SYN 洪水攻击(消耗 TCP 连接资源) 。
  • 防止非法修改或访问内部数据 。
  • 只允许授权的用户或主机访问内部网络 。

5.2 无状态数据包过滤 (Stateless Packet Filtering)

  • 路由器逐个过滤数据包,根据包头信息决定转发还是丢弃 。
  • 判断依据: 源/目的 IP 地址、TCP/UDP 端口号、ICMP 消息类型、TCP 的 SYN 和 ACK 标志位 。
  • 访问控制列表 (ACL): 这是一张由 (动作, 条件) 组成的规则表,自上而下应用于传入的数据包。例如可以设置规则:“丢弃所有发往 80 端口的出站数据包”以阻止外部 Web 访问。

5.3 防火墙的局限性

  • IP 欺骗 (IP Spoofing): 路由器无法验证数据包是否真的来自其声称的源 IP 地址。
  • 性能瓶颈: 繁重的检查规则可能使防火墙成为网络拥堵的瓶颈。
  • 在与外界的通信自由度和安全级别之间存在权衡(Tradeoff)。

6. 综合案例研究:安全电子邮件 (Secure E-mail)

要设计一个既能保证机密性,又能提供发送者认证和消息完整性的电子邮件系统,Alice 和 Bob 需要综合使用以上技术:

  1. 机密性 (Confidentiality):
    • Alice 生成一个随机的对称私钥 KSK_S
    • Alice 使用 KSK_S 加密邮件正文,得到 KS(m)K_S(m) (为了效率采用对称加密) 。
    • Alice 使用 Bob 的公钥 KB+K_B^+ 加密这个对称密钥,得到 KB+(KS)K_B^+(K_S)
  2. 发送者认证与完整性 (Authentication & Integrity):
    • Alice 使用哈希函数对消息求摘要 H(m)H(m)
    • Alice 用自己的私钥 KAK_A^- 对摘要进行签名,得到 KA(H(m))K_A^-(H(m))
  3. 最终发送:
    • Alice 将加密后的消息 KS(m)K_S(m)、加密后的对称密钥 KB+(KS)K_B^+(K_S),以及数字签名 KA(H(m))K_A^-(H(m)) 组合发送给 Bob 。
    • 这个过程总共使用了三种密钥:Alice 的私钥、Bob 的公钥以及新创建的对称密钥 。

7. 总结

网络安全并非单一层面的问题,现代计算机网络在不同的 OSI 层级都部署了相应的安全协议 :

  • 应用层 (Application): HTTPS
  • 传输层 (Transport): SSL/TLS
  • 网络层 (Network): IPsec, VPN
  • 链路层 (Link): WiFi (802.11) 安全协议

核心机制映射:

  • 机密性 \rightarrow 依赖对称加密和公钥加密(RSA)。

  • 完整性 \rightarrow 依赖哈希(Hashing)和 MAC 。

  • 身份认证 \rightarrow 依赖数字签名和 CA 证书 。

Exam notes

  1. router will not establish TCP or UDP connections. It does not have transport layers.
  2. TCP uses Go-Back-N
  3. MSS does not include header length
  4. remember to reverse at the last when calculating checksums.
  5. TCP: 主要使用累积确认 (Cumulative ACK)。虽然 TCP 有 SACK(选择性确认)选项,但在基础理论和标准模型中,它的核心机制是累积确认(即期待收到的下一个字节序号)。可以缓存 (May buffer)。虽然 TCP 协议规范没有强制要求,但为了效率,几乎所有的现代 TCP 实现都会选择缓存失序的数据包,而不是丢弃它们。

Comments

No comments yet.