🗒️网络分层模型

四层、七层

1. TCP/IP 网络分层模型

TCP/IP 协议是目前事实上的网络通信标准,非常经典,研究它的实用价值很大。

TCP/IP 协议栈如下:

说明
数据包的传输单位

应用层

HTTP, Telnet, SSH, FTP, SMTP 等

message,消息或报文

传输层

保证数据在两个 IP 地址间传输 最经典的三次握手四次挥手

segment,段

IP 层

用 IP 地址取代 MAC 地址

把许多局域网、广域网连接成一个虚拟的巨大网络

packet,包

MAC 层

工作在网卡层

使用 MAC 地址来标记网络上的设备

frame,帧

  1. 在应用层,提供 scheme 和 port

    • 比如:底层的 TCP 通常是通过 network socket interface 向 application 提供 network connection 的抽象,而 TCP 会在 transport layer 处理所有 handshaking 和 transmission 细节

  2. 在传输层,通过 port 进行寻址,识别同一计算机中同时通信的不同应用程序

    • TCP,Transmission Control Protocol,传输控制协议。有状态,面向连接

      • socket address [transport protocol, IP address, port number]

    • UDP,User Datagram Protocol,用户数据报协议。无状态,不用事先建立连接

      • 数据是分散的小数据包,顺序发、乱序收

  3. 在 IP 层(网际层),通过 IP 地址来寻找网络中互连的主机或路由器

    • IP,Internet Protocol,网际协议

    • IP packet 可能会 lost、duplicated 或乱序,由于以下原因:

      • network congestion(网络拥塞)

      • traffic load balancing(流量负载平衡)

      • 其它不可预测的网络行为。

  4. 在 MAC 层(链路层),通过 MAC 地址来寻找局域网中的主机

    • MAC 地址,Media Access Control Address,也称局域网地址

    • 它可以唯一地标识一个网卡,进而同时标识了此网卡所属的设备

真正进行端到端通信的实体是主机中的两个进程,即一个主机中的进程 A 与另一个主机中的进程 B 在交换数据。IP 协议负责把数据报文送到目的主机,传输层的协议负责交给主机中的具体应用进程。

2. OSI 网络分层模型

OSI,Open System Interconnection Reference Model,开放式系统互联通信参考模型。

OSI 分层模型在发布时就明确表明这是一个参考,而不是强制标准。

编号
说明

第一层

物理层

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

第二层

数据链路层

基本相当于 TCP/IP 的 Mac 层

第三层

网络层

相当于 TCP/IP 里的 IP 层

第四层

传输层

相当于 TCP/IP 里的传输层

第五层

会话层

维护网络中的连接状态, 即保持会话和同步

第六层

表示层

把数据转换为合适的可理解的语法和语义

第七层

应用层

面向具体的应用传输数据

增加了物理层,细化了应用层。

OSI 补足了电缆网卡等物理设备的位置,让网络通信在理论层面更完整,而 TCP/IP 是个纯软件的栈。

OSI 为每层标记了明确了编号,从一层到七层,方便日常交流。比如:

  • 七层负载均衡,是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器

  • 四层负载均衡,是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡

  • 三层路由,是指设备工作网络层,当数据包经过有路由功能的设备时,设备会分析头部信息,拿到 IP 地址,根据网段范围进行本地转发或选择下一个网关

  • 二层转发,是指设备工作在链路层,当数据包在经过交换机设备时,设备会检查头部信息,拿到目标 MAC 地址和端口,进行本地转发和广播,进而决定往哪里转发

3. 映射关系

OSI 在四层以上分得太细了,因为 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系得很紧密,很难分开。比如 HTTP 协议就同时包含了连接管理和数据格式定义。

4. TCP/IP 协议栈的工作方式

TCP/IP 协议栈核心的数据传输过程大约如下:

先忽略很多 TCP/IP 协议里的细节,比如建连、路由、数据切分与重组、错误检查等

HTTP 利用 TCP/IP 协议栈逐层打包再拆包,实现了数据的传输,但下面的细节并不可见。下层的传输过程对于上层是完全透明的,上层也不需要关心下层的具体实现细节,每层只要在数据里加上自己的专有头,对方就能原样收到。

4.1 TCP

TCP,Transmission Control Protocol,传输控制协议。

  • TCP 提供 reliable、ordered、error-checked 的八位字节流传输

  • TCP 是 connection-oriented,在发送 data 前 client 和 server 间的 connection 需建立好

  • 确保 reliability(可靠性)的手段:(有状态,但增加了 latency 延迟)

    • three-way handshake:三次握手

    • ACK + retransmission:确认 + 重传

    • error detection:错误检测

关于 TCP 的三次握手、四次挥手,以及与之相关的 TCP 状态和 TCP 报文段首部,详见输入 URL 并按下回车之后的数据传输全过程

4.2 IP

IP,Internet Protocol,网际协议。

IP packets 可能会 lost、duplicated 或乱序,由于 network congestion(网络拥塞)、traffic load balancing(流量负载平衡)、不可预测的网络行为。

3. 主要参考

Last updated