文章目录
- 协议分层的好处
- OSI七层网络模型
- TCP/IP五层网络模型
- 网络设备所在的分层(重点)
- 封装和分用
协议分层的好处
第一点:
在网络通信中,如果使用一个协议来解决所有的问题,那么这个协议就会非常的庞大,非常不利于去学习和理解,相比之下,就可以把大的协议拆分成多个小的协议,让每一个小的协议只关注某一个部分的工作,使每一个小的协议都不会太麻烦,这样也就达到了化繁为简。而在网络通信中,有太多太多的协议,为了方便管理,就对协议进行了分层,按照协议的作用分类,并且约定了不同层次的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持,这样就不容易混乱;
举个例子,比如说,在创业时,这时候就只需要老板一个人对所有员工进行管理即可,就不需要中层领导,随着公司的规模越来越大,老板管不过来了,这时候就需要有中层领导,当老板想要发布某个任务是,就不需要向底层的员工直接发布,只需要向中层领导发布,然后呢,中层领导就会向下再发布,最后到员工手里,这也就是刚才所说的,上层协议调用下层协议,下层协议给上层协议提供支持,这样在通信过程中,就会很容易的方便管理
第二点:
协议分层了之后,上层和下层彼此之间就进行了封装,使用上层协议,不必关注下层协议,使用下层协议,不必关注上层一些,每个协议就只关注自己本身的就可以了
类似于上图,在语言层,根本不需要理解通信设备是什么样的,我们只需要说话就行了,而在通信设备层,制造通信设备时,并不需要关心你使用什么语言说话,我只要把说的话给传达过去就行,只要会说话,就能打电话,大大降低了使用者的成本
第三点:
每一层协议都可以根据需要灵活的转换
例如上图,在通信设备层,我可以把电话替换成手机,该怎么打电话怎么说话都是一样的,并不会影响到语言层,在语言层这里,不管是使用英语、汉语、日语,也都不会影响到通信设备层;
这里面提到的数据报严格来讲是有区分的,因为,不同的协议层对数据包都有不同的称谓,在传输层叫做数据段(segment),在网络层叫做数据报(datagram),在链路层叫做数据帧(fram)
计算机中的分层就有两种分层模型👇
OSI七层网络模型
OSI 七层模型很复杂也不实用,所以只是存在教科书中,而在现实中使用的使 IOS 七层模型的的简化版本 -> TCP/IP五层网络模型
TCP/IP五层网络模型
TCP/IP 是一组协议的名字,在五层网络模型中还包括了其他许多协议,组成了TCP/IP协议簇,TCP/ IP是网络通信过程中最重要的两个协议。
-
应用层:描述了应用程序如何发送数据,如何获取数据以及获取数据以后如何使用,应用层是由应用程序实现的,也就是需要通过我们写代码实现的。
-
传输层:关注起点和终点
比如,我在京东上买了一件衣服,提供了收件人地址和收件人电关心中间是怎么运输的,这就是传输层的工作
-
网络层:进行路径规划
商家发货,就需要将衣服交给快递公司,快递公司就会根据起点和终点来进行路径上的规划,筛选出一个合适的路径,这也就是网络层的工作
传输层和网络层是由操作系统的内核实现的,都是现成的,不需要我们手动去实现。
-
数据链路层:两个相邻节点之间的数据传输情况
当快递公司确定好了路径以后,假如是从上海 -> 南京 -> 郑州,这样的一条路径,接下来需要考虑每一步该怎么走,例如,从上海到南京使用火车,从南京到郑州使用飞机,这也就是 相邻节点之间如何传输,也就是数据链路层的工作
数据链路层是由驱动程序+硬件实现的,比如硬件厂商搞了个硬件,都会提供对应的驱动程序,由了驱动,才能让操作系统很好的来操作这个硬件。
-
物理层:描述的是网络通信的硬件设备,比如使用的网线、光纤应该是啥规格的。
其实也就是,越往上,关注的话题就越宏观,越往下,关注的细节就更多。
网络设备所在的分层(重点)
- 对于一台主机,它的操作系统内核实现了从应用层到物理层的内容,五层都会涉及到
- 对于一台路由器,它实现了从网络层到物理层,也就是TCP/IP五层模型的下三层
- 对于一台交换机,它实现了从数据链路层到物理层,也就是TCP/IP五层网络模型的下两层
- 对于集线器,它是实现了物理层
封装和分用
描述了网络通信过程中,数据传输的基本流程
举个例子:
考虑有这样一个场景,张三通过QQ把一个hello发个给了李四,通信过程如下:
发送方:
1.应用层:
QQ就会对用户输入的“hello”按照QQ的应用层协议进行封装,打包成一个应用层数据报,这里的打包过程也就是字符串拼接,而应用层协议往往是由程序员自己决定的,在应用层打包好数据报后,就会调用操作系统API将数据报交给传输层
2.传输层:
在传输层这里,就会对应用层数据按照传输层的协议,再进行打包(传输层最常用的协议就是TCP/UDP),以UDP为例,这里的打包过程也是字符串拼接,也就是在应用层数据的基础上,拼接上一个UDP报头报头,这个报头也是一个二进制数据,报头里面最主要的信息就是源端口和目的端口
3.网络层:
传输层数据打包好之后,就会交给网络层,网络层就会根据网络层的协议针对传输层的数据报再进行打包(最常用的协议就是IP协议),也就是在传输层数据报基础上再添加一个报头,也是字符串拼接,在IP报头中也包含了很多的属性,最重要的属性就是 源IP和目的IP
4.数据链路层:
网络层数据打包好之后,就会交给数据链路层。数据链路层比较典型的协议就是以太网协议,所以,在网络层数据报的基础上就会拼接上一个以太网报头和以太网尾,就会构成一个以太网数据帧,在以太网报头中,包含最重要的信息就是 源mac地址,目的mac地址,mac地址也是用来描述一个设备在网络上的地址。
-
物理层
将上述经过打包的数据转换成二进制的0 或 1序列,通过光信号/电信号传输,以上这些打包的过程就是封装,如下图
数据发出去之后,就会进行一系列的交换机和路由器进行转发,等到目标主机接收到了这些数据后,就会对收到的数据进行分用
接收方:
1.物理层
拿到光/电信号,转换成二进制数据,得到以太网数据报,就会交给数据链路层,按照数据链路层协议处理
2.数据链路层
通过以太网协议,针对以太网数据报进行解析,这个解析过程就会解析出报头和报尾,拿到中间的载荷,把载荷部分交给网络层,按照网络层协议进行处理
3.通过IP协议针对网络层数据报进行解析,去掉报头,拿到载荷,再进一步把载荷交给传输层
4.传输层
此处使用UDP协议针对这个数据报进行解析,去掉报头,把载荷交给应用层,通过报头中的端口号,就可以知道应该把数据交给那个应用程序
5.应用层
QQ 这个应用程序就会按照程序员自定义的应用层协议 进行解析,最后拿到 hello 这个数据
上述只是在讨论发送方和接受方之间的分装和分用的实现,而数据报在网络传输的过程中,如果经过路由器,路由器也会进行一个封装和分用,而这里的封装和分用只是达到网络层,需要拿到网络层的IP地址,根据地址决定下一步怎么传输;