【计算机网络】五层模型
这是新开的一个系列,用于记录一些计算机网络相关知识的学习过程,这篇文章讲解了计算机网络的五层模型
前言
我已经学习过一次计算机网络了,最近在找工作的时候,别人问起我来,才发现自己掌握的不大好,因此就有了重新复习一波,并且写博客记录一下的想法。
一般来说,我们会把计算机网络分为五层,每一层都有自己要解决的问题。我在复习的过程中,会以问题为导向进行学习。明确协议所在的层次,围绕当前层次需要解决的问题进行回答。除此之外,我们学习的重点是传输层协议,即TCP/UDP
协议,对于其他层次的学习,以大体认知、介绍、了解为主。
当然,我也不是大佬,可能会有很多地方理解的不透彻,甚至存在谬误,你可以通过:
- 微信:
OverUniverseWANG
- QQ:
1823738952
- 邮件:
wangsaiyu@cqu.edu.cn
的方式联系我,进行交流或是勘误,在核实后我会第一时间改正。
五层协议
五层协议分别是什么
五层协议更贴合实际使用,他们每一层都有自己明确的任务,从上到下,他们层层封装:
名称 | 解决的问题 | 代表协议 |
---|---|---|
应用层 | 定义数据的含义 | HTTP , SSH , FTP |
运输层 | 将数据从一个应用程序传输到另一个应用程序 | UDP , HTTP |
网络层 | 在复杂网络中,将数据从一台主机移动到另一台主机 | IP , ICMP |
链路层 | 在路径上,将数据从一个节点移动到路径上的下一个节点 | PPP , MAC |
物理层 | 怎么发0和1更安全 | 不知道 |
这些概念在现在难以理解,可以带着问题继续向后看。
层与层的关系
从上面的图中可以看出,从应用层到物理层,数据被层层封装。从应用层的角度来看:
- 应用层的通信需要依赖于更底层的协议:应用层无法完成通信的全部流程,需要将通信的任务下发给传输层进一步处理;
- 应用层对底层协议的实现无感:应用层只需要调用底层协议提供的方法就可以完成通信,不需要关注通信如何完成,只需要关注数据格式的约定;
换而言之:五层协议中的每一层都通过封装底层实现的方法对上提供服务。
一个小例子
背景
我希望有一个应用程序,能够远程遥控卧室的空调;因此我在家里装了一个树莓派,它上面可以运行linux
操作系统,可以通过神奇的系统调用来对空调发送指令。我希望能够在快要下班前,在办公室打开家里的空调,等到回家后享受空调的冷风。
应用层设计
现在我们知道,树莓派能够操控空调了,那么我们希望树莓派能够听懂我说的话。于是我们约定:树莓派收到我发送的报文为 1
时打开空调,为0
时关闭空调。
好的,我们完成了一个应用层协议,可以叫它CAC
协议 (Control the Air Conditioner)。
传输层
在应用层,我们解决了应该发送什么样的信息。但是很快我们发现:电脑里运行着很多程序!
是的,一个计算机会干很多事情,发送的报文要由哪个程序接收呢?传输层来了!
通过传输层,操作系统在接收到报文后,可以根据端口号进行分发。假设我的树莓派上的CAC
控制程序运行在8080
端口上,那么我只需要在办公室里面注明数据要发送到8080
端口,我就可以和我的应用程序通信了!
网络层
有请路由器,我和我的树莓派并不是直接连接的,我们之间隔了好多的路由器
。他们将网络分割成了很多的子网!我要怎么把数据发送给树莓派?
网络层协议通过为设备、路由器分配IP
地址的方法,在网络中对设备进行区分。并且通过路由算法解决我和树莓派之间传送数据时,每一次转发应该如何进行的问题。
数据链路层
可惜的是,网络没有这么简单,真实的网络是复杂的。这个时候有请交换机出场。
是的,我和路由器之间也不是直接通过网线连接的。我和路由器之间、路由器与路由器之间,都有可能经过多个交换机。数据链路层为每个设备分配了一个MAC
地址,在数据链路层中唯一标识一个设备,对于每个交换机,会维护到某设备的下一条应当转发给哪个端口,来解决数据从我到路由器的问题。
到此为止,所有数据发送的问题都已经解决,只需要快乐的调用物理层服务,就可以完成数据的发送了。当数据发送到树莓派上时,树莓派只需要对数据进行反向操作就可以逐层向上,获取数据了!