# 网络模型

  • 一个计算机网络系统,比如大学局域网,可能混乱、复杂,因为有很多种通信设备、传输介质、网络协议。为了规范、简化,业界通常根据 TCP/IP 或 OCI 模型设计网络系统。

# TCP/IP 网络模型

  • 1970 年代,美国国防部高级研究计划局(DARPA)在建立 ARPAnet 网络之后,进一步研究网络协议,制定了 TCP/IP 模型,开发了 TCP/IP 协议簇。

    • TCP/IP 模型比 OCI 模型更早制定,更简化,更常用。
  • TCP/IP 模型从上到下分为 4 个层次:

    • 应用层
      • 对应 OSI 最上方的应用层。
    • 传输层
      • 对应 OSI 的表示层、会话层、传输层。
    • 网络层
      • 对应 OSI 的网络层。
    • 网络接口层
      • 对应 OSI 最下方的物理层、数据链路层。
  • 总结:

    • 每一层的功能不同,因此存在不同用途的网络协议。而一个程序可能使用多种网络协议,同时工作在多个层。
    • 每一层都将该层及其以下层服务封装起来,提供 API 供高层调用。高层调用底层的服务时不需要知道其具体实现方法,像调用一个黑盒。
      • 例如在两个主机分别运行一个程序,使用同一种网络协议(比如 HTTP 或 TCP),就可以相互通信,不需要关注下层的通信细节。
    • 假设用户想在主机之间进行网络通信,则可选用任意一层的网络协议。主要区别在于:应用层协议最贴近用户,方便人使用。越底层的协议越贴近机器,需要考虑软件配置、硬件配置等复杂因素。

# 协议数据单元

  • 协议数据单元(Protocol Data Unit ,PDU):泛指各种网络协议传输数据的单位,统称为数据包。

  • 一个协议数据单元的内容通常分为两部分:

    • 元数据(metadata):记录该协议的一些参数。
    • 有效载体(payload):记录要传输的数据。
  • 假设用户 A 想对用户 B 说一句话 "Hello" ,则有多种方式:

    • 在现实世界,以写信的方式通信时,需要将这句话写在纸上,封装在一个信封中,并在信封表面注明目标地址等信息,然后寄出去。
    • 在计算机网络,以 TCP 协议通信时,需要将这句话(属于 payload )封装在一个数据包中,并在数据包的头部注明目标地址等信息(属于 metadata ),然后发送出去。
  • 不同网络协议的 PDU 通常采用不同的数据格式、名称,例如:

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

# 示例

  • 上层的网络协议会调用下层的网络协议。当上层的协议数据单元传到下层时,会添加元数据,封装成下层的协议数据单元。

  • 假设主机 A 上的一个程序,采用 HTTP 协议与主机 B 上的程序通信。则数据包会逐层传递:

    1. 程序发出一个 HTTP 报文,它是应用层的协议数据单元。
    2. HTTP 报文向下传到传输层。因为 HTTP 协议基于的传输层协议是 TCP ,此时需要给 HTTP 报文添加 TCP 头,封装成 TCP 段。
      • 此时传输层的协议数据单元是 TCP 段,其中 metadata 是 TCP 头,payload 是 HTTP 报文。
      • 协议数据单元通常会限制单个数据包的最大体积。例如一个 HTTP 报文体积较大时,会自动拆分成多个 payload ,放入多个 TCP 段进行传输。
    3. TCP 段向下传到网络层。因为 TCP 协议基于的网络层协议是 IP ,此时需要给 TCP 段添加 IP 头,封装成 IP 包。
    4. IP 包向下传到网络接口层。因为 IP 协议通常基于以太网协议进行通信,此时需要将 IP 包封装成以太网帧。
    5. 以太网帧从网卡发出,目标地址指向主机 B 。
  • 主机 B 的网卡收到以太网帧之后,数据包会逐层传递:

    1. 网络接口层解析以太网帧,根据它的 metadata 识别出 payload 属于 IP 包。
    2. IP 包向上传到网络层,根据它的 metadata 识别出 payload 属于 TCP 段。
    3. TCP 段向上传到传输层,根据它的 metadata 识别出 payload 属于 HTTP 报文。并且根据 metadata 中的 Dest Port ,找到监听该端口的程序。
    4. HTTP 报文被传给目标程序。

# OSI 网络模型

  • 1980 年代,国际标准化组织(International Organization for Standardization ,ISO)制定了开放系统互联(Open System Interconnection ,OSI)网络模型。

  • OSI 模型从上到下分为 7 个层次:

    • 应用层(application layer)
      • 负责直接面向用户。
      • 该层协议举例:HTTP、FTP、DNS、SNMP 。
      • 应用层的程序通常提供了 GUI 页面供用户操作。比如 Web 浏览器采用 HTTP 协议传输数据,会显示美观的网页。
    • 表示层(presentation layer)
      • 负责处理数据格式。比如数据的编码与解码、压缩与解压、加密与加密。
      • 很少有程序专门设计了表示层来处理数据,因此该层的协议也少。
    • 会话层(session layer)
      • 负责建立并维持两个主机之间的网络会话,从而方便多次通信。建立会话时可能还需要身份认证、授权。
      • 该层协议举例:SSL、SOCKS、RPC 。
    • 传输层(transport layer)
      • 负责在两个主机之间传输数据。
      • 该层协议主要是 TCP、UDP 。
      • 用户直接使用网络层就能传输数据,而增加传输层是为了控制通信效率、通信质量。
    • 网络层(network layer)
      • 负责连通不同局域网的主机,能进行路由选择、分组转发。
      • 该层协议主要是 IP 。
      • 通信子网中的结点通常工作在最下面三层,比如路由器工作在网络层。
    • 数据链路层(data link layer)
      • 负责连通两个主机之间的网络信道,从而能传输数据。
      • 细分为两个子层:
        • 逻辑链路控制(Logical Link Control ,LLC)子层:负责控制逻辑信道。
        • 介质访问控制(Medium Access Control,MAC)子层:负责控制物理信道。
      • 该层协议主要是以太网,以帧(frame)为单位传输数据,能进行 MAC 寻址、差错控制。
    • 物理层(physical layer)
      • 负责在双绞线、光纤等传输介质中,以比特(bit)为单位传输数据。不考虑寻址,只管把数据沿着物理信道传输。