Contents

【计算机网络】五层模型

这是新开的一个系列,用于记录一些计算机网络相关知识的学习过程,这篇文章讲解了计算机网络的五层模型

前言

我已经学习过一次计算机网络了,最近在找工作的时候,别人问起我来,才发现自己掌握的不大好,因此就有了重新复习一波,并且写博客记录一下的想法。

一般来说,我们会把计算机网络分为五层,每一层都有自己要解决的问题。我在复习的过程中,会以问题为导向进行学习。明确协议所在的层次,围绕当前层次需要解决的问题进行回答。除此之外,我们学习的重点是传输层协议,即TCP/UDP协议,对于其他层次的学习,以大体认知、介绍、了解为主。


当然,我也不是大佬,可能会有很多地方理解的不透彻,甚至存在谬误,你可以通过:

  • 微信:OverUniverseWANG
  • QQ:1823738952
  • 邮件:wangsaiyu@cqu.edu.cn

的方式联系我,进行交流或是勘误,在核实后我会第一时间改正。

五层协议

五层协议分别是什么

1. 五层模型

五层协议更贴合实际使用,他们每一层都有自己明确的任务,从上到下,他们层层封装:

名称解决的问题代表协议
应用层定义数据的含义HTTP, SSH, FTP
运输层将数据从一个应用程序传输到另一个应用程序UDP, HTTP
网络层在复杂网络中,将数据从一台主机移动到另一台主机IP, ICMP
链路层在路径上,将数据从一个节点移动到路径上的下一个节点PPP, MAC
物理层怎么发0和1更安全不知道

这些概念在现在难以理解,可以带着问题继续向后看。

层与层的关系

从上面的图中可以看出,从应用层到物理层,数据被层层封装。从应用层的角度来看:

  • 应用层的通信需要依赖于更底层的协议:应用层无法完成通信的全部流程,需要将通信的任务下发给传输层进一步处理;
  • 应用层对底层协议的实现无感:应用层只需要调用底层协议提供的方法就可以完成通信,不需要关注通信如何完成,只需要关注数据格式的约定;

换而言之:五层协议中的每一层都通过封装底层实现的方法对上提供服务

一个小例子

背景

我希望有一个应用程序,能够远程遥控卧室的空调;因此我在家里装了一个树莓派,它上面可以运行linux操作系统,可以通过神奇的系统调用来对空调发送指令。我希望能够在快要下班前,在办公室打开家里的空调,等到回家后享受空调的冷风。

应用层设计

现在我们知道,树莓派能够操控空调了,那么我们希望树莓派能够听懂我说的话。于是我们约定:树莓派收到我发送的报文为 1 时打开空调,为0时关闭空调。

好的,我们完成了一个应用层协议,可以叫它CAC协议 (Control the Air Conditioner)

传输层

在应用层,我们解决了应该发送什么样的信息。但是很快我们发现:电脑里运行着很多程序!

是的,一个计算机会干很多事情,发送的报文要由哪个程序接收呢?传输层来了!

通过传输层,操作系统在接收到报文后,可以根据端口号进行分发。假设我的树莓派上的CAC控制程序运行在8080端口上,那么我只需要在办公室里面注明数据要发送到8080端口,我就可以和我的应用程序通信了!

网络层

2. 带有路由器的网络

有请路由器,我和我的树莓派并不是直接连接的,我们之间隔了好多的路由器。他们将网络分割成了很多的子网!我要怎么把数据发送给树莓派?

网络层协议通过为设备、路由器分配IP地址的方法,在网络中对设备进行区分。并且通过路由算法解决我和树莓派之间传送数据时,每一次转发应该如何进行的问题。

数据链路层

可惜的是,网络没有这么简单,真实的网络是复杂的。这个时候有请交换机出场。

3. 带有交换机的子网

是的,我和路由器之间也不是直接通过网线连接的。我和路由器之间、路由器与路由器之间,都有可能经过多个交换机。数据链路层为每个设备分配了一个MAC地址,在数据链路层中唯一标识一个设备,对于每个交换机,会维护到某设备的下一条应当转发给哪个端口,来解决数据从我到路由器的问题。

到此为止,所有数据发送的问题都已经解决,只需要快乐的调用物理层服务,就可以完成数据的发送了。当数据发送到树莓派上时,树莓派只需要对数据进行反向操作就可以逐层向上,获取数据了!