网络知识体系(一) —— 网络分层模型
1984 年,ISO 发布了著名的 ISO/IEC 7498 标准,它定义了网络互联的七层框架,也就是开放式系统互联模型(Open System Interconnection Model,OSI,简称 OSI 模型)。
通常来讲,网络可以分为七层:物理层 - 数据链路层 - 网络层 - 传输层 - 会话层 - 表示层 - 应用层。其中,会话层和表示层可以归类到应用层中。
速记口诀:物联网叔会使用 (=,=)
1.物理层
考虑最简单的情况:两台主机之间进行通信,我们只需要一根网线把两台机器连接起来,规定好彼此的硬件接口,如都用 USB、电压 10V、频率 2.4GHz 等等,这一层就是物理层,这些规定就是物理层协议。
物理层
2.数据链路层
我们当然不满足只有两台电脑连接,因此我们可以用交换机把多台电脑连接起来,这样连接起来的网络,称为局域网,也可以称为以太网(以太网是局域网的一种):
交换机与局域网在局域网中,我们需要标识每台机器,这样才能指定要和哪台机器通信,这个标识就是硬件地址 MAC(Medium Access Control)。硬件地址在机器生产时就确定了,永久唯一。
在局域网中,我们想要和另外的机器通信时,只需要知道它的硬件地址即可。我们可以不管底层的网线接口如何发送,由交换机来帮我们选择机器,这一层就被称作数据链路层。
3.网络层
我们依然不满足局域网的规模,因此我们可以用路由器把多个局域网连接起来:
路由器
当网络规模越来越大,这时如果还用硬件地址来作为通信对象的唯一标识是不现实的,因为我们无法记住所有机器的硬件地址;并且,一个网络对象可能会频繁更换设备,这时硬件地址表维护起来会非常复杂。所以我们需要一个新的标识:IP 地址(Internet Protocol Address)。
有了 IP 地址,我们就可以在网络中进行通信了,只要在局域网中维护一份 IP 地址和 MAC 地址的映射表即可。这一层被称作网络层。
4.运输层
一个主机可以有多个进程,每个进程可以进行不同的网络通信。比如一边和女朋友聊微信,一边和朋友开黑,这时手机同时和两个不同的机器在进行通信。当手机收到数据时,如何区分是微信的数据,还是开黑的数据呢?做这一项区分任务的,被称为运输层:
运输层运输层通过 socket 将网络信息进一步拆分,不同的应用进程可以独立进行网络请求,互不干扰。这就是运输层的功能:提供进程之间的逻辑通信。这里的进程可以是主机之间的不同进程,也可以是同一个主机内部的不同进程。所以在 Android 中,socket 也可以用作进程间通信。
5.应用层
现在不同的机器上,应用进程之间可以独立通信了,我们就可以在计算机网络上开发出各种各样的应用,如网页的 HTTP(HyperText Transfer Protocol),文件传输 FTP(File Transfer Protocol)等等,这一层被称之为应用层。
应用层还可以进一步拆分出会话层、表示层,但他们的功能都是完成具体的业务需求。和上述四层相比,这两层不是必须的,可以归属到应用层中。
总结
网络分层模型- 最底层物理层,两个机器之间通过硬件进行通信
- 数据链路层使用硬件地址在局域网中进行寻址,实现局域网通信
- 网络层通过 IP 地址实现主机之间的通信
- 运输层在网络层的基础上,对数据进行拆分,实现应用进程间的网络通信
- 应用层在运输层的基础上,根据具体的需求开发业务功能。应用层可以进一步拆分出会话层、表示层。
网络分层并不是物理上的分层,而是逻辑上的分层。通过对底层逻辑的封装,使得上层的开发可以直接依赖底层的功能而无需理会具体的实现,简便了开发。
这种分层的思路,在设计模式中属于责任链模式,将不同的职责独立出来,对网络请求进行链式处理。