开放系统互连( Open Systems Interconnect model),又被成为7层模型、OSI模型,描述了网络工作所需的独立功能。
它设置了7层独立的模型来保证电脑间的交流。
就像汽车通过各种模型组合来保证汽车运行一样:电池为电子设备供电,交流发电机为电池充电,发动机使转动轴旋转,车轴将转动轴旋转传递给车轮等等。
每一部分都能独立的替换或者加工,只要每一步能运行,汽车就能动起来。
OSI模型分成了7层,每一层都完成特定的功能。当组合在一起时,每一个特定功能都有助于实现电脑之间数据的交流。
后面的部分,我们重点关注OSI模型的每一层以及它们对应的功能。
OSI 第一层:物理层
OSI的物理层主要用来传输比特——构成计算机代码的0和1。
这一层主要是两个节点之间传输的物理媒介。举例来说就是各种电缆。不过也不用太过于纠结“物理”这一词。物理层命名于1970年,这一概念远远早于网络无线技术。类似于WIFI,尽管它不是物理的或者有形的存在,但它仍然是物理层。
简单来说,物理层就是在两个节点之间任意携带0和1的介质。
数据在“线路”上的形式根据不同的媒介变得不同。比如以太网,比特以电脉冲的形式传输。WIFI的比特是以电波的形式传输。光纤则是以光脉冲的形式传输。
除了物理电缆,中继器和集线器也在这一层运行。
中继器只是将信号从一个媒介传输到另一个媒介,允许一系列电缆串接在一起,增强信号的范围从而超出单个电缆的限制。这常常用在大型WIFI的部署上,单个wifi在不同的接入点“重复”覆盖来扩大信号范围。
集线器是多个端口的集线器。如果四台设备连接到一个集线器,则一台设备发送的任何内容都会重复给其他三台设备。
OSI 第二层:链接层
OSI的链接层负责为物理层提供接口。实际上,第二层将bit传输到线路上,或者从线路上拉取bit。
Network Interface Card (NIC)为链接层提供处理插入的网线的能力。它能从电线上收到信号,也能将信号传输到电线上。
WIFI的NIC工作方式相同,接收和发射电波,并将其解释为0和1。
链接层将0和1组成的块成为“帧”。
链接层一个被称为MAC地址(Media Access Control)的地址系统。MAC地址在每个NIC内都是独一无二的。生产商为每个NIC预设了MAC地址。事实上,它有时也被成为BIA(Burned In Address)。
除了NIC,交换机也在这层运行。交换机的职责是促进网络之间的交流。
链路层的首要功能是将数据包从一个NIC传送到另一个。
OSI 第三层:网络层
OSI的网络层负责数据包端到端的数据传递。换句话说,就是将数据包从一跳(hop)传送到另一跳。
它通过另一种寻址方案实现这一点,它可以有逻辑的精确识别互联网的每一个节点。这种寻址方案被称为IP(Internet Protocol address)地址。
之所以说它是有逻辑地是因为IP地址不是计算机的一个永久标识。不同于MAC这样的物理地址,生产商不会将IP地址焊在计算机硬件设备上。
路由是在OSI第三层运行的网络设备。路由的作用是保证网络之间的交流。路由创造了两个网络的边界。为了保证和不在你网段内的任意设备交流,必须使用路由。
OSI 第二层 vs 第三层
理解链接层和网络层之间的协作和区别对于弄清两个电脑之间数据流动至关重要。例如:我们在第二层NIC上已经有了唯一的地址(MAC),为什么我们还需要在第三层存在另一个地址(IP)。
答案是两个地址方案完成不同的任务:
- 链接层的MAC地址完成的是跳对跳之间数据包的传输
- 网络层的IP地址完成的是端对端之间数据包的传输
当电脑发送一条数据,它封装在一个包含源IP地址和目标IP地址等信息的IP报头(IP Header)中。
IP报头和数据被封装在MAC地址报头中,该报头将包括通往最终目的地的路径中当前“跳”的源MAC地址和目报MAC地址等信息。
参考下图:
注意在两个路由之间,MAC地址的报头从数据包剥离又重新生成来达到下一跳。IP地址报头从电脑端生成,在达到另一个端电脑这一目的地后才剥离。因此才说IP报头是端对端,MAC报头是跳对跳。
OSI 第四层:传输层
OSI的传输层为了区分网络流。
任何时间用户都可能会打开浏览器,里面正在播放音乐,同时聊天软件也在运行。每个应用都在互联网上接收和发送数据,这些数据都会以0和1的形式到达NIC。
某些东西为了区分哪些0和1属于聊天软件,哪些属于音乐软件。“某些东西”就是第四层:
传输层的地址方案是使用端口号。
具体来说,有两种方法来区分存在的网络流——TCP和UDP。
不管是TCP还是UDP都有65536个端口,唯一应用程序流是有源端口和目标端口(以及它们的源IP和目标IP地址)来确定。
总结一下,链接层是跳对跳,网络层是端对端,传输层是服务对服务。
OSI 第五层,第六层,第七层
OSI模型的会话层,表示层,应用层是数据在网络传输过程中展示给用户的最后一步。
从纯粹的网络工程角度来看,5,6,7三层的区别不是非常的明显。实际上,还有另一种流行的模型叫TCP/IP模型,它将这三层组织成一个单独的层。
许多网络工程师将这些层简称为L57或者L5L7层。当然,这部分不是本文的重点,我们继续说。
封装和解封
在我们结束OSI模型之前,我们还需要讨论一下封装和解封的问题。它是指数据发送时如何从顶层到底层(应用层——物理层),以及接受时如何从底层到顶层。
在数据转换为1和0并且发送到电线之前,数据一层一层的进行处理,并且每一层都要添加它所需的相应的信息,比如:
- 传输层需要添加TCP报头,它包括源和目标的端口号
- 网络层需要添加IP报头,它包括源和目前的IP地址
- 链接层需要添加MAC报头,它包括源和目标的MAC地址
在接收端,每一层都会剥离报头信息,并且数据会一直向上进入到应用层的堆栈中。这是整个流程:
注意这只是个例子,添加的报头取决于底层的通讯协议。举个例子,UPD的报头在第四层添加,IPv6的报头在第三层添加。
无论哪种方式,重要的是要了解当数据通过线路发送时,它会向下传递堆栈,并且每一层都会添加自己的报头以帮助它实现其目标。在接收端,当数据被发送回应用层时,报头被逐层剥离