第1章 概述

所属:TCP/IP详解 卷2:实现 来源:TCP/IP详解 卷2:实现

本章概述TCP/IP协议栈在内核中的实现,介绍全书的组织结构、代码来源和关键概念。


1.1 引言

本书的目的

本书的目的:

  • 详细描述TCP/IP协议在内核中的实现
  • 理解协议的工作原理
  • 掌握内核网络代码的结构
  • 为网络编程和调试打下基础

卷1讲协议原理,卷2讲内核实现。


代码来源

代码来源:

  • 4.4BSD-Lite(Net/3)
  • 加州大学伯克利分校开发
  • 很多Unix系统的基础
  • 经典的TCP/IP实现

本书用4.4BSD-Lite作为例子。


为什么学习实现

学习实现的好处:

  1. 深入理解协议

    • 知道协议是怎么工作的
    • 理解设计决策的原因
  2. 调试网络问题

    • 知道内核怎么处理的
    • 更容易定位问题
  3. 编写高性能程序

    • 知道内核的开销
    • 优化程序性能
  4. 修改和扩展内核

    • 可以修改内核代码
    • 添加新功能

理解实现才能真正理解协议。


1.2 全书的组织结构

本书的结构

全书分为四个部分:

  1. 第一部分:内核基础

    • 第1章:概述
    • 第2章:mbuf存储器缓存
    • 第3章:接口层
    • 第4章:接口:以太网
    • 第5章:接口:SLIP和环回
    • 第6章:IP编址
    • 第7章:域和协议
  2. 第二部分:IP层

    • 第8章:IP:网际协议
    • 第9章:IP选项处理
    • 第10章:IP的分片与重装
    • 第11章:ICMP:Internet控制报文协议
    • 第12章:IP多播:IGMP
    • 第13章:IP选路
    • 第14章:选路套接字
  3. 第三部分:传输层

    • 第15章:UDP:用户数据报协议
    • 第16章:TCP:传输控制协议
    • 第17章:TCP定时器
    • 第18章:TCP重传
    • 第19章:TCP数据流
    • 第20章:TCP成块数据流
    • 第21章:TCP紧急方式
    • 第22章:TCP连接的建立与终止
    • 第23章:TCP坚持定时器
    • 第24章:TCP保活定时器
    • 第25章:TCP性能
    • 第26章:TCP插口选项
    • 第27章:TCP其他
  4. 第四部分:其他

    • 第28章:原始IP
    • 第29章:系统调用
    • 第30章:内核配置

从下到上,从基础到应用。


1.3 关键概念

分层结构

TCP/IP的分层:

层次协议说明
应用层Telnet、FTP、SMTP等用户应用
传输层TCP、UDP端到端通信
网络层IP、ICMP、IGMP分组和选路
链路层设备驱动硬件接口

分层设计,每层负责不同的功能。


数据的流动

数据发送时的流动:

应用程序
   |
   v
TCP/UDP(传输层)
   |
   v
IP(网络层)
   |
   v
链路层驱动
   |
   v
物理网络

数据接收时的流动:

物理网络
   |
   v
链路层驱动
   |
   v
IP(网络层)
   |
   v
TCP/UDP(传输层)
   |
   v
应用程序

发送时从上到下,接收时从下到上。


封装

封装(Encapsulation):

  • 每层都添加自己的首部
  • 应用数据 → TCP首部 + 数据 → IP首部 + TCP + 数据 → 以太网首部 + IP + TCP + 数据
  • 每一层把上层的数据当作 payload

封装是分层协议的基本操作。


分用

分用(Demultiplexing):

  • 接收时,每层根据首部字段分用
  • 链路层:根据类型字段(IP、ARP等)
  • IP层:根据协议字段(TCP、UDP、ICMP等)
  • TCP/UDP:根据端口号
  • 找到对应的上层协议或应用

分用是封装的逆过程。


1.4 网络数据结构

mbuf

mbuf(memory buffer):

  • 内核中用于存储网络数据的结构
  • 灵活的内存管理
  • 可以链接起来
  • 避免数据拷贝

mbuf是网络数据的基本存储单元。


接口结构

ifnet结构:

  • 每个网络接口一个
  • 统一的接口抽象
  • 包含函数指针
  • 各种接口都用同样的接口

ifnet是网络接口的统一抽象。


协议控制块

协议控制块(PCB):

  • 每个连接或套接字一个
  • 包含协议状态
  • TCP有tcpcb
  • UDP有inpcb

协议控制块保存协议的状态信息。


1.5 进程和上下文

进程上下文

进程上下文(process context):

  • 系统调用时,在进程上下文中执行
  • 可以访问进程的内存
  • 可以睡眠等待

系统调用在进程上下文中执行。


中断上下文

中断上下文(interrupt context):

  • 硬件中断时执行
  • 不能睡眠
  • 要尽快完成
  • 优先级高

中断处理在中断上下文中执行。


软件中断

软件中断(software interrupt):

  • 也叫软中断
  • 介于进程和硬件中断之间
  • 用于网络输入处理
  • 可以延迟处理

软中断用于处理不太紧急的事情。


1.6 小结

本书内容

  1. 目的

    • 讲解TCP/IP的内核实现
    • 基于4.4BSD-Lite
  2. 组织结构

    • 四个部分
    • 从底层到上层
    • 从基础到应用

关键概念

  1. 分层结构

    • 应用层、传输层、网络层、链路层
    • 每层负责不同功能
  2. 数据流动

    • 发送:从上到下
    • 接收:从下到上
  3. 封装和分用

    • 发送时封装
    • 接收时分用
  4. 数据结构

    • mbuf:数据存储
    • ifnet:接口抽象
    • PCB:协议控制块
  5. 上下文

    • 进程上下文
    • 中断上下文
    • 软件中断

学习建议

  1. 结合卷1

    • 先懂原理
    • 再看实现
  2. 看代码

    • 结合源码看
    • 理解数据结构
  3. 动手实验

    • 写程序测试
    • 用工具观察

理论结合实践效果最好。


概述