杂谈 · · By/蜜汁炒酸奶

网络通信模型简记

关于网络协议分层,网上有很多文章整理了,但有时看到一层命名有多种,故同时想找一下比较权威的具体出处。这里仅是作为自己学习的一个记录整理。

关于分层模型的命名,同一功能的层级可能存在多种名称。看了多篇之后,本文记录的七层协议与五层协议模型以《计算机网络:自顶向下方法》中的为准,TCP/IP协议四层分层以[rfc1122]为准,很多教材中将 Transport Layer 中译为 运输层,这里使用了平时常说的名称 传输层。

优先附上几种常见分类的基础对比图:

01_comn_OSI_Model01.png

2.1 因特网(Internet)协议栈-五层模型

因特网模型协议栈( The Internet protocol stack), 也有地方叫 TCP/IP协议套件(TCP/IP protocol suite),该协议栈目前能找到的最早记录在由五层组成:物理层(Physical Layer)、 链路层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer)。

全网查了一下,RFC中关于TCP/IP模型的文中没看到明确的物理层定义,目前能找到的最早提出该分层的出处源自《《计算机网络:自顶向下方法》(James F. Kurose, Keith W. Ross, Computer Networking: A Top-Down Approach, 2008 ISBN 0-321-49770-8)

2.1.1 物理层

网络的物理形式,例如电缆、光纤、网卡、集线器等等。

物理层处理的数据是比特(bit)、符号(symbol)。将数字信号转换成电信号、无线电信号或光信号。

链路层的任务是将整个帧从一个网络元素移动到另一个网络元素,而物理层的工作是将该帧中的各个比特(the individual bits)从一个节点移到下一个节点。

该层中的协议依旧依赖链路层,并进一步依赖于链路的实际传输介质(例如:双绞铜线、单模光纤),例如以太网 (Ethernet) 有很多物理层协议: 用于双绞铜线的、用于同轴电缆的、 用于光纤的,等等。在每种情况下,在链路上移动一个比特都是以不同的方式进行的。

2.1.2 链路层(Link Layer)

链路层,也称为数据链路层,该层处理的数据包(有的教科书也会中译为分组,这里统称数据包)被称为帧(frame)。

链路层负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。

Internet 的网络层通过源和目标之间的一系列路由器 路由 数据报。 为了将数据包从一个节点(主机或者路由器)移动到路由中的下一个节点,网络层依赖于链路层的服务:

  • 在每个节点,网络层将数据报向下传递到链路层,链路层将数据报沿路由传送到下一个节点。
  • 在这个下一个节点,链路层将数据报向上传递到网络层。

链路层提供的服务取决于该链路上采用的特定链路协议。链路层协议的示例包括以太网(Ethernet)、WiFi 和有线接入网络的 DOCSIS 协议。

  • 一些链路层协议提供从发送节点通过一条链路到接收节点的可靠传输。
  • 这种可靠传送服务不同于 TCP 的可靠传送服务,后者提供从一个端系统到另一个端系统的可靠传送。

由于数据报通常需要遍历多条链路才能从源传输到目的地,因此数据报可能会在沿其路由的不同链路上由不同的链路层协议处理。例如,数据报可能在一条链路上由以太网处理,而在下一条链路上由 PPP 处理。

之后网络层将从每个不同的链路层协议接收不同的服务。

VLAN是该层的一个网络协议,通过在以太网协议头部添加tag实现了广播域的隔离。

2.1.3 网络层

IP 协议就处在这一层。因为 IP 协议定义了“IP 地址”的概念,所以就可以在“链接层”的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再“翻译”成 MAC 地址就可以了。

网络层负责处理的该层数据包称为数据报(datagram),该层负责将数据报(datagram)从一台主机移动到另一台主机。

源主机中的 Internet 传输层协议(TCP 或 UDP)将传输层的报文段和目标地址传递到网络层。然后,网络层提供将报文段传送到目标主机中的传输层的服务。

该网络层包含著名的IP协议,它定义了数据报中的字段以及终端系统和路由器如何处理这些字段。

IP协议只有一种,所有具有网络层的 Internet 组件都必须实现该协议。

Internet 的网络层还包含路由协议,用于确定源与目的地之间采用的路由, 该层存在多种路由协议。

Internet 是一个由网络组成的网络,在一个网络中,网络管理员可以运行任何所需的路由协议。网络层虽然包含IP协议和众多的路由协议,但通常简称为IP层,反映了IP是将互联网连接在一起的黏合剂。

2.1.3.1 关于 IP协议

IP 是一种无连接或数据报互联网络服务,不提供端到端交付保证。因此,IP 数据报可能会损坏、重复、无序或根本没有到达目标主机。

  • IP 之上的层负责在需要时提供可靠的交付服务。
  • IP 协议包括对寻址、服务类型规范、分段和重组以及安全信息的规定。
  • IP 协议的数据报或无连接特性是 Internet 体系结构的基本特征。
  • Internet IP 是 OSI 无连接网络协议 的模型。

ICMP 是一种控制协议,被认为是 IP 的一个组成部分,尽管它在架构上分层在 IP 之上,即它使用 IP 来端到端地传输其数据,就像 TCP 或 UDP 等传输协议一样。

  • ICMP 提供错误报告、拥塞报告和第一跳网关重定向。
  • IGMP 是一种 Internet 层协议,用于为 IP 多播建立动态主机组。

2.1.4 传输层

传输层在应用程序端点之间传送应用层报文,为应用程序提供端到端的通信服务,该层的数据包称为报文段(segment)。

该层次协议的职责是保证数据在 IP 地址标记的两点之间“可靠”地传输,目前有两种主要的传输层协议:传输控制协议 (TCP) 和 用户数据报协议 (UDP) ,两者都能传输应用层的报文段。

  • TCP: 向应用程序提供了一种可靠的面向连接的传输服务,可提供端到端的可靠性、重新排序和流量控制。是一个有状态的协议,需要先与对方建立连接然后才能发送数据,而且保证数据不丢失不重复。
    • TCP 将长报文划分为短报文,并提供阻塞控制机制,以便在网络拥塞时,源端点限制其传输速率。
  • UDP :为其应用程序提供无连接服务。它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方,没有可靠性、没有流量控制。
  • 两者另一个重要区别:TCP 的数据是连续的“字节流”,有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收
  • TCP的开销高于UDP,性能低于UPD,但使用TCP可以保证数据的正确性、顺序性和不可重复性,对应业务应用的通信,TCP是更合适的选择。

2.1.5 应用层

应用层是网络应用及它们的应用层协议存留的地方。该层本质上结合了OSI参考模型的表示层和应用层的功能。由于 IP 协议栈没有定义应用层和传输层之间的层,因此应用层必须包括任何与 OSI 的表示层和会话层协议类似的协议。这通常是通过库来完成的。

应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换信息数据包。这种应用层的信息数据包称为报文(message)。

该层区分了两类应用层协议:直接向用户提供服务用户协议和提供通用系统功能的支持协议

下面是一些常见的用户协议,除了这些还有许多其他标准化的用户协议和许多私有用户协议,这里暂不列举了:

  • Telnet(远程登录)
  • FTP(文件传输,用于支持两个端系统之间的文件传送)
  • SMTP(电子邮件传递,用于支持电子邮件报文的传输)
  • HTTP (超文本传输协议,用于支持了Web文档的请求和传送)
    • HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据传输。
    • 应用层与传输层中间有一个Socket抽象层(即如UNIX域套接字),该层是应用层与TCP/IP协议族通信的中间软件抽象层,是它的一组接口。应用层信息通过Socket从用户态传到内核态的传输层。

用于主机名映射、引导和管理的支持协议包括 SNMP、BOOTP、RARP 和域名系统 (DNS) 协议。

  • DNS :域名系统(特定的应用层协议),用于将baidu.com这些容易记忆的域名转换为32比特的网络地址。

2.1.6 封装

在每一层,一个数据包具有两种类型的字段:头字段(header fields)和有效载荷字段(payload field),有效载荷通常来自上一层的数据包,头字段来自当前层。

比如最简单的情境下:

  • 在发送主机端,一个应用层报文(application-layer message)被传输到传输层,传输层收取到报文并附上附加信息(即,传输层的头字段),该头字段将被接收端的传输层使用。应用层的报文和传输层的头字段一起构成了传输层报文段(transport-layer segment)。传输层报文段因此封装了应用层报文,其附加的信息也许包含下列信息:
    • 允许接收方传输层将消息向上传递给适当的应用程序的信息
    • 允许接收方确定消息中的位(bits)是否已在路由中更改的错误检测位(error-detection bits)
  • 网络层添加如源和目标端系统地址等网络层头信息,生成了网络层数据报(network-layer datagram)。
  • 链路层增加自己的头信息并生成链路层帧(link-layer frame)。
  • 其实应用层报文(application-layer message)本身也是将相应信息和应用层的头信息一起封装后得到的。

2.2 OSI模型-七层模型

20世纪70年代后期,国际标准化组织(ISO)定义的OSI模型(OSI,全称 Open System Interconnection Reference Model ,开放式系统互联通信参考模型)。该模型有7层,定义了不同计算机之间实现互联的标准,是网络通信的基本框架。

TCP/IP 发明于 1970 年代,当时除了它还有很多其他的网络协议,整个网络世界比较混乱。ISO基于这种情况提出的OSI模型,想用这个新框架来统一既存的各种网络协议,但TCP/IP等协议已经在许多网络上实际运行,想推翻重来是不现实的,所以该模型提出时便明确表明是个参考模型,不是强制标准。

TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置(即物理层)。而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。

OSI模型将网络通信分为:物理层、数据链路层、网络层、传输层、会话层(session layer)、表示层(presentation layer)和应用层。其中5层的功能与它们类似命名的Internet协议对应层的功能大致相同。这里简单说一下另外两个附加层:表示层和会话层。

因特网缺少了这两层,不是因为这两层提供的服务不重要,而是将其交给了应用程序开发者处理。如果不重要则舍去,重要的服务需要开发者在应用程序中构建该功能。

2.2.1 会话层(Session layer)

会话层维护网络中的连接状态,即保持会话和同步。该层提供了数据交换和同步功能,包括建立检查点和恢复方案的方法。

Layer capturing crashed operating system memory cores over a network

  • ONC-RPC: Remote procedure calls using Sun’s RPC mechanism
  • DCE/RPC: Remote procedure calls using the OSF’s RPC mechanism
  • HTTP: Hyper Text Transfer Protocol: (and other files as well). Probably the best known protocol as it is used to allow users surfing on the Internet.
  • SMTP: Simple Mail Transfer Protocol: send mails to a mail server

来源Internet (TCP/IP) protocol family

2.2.2 表示层(Presentation layer)

表示层的作用是提供使通信的应用程序能够解释所交换数据的含义的服务,即把数据转换为合适、可理解的语法和语义。

MIME: content encoding (for HTTP, SMTP, …) (RFC 2045-2049)

这些服务包括数据压缩和数据加密(自解释的,which are self-explanatory)以及数据描述(这使得应用程序不必担心在各台计算机中标示/存储数据的内部格式不同的问题)

最后放一张来自网络的讲的比较详细的流程图:

01_comn_OSI_Model02.png

2.3 TCP/IP 四层模型

在 [RFC 1122]中,该模型也称为 Internet protocol suite,并明确说了该模型包含的四层:链路层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer)。

目前看到有些地方会将第一层的 链路层,叫做 网络接口层(Network interface),这一名称在[RFC 871]中的三层模型时出现过,到了[RFC 1122]的四层时已经被链路层(Link Layer)取代。在四层等模型中,该名称目前主要是出现在一些教科书中,如 Dye, Mark; McDonald, Rick; Rufi, Antoon (October 29, 2007). Network Fundamentals, CCNA Exploration Companion Guide. Cisco Press. ISBN 9780132877435. Retrieved September 12, 2016 – via Google Books 等。

TCP/IP模型是20世纪70年代由美国国防部高级研究计划局(DARPA)创建的计算机网络协议规范。它为阿帕网(ARPANET)奠定了基础,阿帕网是世界上第一个广域网,也是因特网的前身。TCP/IP模型有时被称为因特网参考模型(the Internet Reference Model)、DoD模型(the DoD Model)或阿帕网参考模型(the ARPANET Reference Model)。

关于数据包:MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet,也即是Datagram,数据报),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。

这四层的功能与它们类似命名的Internet协议对应层的功能大致相同,这里不再赘述,仅将[RFC 1122]部分原文列出用于参考。

2.3.1 链路层(Link Layer): MAC

[RFC 1122原文节选]

To communicate on its directly-connected network, a host must implement the communication protocol used to interface to that network. We call this a link layer or media-access layer protocol.

There is a wide variety of link layer protocols, corresponding to the many different types of networks.

2.3.2 网络层(Internet Layer):IP

[RFC 1122原文节选]

All Internet transport protocols use the Internet Protocol (IP) to carry data from source host to destination host. IP is a connectionless or datagram internetwork service, providing no end-to-end delivery guarantees. Thus, IP datagrams may arrive at the destination host damaged, duplicated, out of order, or not at all. The layers above IP are responsible for reliable delivery service when it is required. The IP protocol includes provision for addressing, type-of-service specification, fragmentation and reassembly, and security information.

2.3.3 传输层(Transport Layer):IP+端口

[RFC 1122原文节选]

The transport layer provides end-to-end communication services for applications. There are two primary transport layer protocols at present:

  • Transmission Control Protocol (TCP)
  • User Datagram Protocol (UDP)

2.3.4 应用层(Application Layer):

[RFC 1122原文节选]

The application layer is the top layer of the Internet
protocol suite. The Internet suite does not further subdivide the application layer, although some of the Internet application layer protocols do contain some internal sub-layering. The application layer of the Internet suite essentially combines the functions of the top two layers – Presentation and Application – of the OSI reference model.

相关名词含义

  • 二层转发 :指数据链路层,工作在二层的设备,通过查找到目标MAC地址, 进行本地转发和广播((i.e交换机))。
  • 三层路由 :指网络层,工作在三层的设备,通过解析数据包头信息,找到目标IP地址,转发数据(i.e路由器)。
  • 四层负载均衡 :指工作在传输层上, 基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡(例如基于IP+端口的负载均衡)。
    • 以常见的 TCP 为例,负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器。TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
    • 实现四层负载均衡的软件有:
      • F5:硬件负载均衡器,功能很好,但是成本很高
      • lvs:重量级的四层负载软件
      • nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
      • haproxy:模拟四层转发,较灵活
  • 七层负载均衡 :指工作在应用层上,基于虚拟的 URL 或主机 IP 等的负载均衡。看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器。
    • 负载均衡和前端的客户端以及后端的服务器会分别建立 TCP 连接
    • 实现七层负载均衡的软件有:
      • haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移
      • nginx:只在 http 协议和 mail 协议上功能比较好,性能与 haproxy 差不多
      • apache:功能较差
      • Mysql proxy:功能尚可
  • 大二层 :IP地址的分层概念,将IP地址与位置信息固定住了,通过特定技术如VXLAN实现扁平化IP地址管理,将IP地址不再与特定的Site(某个数据中心)强行绑定在一起。这属于网络工程师层面的问题,本文不再深入。

参考资料

评论已关闭

example
C
蜜汁炒酸奶

当前处于试运行期间,可能存在不稳定情况,敬请见谅。

欢迎点击此处反馈访问过程中出现的问题