谈到HTTP协议,经常会遇到有关四层
与七层
的相关话题,那么他们之间的区别到底是什么呢?
其实我们常说的四层
与七层
分层,对应的分别是:
- 四层:TCP/IP 网络分层模型
- 七层:OSI 网络分层模型
TCP/IP 网络分层模型
TCP/IP协议是目前网络上的通讯标准,它的设计者非常聪明,创造性的提出了"分层"的概念,把复杂的网络通信划分出了多个层次,再给每一个层次分配不同的职责,层次内只专心做自己的事情就好,下面是TCP/IP的协议栈的层次图:
TCP/IP协议总共有四层,"从下往上",分别是:
- 第一层:"链接层"(link layer),负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标记网络上的设备,所以有时候也叫 MAC 层。
- 第二层:"网际层/网络互连层"(internet layer),IP 协议就在这一层。因为 IP 协议定义了" IP 地址"的概念,所以就可以在"链接层"的基础上,用 IP 地址取代 MAC 地址,把许许多多的局域网、广域网连接成一个虚拟的巨大网络,在这个网络里找设备时只要把 IP 地址再"翻译"成 MAC 地址就可以了。
- 第三层:"传输层"(transport layer),这个层次协议的职责是保证数据在 IP 地址标记的两点之间"可靠"的传输,是 TCP 协议工作的层次,另外还有它的一个"小伙伴" UDP。
TCP 是一个有状态的协议,需要先与对方建立连接,然后才能发送数据,而且保证数据不丢失不重复。而 UDP 则比较简单,它无状态,不用事先建立连接就可以任意发送数据,但不保证数据一定会发到对方、两个协议的另一个重要的区别在于数据的形式。TCP 的数据是连续的"字节流",有先后顺序,而 UDP 则是分散的小数据包,是顺序发,乱序收。 - 第四层:"应用层"(application layer),由于上三层把基础打的非常好,所以这一层就“百花齐放”了,有各种面向具体应用的协议。例如 Telnet、SSH、FTP、SMTP 等等,当然还有我们的HTTP。
MAC 层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。
OSI 网络分层模型
OSI:全称“开放式系统互联通讯参考模型”(Open System Interconnection Reference Model)。TCP/IP 发明于 1970 年代,当时除了它还有很多其他的网络协议,整个网络世界很混乱,这时候国际标准组织(ISO)注意到了这种现象,为了“统一”,于是设计出了新的网络分层模型,想用这个新框架统一各种网络协议。
OSI 模型分七层,部分层次和 TCP/IP 很像,从下到上分别是:
- 第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
- 第二层:数据链路层,相当于 TCP/IP 的链接层;
- 第三层:网络层,相当于 TCP/IP 的网际层;
- 第四层:传输层,相当于 TCP/IP 的传输层;
- 第五层:会话层,维护网络中的连接状态,即保持会话和同步;
- 第六层:表示层,把数据转换为合适、可理解的语法和语义;
- 第七层:应用层,面向具体的应用传输数据;
OSI 分层模型在发布的时候就明确的表明是一个“参考”,不是强制标准。TCP/IP 是一个纯软件的栈,没有网络应有的最根基的电缆、网卡等物理设备的位置,而 OSI 则补足了这个缺失,在理论层面上描述网络更加完整。
两个分层模型的映射关系
- 第一层:物理层,TCP/IP 里无对应;
- 第二层:数据链路层,对应 TCP/IP 的链接层;
- 第三层:网络层,对应 TCP/IP 的网际层;
- 第四层:传输层,对应 TCP/IP 的传输层;
- 第五、六、七层:统一对应到 TCP/IP 的应用层。
所以你看,这就是“理想与现实”之间的矛盾。理想很美好,有七层,但现实很残酷,只有四层,“多余”的五层、六层就这样“消失”了。
但这也有一定的实际原因,OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。例如,HTTP 协议就同时包含了连接管理和数据格式定义。
TCP/IP 协议栈的工作方式
- 发:HTTP 协议的传输过程就是这样通过协议栈逐层向下,每一层都添加本层的专有数据,层层打包,然后通过下层发送出去。
- 收:接收数据则是相反的操作,从下往上穿过协议栈,逐层拆包,每层去掉本层的专有头,上层就会拿到自己的数据。
- 说明:下层的传输过程对于上层是完全“透明”的,上层也不需要关心下层的具体实现细节,所以就 HTTP 层次来看,它不管下层是不是 TCP/IP 协议,看到的只是一个可靠的传输链路,只要把数据加上自己的头,对方就能原样收到。
补充
- 二层转发:设备工作在链路层,帧在经过交换机设备时,检查帧的头部信息,拿到目标mac地址,进行本地转发和广播。
- 三层路由:设备工作在ip层,报文经过有路由功能的设备时,设备分析报文中的头部信息,拿到ip地址,根据网段范围,进行本地转发或选择下一个网关。
- DNS 协议工作在应用层,因为网络请求的第一步是域名解析。
- CDN工作在应用层,因为CDN是“内容分发网络”,要看到内容就必须在应用层。