Stanford CS144 学习笔记 (一):初探互联网的底层逻辑
2026/7/16 4:13:00 网站建设 项目流程

导语:接下来的几周,我们将系统学习关于互联网的一切:了解什么是互联网,以及 IP 协议如何进行互联网交互。这些看似底层的知识,实际上是当今网络世界最核心、最前沿的基石(特别是 TCP/IP 架构)。

Main Topics

  • 四层网络模型
  • 网络设计架构
    • 互联网通过 packet (数据包) 来传输数据
    • Layering (分层原则)
    • 通过封装 (Encapsulation) 来实现上述两点
  • Internet Protocol (IP 协议)
  • TCP 协议

1. A Day in the Life of an Application (应用程序的一天)

我们在电脑和手机上使用的绝大多数网络应用,本质上都在做一件事:通过网络读写数据

1.1 Network Applications

  • 通信方式:字节流 (Byte Stream) 是目前网络中最常用、最主流的通信方式。

1.2 Byte Stream Model (字节流模型)

  • 在这个模型下,应用程序不需要关心数据在网络中是如何被切分或路由的,它只需要像读写本地文件一样,向网络连接中写入或读取连续的字节序列。

1.3 World Wide Web (万维网)

  • 机制:经典的客户端-服务器 (C/S) 架构。
  • 常用命令:客户端发送GET请求获取网页。
  • 状态码:服务器返回200 OK表示成功,404 NOT FOUND表示页面丢失,400 Bad Request表示请求错误等。

1.4 BitTorrent (BT 下载)

  • 机制:经典的 P2P (点对点) 架构。将庞大的文件分割成无数个小片段 (Pieces)。
  • Tracker 服务器:Tracker 不存储文件,而是作为一个“红娘”,告诉 Client (客户端) 应该去连接哪些其他客户端来获取缺少的文件片段。

1.5 Skype (音视频通话)

  • 基础模式Client A --Internet-- Client B,理想情况下的端到端直连。
  • 1.5.1 Skype with Complication (复杂情况):现实中,用户的电脑大多藏在家庭路由器的 NAT (网络地址转换) 防火墙之后。Skype 会使用Rendezvous (会合)技术,通过第三方服务器协助双方穿透防火墙建立直连。
  • 1.5.2 Skype with More Complication (更复杂情况):如果防火墙极其严格导致无法直连,Skype 会退而求其次,使用Relay (中继)服务器来替双方转发流量。

2. The Four Layer Internet Model (四层互联网模型)

数据从源主机 (Source End-Host) 发出,自上而下经过这四层,再通过物理网络传输:

  1. Application (应用层):产生业务数据。
  2. Transport (传输层):负责端到端的传输控制。
  3. Network (网络层):将数据封装为 Packet (数据包,包含头部信息),负责选路。
  4. Link (链路层):选择合适的物理链路,将数据“逐跳 (hop-by-hop)”传输到下一个相邻节点。

2.1 The Network Layer is “Special” (网络层的特殊性)

  • 绝对核心:在网络层,我们必须且只能使用IP (Internet Protocol)协议。
  • 传输层 (Transport)则有选择权:
    • TCP(Transmission Control Protocol):保证可靠送达。
    • UDP(User Datagram Protocol):不提供送达保证,但速度极快。
  • 对等通信:四层模型中的每一层,逻辑上只和目标主机的同一层进行“对等通信”。
  • 实际传输路径:数据在底层的链路层实际传输,中间逐跳经过路由器(路由器通常只解析到网络层),最后到达目标主机,自下而上返回给应用层。

2.2 IP is the “Thin Waist” (IP 是细腰模型)

TCP/IP 模型呈沙漏状,上下两端十分宽广(底层支持以太网、WiFi、5G;上层支持 HTTP、FTP、SMTP),而中间极其狭窄——所有流量都必须通过 IP 协议这一道“细腰”

2.3 The 7-Layer OSI Model (OSI 七层模型)

与实际应用的四层模型相比,理论上的 OSI 模型分得更细:

  1. Physical (物理层):电路、光纤、电平信号。
  2. Link (链路层)
  3. Network (网络层)
  4. Transport (传输层)
  5. Session (会话层):管理会话控制。
  6. Presentation (表示层):数据格式转换、加密。
  7. Application (应用层)

3. The IP Service Model (IP 服务模型)

3.1 Property & Behavior (属性与行为)

  • Datagram (数据报文):IP 将数据封装为独立的数据包,包含 Payload (数据)、DIP (目标 IP 地址)、SIP (源 IP 地址),然后逐跳送达。
  • Unreliable (不可靠):包有可能会丢失。IP 不保证数据一定到达目的地,不提供任何送达保证。
  • Best effort (尽力而为):IP 会尽最大努力传输,但仅在“必要时”(如网络严重拥堵)才会丢弃数据。IP 不知道数据是否丢失,也绝不会主动重新发送
  • Connectionless (无连接):发送数据前不需要和目标主机建立连接。

3.2 Why is the IP service so simple? (为什么 IP 服务如此简单?)

  • 快速、低成本:保证协议最小化,使得路由器只需做最简单的转发,极大降低了硬件构建和维护成本 (lower cost to build and maintain)。
  • 端到端原则 (End-to-End Principle):把纠错、重传等复杂逻辑推给网络两端的终端电脑处理,避免核心网络因处理复杂逻辑而拥堵僵化。
  • 普适性:IP works over any link layer,可以运行在任何链路层(光纤、铜缆、无线电)之上。

3.3 The IP Service Model (Details) (IP 服务模型的细节)

虽然简单,但 IP 头部依然包含了几个必不可少的机制:

  1. 防止循环发生
    • 措施:添加TTL (Time-to-Live, 生存时间)字段。
    • 原理:相当于一个跳数计数器。数据包每经过一个路由器 TTL 减 1,减到 0 如果还没到目的地,就会被丢弃,防止数据包在网络中陷入死循环。
  2. 对长数据进行切片 (Fragmentation)
    • 措施:避免链路层 MTU (最大传输单元) 限制导致长数据无法承载。
    • 原理:使用一些头部字段(如标识、标志、片偏移)保证路由器能正确切分,终端能正确重组。
  3. 校验和 (Checksum):用来校验 IP 头部,防止因为位翻转导致送达错误的地址。
  4. 适用不同版本的 IP
    • IPv4:32 bit 地址,目前最常用,但资源已面临枯竭。
    • IPv6:128 bit 地址,正在全球范围内逐步转变和普及。
  5. 可扩展性:允许在必要时 (when necessary) 添加新的 Options 字段。

4. Life of a Packet (数据包的一生)

4.1 TCP Byte Stream (TCP 字节流生命周期)

Client — Internet — Server
在传输实际数据前,TCP 需要通过三次握手 (3-way handshake)建立连接:

  1. SYN:客户端向服务器发送一个同步消息(请求建立连接)。
  2. SYN/ACK:服务端响应同步消息,同时确认收到了客户端的请求。
  3. ACK:客户端再次确认,至此连接建立。

网络上的数据传输需要两套地址协同:

  1. Network layer addressIP address(决定送到哪台电脑)。
  2. Transport layer addressTCP port(决定送到这台电脑的哪个软件/进程)。
    数据包在网络中经过多次跳跃 (hops),每一次 hop 都在连接两个相邻的路由器。

4.2 Inside Each Hop (每一跳的内部操作)

当数据包到达路由器时:路由器会检查当前包的 TTL 跳数,校验数据包头部是否损坏,并读取 DIP (目标 IP)。随后,查表决定将其送往哪个端口。


5. Principle: Packet Switching (原则:分组交换)

Packet (数据包):自包含的数据单元,携带着使其能够到达目的地的所有必要信息(就像一封写好收件地址的信)。

5.1 两种转发模式

  1. 源路由 (Source Routing, 现已极少使用):源主机预先计算好整条路径,并把所有中间节点记录在包头。路由器只需按图索骥。
  2. 转发表转发 (Forwarding Table, 主流模式):路由器内部维护一张状态表(包含目标地址前缀和对应的下一跳接口)。这种模式极大加强了交换机的效率,路由器只需要专注转发数据,而不用记录整条路径

5.2 No Per-Flow State Required (无需维护流状态)

  • 数据包通常以“流”的形式出现(比如你看视频的一连串包)。
  • 交换机/路由器不需要关心数据的“流 (Flow)”,它不会为某次 TCP 连接存储状态。
  • 交换机专注于高效的转发,独立对待每一个包,它也不关心连接是否故障(故障由端到端负责)。

5.3 Efficient Sharing of Links (高效的链路共享)

数据的传输是间歇性的(你不可能时刻占满带宽)。路由器可以根据实际使用情况,合理地动态分配数据传输容量。这被称为Statistical Multiplexing (统计多路复用)


6. Principle: Layering (原则:分层)

分层的系统具有以下特征:

  • 层级分明,每一层负责具体的任务和提供特定的服务。
  • 层级之间的交流尽量不要跨层,而是邻层交流

6.1 层级之间不跨层关心

  • 好处:每一层只需要和上下相邻层通信。这种设计使得每一层可以高度专注于自己的任务(比如写 Web 网页的人,完全不需要懂光纤原理)。
  • 坏处:有时候为了追求极致的性能或者特定的功能,我们不得不打破分层结构(跨层访问)。

6.2 Reasons for layering (分层的理由)

  1. Modularity:模块化。
  2. Well defined service:定义明确的服务接口。
  3. Reuse:重用性(比如 HTTP 和 FTP 都可以重用 TCP 层)。
  4. Separation of concerns:关注点分离。
  5. Continuous improvement:持续提升(升级物理链路不影响上层软件)。
  6. Peer-to-peer communications:对等通信逻辑清晰。

7. Principle: Encapsulation (原则:封装)

封装是实现 Layering (分层) 的重要手段。分层原则告诉我们无需关心跨层通讯原理,而封装通过把细节全部进行黑盒化来实现这一点。

7.1 Encapsulation

  • 把上层传下来的数据成段封装,套上本层的头部,变成一个新的数据包。
  • 这样,底层只需要知道这段数据代表一个“Payload (有效载荷)”,而完全不需要关心里面到底写了什么。
  • Example:Virtual Private Network (VPN)。VPN 的原理就是一种极端的封装:它把一个原本要发往内网的 IP 数据包,整体作为 Payload,再在外面套上一个发往 VPN 服务器的新 IP 头部,从而实现数据的隐蔽传输(隧道技术)。

8. Byte Order (字节序)

8.1 Computer Memory (计算机内存)

计算机在内存中存储多字节数据时,存在端序(字节排列顺序)的差异。

8.2 Endian (端序分类)

  • Big Endian (大端序):高位字节存储在内存的低地址端(符合人类阅读习惯,如 0x1234,12 存在前面)。
  • Little Endian (小端序):低位字节存储在内存的低地址端(如 x86 架构常用)。

8.3 Network Byte Order (网络字节序)

端序对于跨网络通信影响巨大。如果一台大端序电脑和一台小端序电脑通信,不加转换的话数据会完全错乱。

  • 业界规定:网络传输一律采用大端序 (Network Byte Order)
  • 如果你电脑是小端序,发送前必须进行 Byte Order 转换。

8.4 Portable Code (可移植代码)

为了保证 C 语言代码在任何架构的电脑上都能跑,我们使用标准库提供的结构体和 Helper functions 进行转换:

  • htons(): “Host to Network Short” (主机转网络,用于 16 位,如 Port)。
  • ntohs(): “Network to Host Short”。
  • htonl(): “Host to Network Long” (主机转网络,用于 32 位,如 IP)。
  • ntohl(): “Network to Host Long”。
    (注意:处理网络数据时要千万小心,忘记转换,或者错误地 Convert twice,都会引发致命 Bug。)

8.5 Packet Formats (数据包格式分析工具)

  • 要直观观察上述的网络包、十六进制字节序,老师强烈推荐的抓包软件叫:Wireshark
  • 网络协议有严格的格式规定,Wireshark 可以帮你逐层剥开协议的“封装”。

9. Name and Addresses: IPv4 (名称与地址:IPv4)

路由器根据 IP 地址来决定数据包发向何处。

9.1 Goal of Internet Protocol Addresses

  • 使得连接在互联网上的计算机能够互相通信。
  • 需要全局唯一的标识符。

9.2 Internet Protocol, Version 4

  • IPv4 地址由32 bits (4 个字节/octets)组成。
  • Netmask (子网掩码):用来判断两台机器是否在同一个子网。
    • 如何判断?(Quiz 解析):将双方的 IP 地址分别与子网掩码进行按位与运算 (Bitwise AND)。如果得到的结果完全相同,说明源地址和目标地址在同一个子网。
    • 结论:如果同子网,可以通过交换机直接进行通讯;如果不同,必须要把包发给路由器(网关)来跨网段转发。遇到255.255.255.224这种非标准掩码,必须转化为二进制动手算!

9.3 如今的地址结构

为了高效寻址和管理,现在普遍采用CIDR (Classless Inter-Domain Routing, 无类别域间路由)格式。

  • 分配地址块的形式:IP Address / Count
  • 例如192.168.0.0 / 16,指前 16 位是固定的网络前缀,后 16 位可分配给主机。
  • 由于 IPv4 地址可能会被耗尽,专门有机构(如 IANA)负责统筹分配,避免冲突。

10. Longest Prefix Match (最长前缀匹配)

当数据包到达路由器,路由器该选择哪条链路进行转发?

10.1 转发表 Forwarding table

转发表中记录了各种目标地址的通配规则及其对应的下一跳链路 (link)。查找规则时,通常采用的是最长前缀匹配法

10.2 方法 (深入解析)

(注:解决原笔记没听懂的问题)

  • 本质原理:路由表里的每一项都是一个 CIDR 网段(如/24/16)。当一个目标 IP(写为 32 bits 形式)匹配转发表时,可能会同时符合好几条规则。
  • 如何决断?路由器会比较这些匹配项的子网掩码长度。匹配位数越多(前缀越长),说明该规则越“精确”。路由器一定会选择最精确(最长前缀)的那条链路转发。
  • 如果前面所有的具体字节都匹配不上,最后会匹配一条通配符规则,即走Default Link (默认路由/默认网关)

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

解决了“如何知道目的地址的下一跳 MAC 地址是啥”的问题。

11.1 地址层 (IP 与 MAC 的精妙比喻)

网络层 (IP) 和链路层 (MAC) 本质上是解耦但又协同工作的,需要 ARP 协议进行映射解析。

  • IP 地址属于网络层;MAC 地址属于链路层。网络层的数据被封装在 Link 层的外部封包中。
  • 绝佳的比喻
    • 网络层 (IP)就像是快递公司,它负责把包裹从一个城市(源 IP 地址)送到另一个城市(目标 IP 地址)。IP 地址就是快递单上的宏观地址信息。
    • 链路层 (MAC)可以更加接近数据的物理目的地。它就像是快递公司的派送员,只负责在同一个小区(局域网)里派送包裹。MAC 地址就像是小区里的门牌号,派送员通过门牌号把包裹精确送到你家门口。

11.2 ARP 的工作机制

ARP 可以将设备的 IP Address 和 MAC Address 进行映射,并缓存起来,便于局域网内收发数据。

  • 获取未知 MAC:在已知目标 IP,但未知其 MAC 时,发动 ARP Simple request-reply protocol。设备会在局域网内大喊一声(广播 Request:“谁是 192.168.1.5?”),此时局域网内所有节点都会收到。对应的设备会悄悄回复(单播 Reply:“是我,我的 MAC 是 XX”)。
  • 动态缓存:如果映射永久存在会占用过多内存且无法应对设备换网。因此所有现存的 ARP 都采用动态缓存机制,固定时间(过期后)会自动清空映射情况,重新请求。

11.3 通讯的块 (Packet 结构)

ARP 的报文块包含了丰富的字段信息,用于精确指明发送方和目标方的硬件类型、协议类型、IP 和 MAC 地址等,确保局域网内的通信严丝合缝。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询