OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解

文章目录

协议分层的好处

第一点:

在网络通信中,如果使用一个协议来解决所有的问题,那么这个协议就会非常的庞大,非常不利于去学习和理解,相比之下,就可以把大的协议拆分成多个小的协议,让每一个小的协议只关注某一个部分的工作,使每一个小的协议都不会太麻烦,这样也就达到了化繁为简。而在网络通信中,有太多太多的协议,为了方便管理,就对协议进行了分层,按照协议的作用分类,并且约定了不同层次的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持,这样就不容易混乱;

举个例子,比如说,在创业时,这时候就只需要老板一个人对所有员工进行管理即可,就不需要中层领导,随着公司的规模越来越大,老板管不过来了,这时候就需要有中层领导,当老板想要发布某个任务是,就不需要向底层的员工直接发布,只需要向中层领导发布,然后呢,中层领导就会向下再发布,最后到员工手里,这也就是刚才所说的,上层协议调用下层协议,下层协议给上层协议提供支持,这样在通信过程中,就会很容易的方便管理

第二点:

协议分层了之后,上层和下层彼此之间就进行了封装,使用上层协议,不必关注下层协议,使用下层协议,不必关注上层一些,每个协议就只关注自己本身的就可以了

类似于上图,在语言层,根本不需要理解通信设备是什么样的,我们只需要说话就行了,而在通信设备层,制造通信设备时,并不需要关心你使用什么语言说话,我只要把说的话给传达过去就行,只要会说话,就能打电话,大大降低了使用者的成本

第三点:

每一层协议都可以根据需要灵活的转换

例如上图,在通信设备层,我可以把电话替换成手机,该怎么打电话怎么说话都是一样的,并不会影响到语言层,在语言层这里,不管是使用英语、汉语、日语,也都不会影响到通信设备层;

这里面提到的数据报严格来讲是有区分的,因为,不同的协议层对数据包都有不同的称谓,在传输层叫做数据段(segment),在网络层叫做数据报(datagram),在链路层叫做数据帧(fram)

计算机中的分层就有两种分层模型👇

OSI七层网络模型

OSI 七层模型很复杂也不实用,所以只是存在教科书中,而在现实中使用的使 IOS 七层模型的的简化版本 -> TCP/IP五层网络模型

TCP/IP五层网络模型

TCP/IP 是一组协议的名字,在五层网络模型中还包括了其他许多协议,组成了TCP/IP协议簇,TCP/ IP是网络通信过程中最重要的两个协议。

  1. 应用层:描述了应用程序如何发送数据,如何获取数据以及获取数据以后如何使用,应用层是由应用程序实现的,也就是需要通过我们写代码实现的。

  2. 传输层:关注起点和终点

    比如,我在京东上买了一件衣服,提供了收件人地址和收件人电关心中间是怎么运输的,这就是传输层的工作

  3. 网络层:进行路径规划

    商家发货,就需要将衣服交给快递公司,快递公司就会根据起点和终点来进行路径上的规划,筛选出一个合适的路径,这也就是网络层的工作

    传输层和网络层是由操作系统的内核实现的,都是现成的,不需要我们手动去实现。

  4. 数据链路层:两个相邻节点之间的数据传输情况

    当快递公司确定好了路径以后,假如是从上海 -> 南京 -> 郑州,这样的一条路径,接下来需要考虑每一步该怎么走,例如,从上海到南京使用火车,从南京到郑州使用飞机,这也就是 相邻节点之间如何传输,也就是数据链路层的工作

    数据链路层是由驱动程序+硬件实现的,比如硬件厂商搞了个硬件,都会提供对应的驱动程序,由了驱动,才能让操作系统很好的来操作这个硬件。

  5. 物理层:描述的是网络通信的硬件设备,比如使用的网线、光纤应该是啥规格的。

    其实也就是,越往上,关注的话题就越宏观,越往下,关注的细节就更多。

网络设备所在的分层(重点)

  • 对于一台主机,它的操作系统内核实现了从应用层到物理层的内容,五层都会涉及到
  • 对于一台路由器 ,它实现了从网络层到物理层,也就是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地址也是用来描述一个设备在网络上的地址。

  1. 物理层

    将上述经过打包的数据转换成二进制的0 或 1序列,通过光信号/电信号传输,以上这些打包的过程就是封装,如下图

数据发出去之后,就会进行一系列的交换机和路由器进行转发,等到目标主机接收到了这些数据后,就会对收到的数据进行分用

接收方:

1.物理层

拿到光/电信号,转换成二进制数据,得到以太网数据报,就会交给数据链路层,按照数据链路层协议处理

2.数据链路层

通过以太网协议,针对以太网数据报进行解析,这个解析过程就会解析出报头和报尾,拿到中间的载荷,把载荷部分交给网络层,按照网络层协议进行处理

3.通过IP协议针对网络层数据报进行解析,去掉报头,拿到载荷,再进一步把载荷交给传输层

4.传输层

此处使用UDP协议针对这个数据报进行解析,去掉报头,把载荷交给应用层,通过报头中的端口号,就可以知道应该把数据交给那个应用程序

5.应用层

QQ 这个应用程序就会按照程序员自定义的应用层协议 进行解析,最后拿到 hello 这个数据

上述只是在讨论发送方和接受方之间的分装和分用的实现,而数据报在网络传输的过程中,如果经过路由器,路由器也会进行一个封装和分用,而这里的封装和分用只是达到网络层,需要拿到网络层的IP地址,根据地址决定下一步怎么传输;

相关推荐
幽兰的天空5 小时前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc5 小时前
HTTP post请求工具类
网络·网络协议·http
心平气和️5 小时前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http
心平气和️5 小时前
HTTP 配置与应用(局域网)
网络·计算机网络·http·智能路由器
Gworg5 小时前
网站HTTP改成HTTPS
网络协议·http·https
Mbblovey6 小时前
Picsart美易照片编辑器和视频编辑器
网络·windows·软件构建·需求分析·软件需求
北顾南栀倾寒7 小时前
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
开发语言·网络·c++·qt·tcp/ip·http·udp
GZ_TOGOGO7 小时前
PIM原理与配置
网络·华为·智能路由器
7ACE7 小时前
Wireshark TS | 虚假的 TCP Spurious Retransmission
网络·网络协议·tcp/ip·wireshark·tcpdump
大丈夫立于天地间8 小时前
ISIS基础知识
网络·网络协议·学习·智能路由器·信息与通信