# 网络体系结构

OSI 参考模型是最早制定的网络体系结构,不过后来出现的 TCP/IP 参考模型更简单、更流行。

# OSI 参考模型

70 年代,国际标准化组织(International Organization for Standardization ,ISO)提出了开放系统互联(Open System Internetwork ,OSI)参考模型,将网络体系结构从上到下划分为 7 个层次:

  • 应用层(application layer)
    • 通常是一些直接面向用户的应用程序在工作。
    • 应用层协议有很多种,比如 HTTP、FTP ,它们都是规定了不同主机的应用程序之间如何通信。
  • 表示层(presentation layer)
    • 负责处理来自不同系统的信息,整合之后传给上层。
  • 会话层(session layer)
    • 负责建立并维持两个主机之间的会话。
  • 传输层(transport layer)
    • 核心协议是 TCP、UDP ,负责建立两个主机之间的通信信道(逻辑上的),提供面向连接的通信、流量控制等服务。
  • 网络层(network layer)
    • 核心协议是 IP ,负责路由选择、分组转发。
  • 数据链路层(data link layer)
    • 以帧(frame)为单位传输数据,负责 MAC 寻址、差错控制。
  • 物理层(physical layer)
    • 以比特(bit)为单位传输数据,不考虑寻址,只管把数据沿着信道传输。

总结:

  • 每一层都将该层及其以下层服务封装起来,提供 API 供高层使用。高层使用底层的服务时不需要知道其具体实现方法,像使用一个黑盒。
  • 通信子网中的结点通常工作在最下面三层,比如路由器。

# 协议数据单元

  • 位于不同主机、相同层的程序之间,通过该层协议进行通信。

    • 此时的通信单位称为协议数据单元(Protocol Data Unit ,PDU)。
  • 一个协议数据单元的内容主要分为两部分:

    • 有效载体(payload):记录要传输的数据。
    • 元数据(metadata):记录该协议的一些参数,用于识别该协议、控制传输过程。
  • 协议数据单元通常会限制整体的最大大小,如果有效载体过大,就会拆分成多个协议数据单元分别传输。

  • 例如:

    协议 PDU
    HTTP 报文(message)
    TCP 段(segment)
    UDP 报(datagram)
    IP 包(packet)
    ICMP 报文(message)

    不严格区分时,可以将不同协议的 PDU 统称为数据包。

# 服务数据单元

  • 位于同一主机、相邻层的程序之间,通过该主机上的协议 API 进行通信。
    • 此时的通信单位称为服务数据单元(Service Data Unit ,SDU)。
  • 例如:主机 A 上的一个程序发出一个 HTTP 报文到主机 B 时,属于在应用层发出一个协议数据单元。但具体的通信过程为:
    1. 主机 A 以 HTTP 报文作为最初的有效载体,先添加应用层的元数据,封装成应用层的服务数据单元。然后传给表示层,添加表示层的元数据,封装成表示层的服务数据单元。以此类推,直到传到物理层时才从网卡发出去。
    2. 主机 B 在物理层收到一组比特数据,根据元数据识别出它们是数据帧,于是拆除元数据,提取有效载体传到数据链路层处理。数据链路层根据这些数据帧还原出 IP 数据包,提取有效载体传到网络层处理。以此类推,直到传到应用层,还原成一个 HTTP 报文。

# TCP/IP 参考模型

TCP/IP 参考模型从上到下划分为 4 个层次:

  • 应用层
    • 对应 OSI 最上面的应用层、表示层、会话层。
    • 应用层协议有:基于 TCP 的 HTTP、FTP、telnet、电子邮件协议等,基于 UDP 的 DNS、SNMP(简单网络管理协议)、NFS(网络文件系统)、TFTP(通用文件传输协议)等。
  • 传输层
    • 对应 OSI 的传输层。
    • 主要是 TCP、UDP 两种协议。
  • 网络层
    • 对应 OSI 的网络层。
    • 一方面将传输层的报文封装成分组再选择路由发送,另一方面检查接收到的分组的 IP 地址,若与本地 IP 地址相同则拆除报头再传给传输层,否则选择路由并转发。
  • 网络接口层
    • 对应 OSI 最下面的物理层、数据链路层。

当应用层发出数据包时,会先传到传输层,被加上 TCP 头;再传到网络层,被加上 IP 头;最后传到网络接口层,被加上帧头、帧尾。如下: