TCP/IP分层模型与数据的封装、分用

互联网刚起步时,ISO标准化了OSI协议
OSI根据互联网的功能需求划分了OSI7层模型,通过分层,复杂的网络协议更加简单化
由于各种原因,OSI没有被实现,取而代之的是TCP/IP协议族,OSI协议称为OSI参考模型

TCP/IP协议族是为了互联网通信而开发,参考OSI模型,TCP/IP也有对应的分层模型

TCP/IO分层模型

TCI/IP模型分层包括

  • 应用层(DNS、HTTP、SSH等)
  • 传输层(TCP、UDP、UDP-Lite等)
  • 网络层(IP、ICMP、ARP等)
  • 链路层
  • 物理层

图解TCP/IP中有一图如下

传输层及其以下的机制由内核提供,应用层由用户进程提供
通过对应的 socket API 我们可以编写自己的应用程序

各层协议的详细说明请移步我的其他博文

封装与分用

主机间通信通过各个协议层协同完成

封装

源主机发送信息到目的主机,数据是从应用层流向物理层,到达目的主机后又流向应用层的
在从一层流向下一层的过程中,上层会根据协议添加自己的标志信息
这样一层一层对数据添加部首的过程称作数据的封装
到达目的主机后,即可将部首中的“上层协议字段”交给“上层协议”进行处理

图解TCP/IP中有一图如下

其中,数据在不同层有不同的叫法

  • 传输层:段 段=传输层部首信息+应用层数据
  • 网络层:数据报=网络层部首信息+段(来自传输层的数据)
  • 链路层:帧=链路层部首信息+数据报(来自网络层的数据)

分用

以链路层为例
目的主机在网络层在收到链路层传上来的帧时,分析帧部首
帧的部首中有一个标志位为「类型」
类型的值说明了帧的数据是IP数据报、ARP数据报还是RARP数据报
根据该标志位,网络层就知道使用哪种协议去处理帧

这样的上层协议根据部首信息对数据分类处理的过程叫做分用

分用举例

以下以局域网内「源主机与目的主机间通信在链路层的处理过程」为例

部首与数据包

报头报文校验位
目的地址(6byte)源地址(6byte)类型(2byte)数据(46~1500byte)校验位(4byte)
  • 地址:MAC地址
  • 类型
    • 值为0800:此时数据包是「IP数据报」
    • 值为0806:此时数据包是「ARP数据报」
    • 值为0835:此时数据包是「RARP数据报」

值得强调的是:后两种类型长度恒为28字节,因此数据包后面要补位(18byte)

链路层分用的具体例子如下

需要注意的是:
网关内的数据传输是面向无连接的,即信息不是点对点传输的
网关内所有主机都会收到数据,根据各层判断部首判断自己是否是目的主机

第一种情况:源主机知道目的主机的IP地址,但不知道MAC地址

则源主机在链路层封装的部首中信息中

  • 类型:0806
  • 目的地址:全为1(广播地址)

经过物理层信息的传递,每个主机都会在链路层看到该数据
主机发现目的地址是广播地址不会直接丢弃
发现类型为ARP请求类型,则将数据传递给网络层由ARP协议处理
此时又会有两种情况

  • 网络层发现IP地址与本机不匹配,丢弃
  • 网络层发现IP地址与本机匹配,发送ARP应答包传回源主机

第二种情况:源主机知道目的主机的MAC地址

部首中「类型」值为0800,「目的地址」值为对应MAC地址
目的主机接到信息后,地址匹配,则将数据传递给网络层
非目的主机的链路层接到信息后,发现目的地址(MAC)与本机MAC地址不一致,丢弃

RARP不再赘述
以上过程即为网络中分用的过程

则源主机在链路层封装的部首中信息中

  • 类型:0800
  • 目的地址:对应的MAC地址

经过物理层信息的传递,每个主机都会在链路层看到该数据
非目的主机发现目的地址与自身不匹配会直接丢弃
目的主机继续解析,发现类型为IP数据报,则将数据传递给网络层由IP协议处理

这样,根据部首信息目的主机做不同处理,即为分用