欢迎光临
我们一直在努力

Stanford CS144 学习笔记 (一):初探互联网的底层逻辑

在这里插入图片描述

导语:接下来的几周,我们将系统学习关于互联网的一切:了解什么是互联网,以及 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) 发出,自上而下经过这四层,再通过物理网络传输:

  • Application (应用层):产生业务数据。
  • Transport (传输层):负责端到端的传输控制。
  • Network (网络层):将数据封装为 Packet (数据包,包含头部信息),负责选路。
  • 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 模型分得更细:

  • Physical (物理层):电路、光纤、电平信号。
  • Link (链路层)
  • Network (网络层)
  • Transport (传输层)
  • Session (会话层):管理会话控制。
  • Presentation (表示层):数据格式转换、加密。
  • 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 头部依然包含了几个必不可少的机制:

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

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

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

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

  • SYN:客户端向服务器发送一个同步消息(请求建立连接)。
  • SYN/ACK:服务端响应同步消息,同时确认收到了客户端的请求。
  • ACK:客户端再次确认,至此连接建立。
  • 网络上的数据传输需要两套地址协同:

  • Network layer address:IP address(决定送到哪台电脑)。
  • Transport layer address:TCP port(决定送到这台电脑的哪个软件/进程)。
    数据包在网络中经过多次跳跃 (hops),每一次 hop 都在连接两个相邻的路由器。
  • 4.2 Inside Each Hop (每一跳的内部操作)

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


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

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

    5.1 两种转发模式

  • 源路由 (Source Routing, 现已极少使用):源主机预先计算好整条路径,并把所有中间节点记录在包头。路由器只需按图索骥。
  • 转发表转发 (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 (分层的理由)

  • Modularity:模块化。
  • Well defined service:定义明确的服务接口。
  • Reuse:重用性(比如 HTTP 和 FTP 都可以重用 TCP 层)。
  • Separation of concerns:关注点分离。
  • Continuous improvement:持续提升(升级物理链路不影响上层软件)。
  • 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 地址等,确保局域网内的通信严丝合缝。

    赞(0)
    未经允许不得转载:171主机测评 » Stanford CS144 学习笔记 (一):初探互联网的底层逻辑
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址