Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层相关的知识,希望对你有一定的参考价值。

文章目录

一:生活中的协议分层

(1)生活中的分层1——汉堡包

汉堡包属于一种快餐,之所以称之为快餐,是因为它的制作效率高,在一定时间内可以满足不同口感,搭配出不同风格的食物。之所以这样是因为汉堡包采用了分层结构,想要替换哪一步就替换那一部分,每一层与每一层互不干扰


这样带来的好处就是解耦,在软件设计中我们经常提到高内聚,低耦合,汉堡包所做的目的就是这样,我们学习C++也是这样,在C语言中所有代码都是通过调用接口完成,耦合性太强,中间一旦一个环节出现错误,满盘皆输。但是增加了类之后,类于类之间互不干扰,就像STL中的vector,它可以放自定义类型,vector一定能保证它的插入删除接口是不出现错误的,那么最终如果仍然产生问题的话,就一定是你的自定义了类型有问题了

(2)生活中的分层2——打电话

如下图,有两个人通过通信设备进行交谈。在这个过程中,他们使用的语言协议作为麦克风的音频输入,在通信设备那一层转换为电信号,然后将电信号传送到另一个人的通信设备,再向上转化为我们可识别的内容,依次完成通信

上图中反应的就是:上层需要使用下层接口完成通信,而下层需要将数据通过某种方式翻译后反馈给上层

如下图,在实际生活中,我们与人交谈可以使用座机也可以使用手机,并且在通信设备不变的情况下,也可以使用英语交流(前提是双方都采用这种“协议”)

这样做带来的好处就是下层只负责能将数据正确翻译给上层,而上层负责会使用这些接口(就像会使用手机一样),依次达到通信

上面的例子其实只涉及到了两层,实际的协议分层相较它还是比较复杂的,但是所体现的思想是一致的。

二:网络分层

(1)OSI七层模型

OSI将协议分为如下7层,协议规定了每一层各自的作用,也就是说每一层应该干什么。当然这只是一种参考模型,实际的网络协议如TCP/IP在设计时思想上基本一致,但是还是存在区别

  • 物理层:负责0,1比特流(0,1序列)与电压的高低,光的闪灭之间的互换
  • 数据链路层:负责物理层面上互连的,节点之间的通信传输。关键设备就是交换机
  • 网络层:解决跨网络的通信问题,主要负责寻址和路由选择。关键设备就是路由器
  • 传输层:保证传输的稳定,可靠和效率等问题
  • 会话层:负责建立和断开通信连接,以及数据的分割等数据传输相关的管理
  • 表示层:主要负责数据格式的转换
  • 应用层:为应用程序提供服务并规定应用程序通信的相关细节

按照OSI的规定,一次网络通信流程应该是下面这样的

(2)TCP/IP分层模型

OSI规定的七层模型太过复杂,所以TCP/IP协议将网络分为了下面5层(TCP/IP协议是一组协议的集合的代表,只不过这两个协议太过著名,就以他们的名字命名了)。在TCP/IP协议中,每一层都呼叫它的下一层所提供的网络或者接口完成自己的需求

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
  • 数据链路层:: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 网络层:: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  • 传输层:: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 应用层:: 负责应用程序间沟通。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等我们的网络编程主要就是针对应用层

可以看出:OSI参考模型注重“通信协议必要的功能是什么”,TCP/IP则强调“在计算机上实现协议应该开发哪种程序”。也就是说操作系统承担了网络协议中非常重要的角色

三:OSI参考模型与TCP/IP参考模型比较

(1)相同点

主要有以下几点

  • 二者都采取分层的体系结构,将庞大且复杂的问题划分为若干较容易处理的、范围较小的问题,而且分层的功能也大体相似。
  • 二者都是基于独立的协议栈的概念
  • 二者都可以解决异构网络的互联,实现世界上不同厂家生产的计算机之间的通信

(2)不同点

①:OSI参考模型的最大贡献就是精确地定义了三个主要概念:服务、协议和接口,这与现代的面向对象程序设计思想非常吻合。而TCP/IP 模型在这三个概念上却没有明确区分,不符合软件工程的思想

②:第二,OSI参考模型产生在协议发明之前,没有偏向于任何特定的协议,通用性良好。但设计者在协议方面没有太多经验,不知道把哪些功能放到哪一层更好;TCP/IP模型正好相反,首先出现的是协议,模型实际上是对已有协议的描述,因此不会出现协议不能匹配模型的情况,但该模型不适合于任何其他非TCP/IP的协议栈

③:TCP/IP模型在设计之初就考虑到了多种异构网的互联问题,并将网际协议 (IP) 作为一个单独的重要层次。OSI参考模型最初只考虑到用一种标准的公用数据网将各种不同的系统互联。OSI参考模型认识到网际协议IP的重要性后,只好在网络层中划分出一个子层来完成类似于TCP/IP模型中的IP的功能

④:重点区别

  • OSI参考模型在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信
  • TCP/IP模型在网际层仅有一种无连接的通信模式,但传输层支持无连接和面向连接两种模式

以上是关于Java网络编程-第一节2:网络编程必备网络知识2之网络协议分层的主要内容,如果未能解决你的问题,请参考以下文章

Java网络编程-第一节3:网络编程必备网络知识3之IP地址端口号

Java网络编程-第一节3:网络编程必备网络知识3之IP地址端口号

Java网络编程-第一节1:网络编程必备网络知识1之网络初识和网络协议

Java网络编程-第一节1:网络编程必备网络知识1之网络初识和网络协议

必备前端基础知识-第一节:HTML

必备前端基础知识-第一节:HTML