一、协议的概念
为了使数据在网络上传输(从源头到达目的),数据所经过的所有网络设备都必须遵循相同的规则,如:怎么样建立连接、怎么样传输数据、怎么样互相解析信息等。只有遵守这个约定,计算机之间才能相互通信交流。这样的规则就被称之为协议(protocol),它最终体现为在网络上传输的数据包的格式。
通信三要素是指通信过程中必须满足的基本条件,即语法、语义、时序。
1. 语法是指通信双方使用的符号及其组合方式,也就是所谓的通信协议。在通信过程中,通信双方需要遵守相同的语法规则,才能够正确地理解对方的信息。
使用一些特殊的分隔符举个应用层例子:
编辑
这只是一种应用层协议约定的策略,是可以自定义的,前提是通信双方都采用该协议。
2. 语义是指通信信息的含义及其解释,也就是所谓的消息格式。在通信过程中,消息的发送方需要确保其含义与接收方相同,以便接收方能够正确地理解并作出相应的响应。
3. 时序是指通信信息的时序关系,也就是所谓的时间协议。在通信过程中,通信双方需要遵守相同的时序规则,确保消息能够按照正确的时间顺序传递,从而保证通信的可靠性和正确性。
通俗来讲就是我们嘎嘎发一大堆消息给对方,如何保证这些信息在在网络传输到对方主机时保持有序,不会发送消息错乱的情况。
例如:
我qq发送消息 :“早上好兄弟 ” ,“今天有空吗?出来玩啊”。
对方qq接受消息:“今天有空吗?出来玩啊”。 “早上好兄弟 ” , 这种情况明显的不合适,这就是时序作用的体现,博主以前使用qq 发送消息就遇到过这种情况,通过好友截图才得知。
综上所述,通信三要素是通信过程中必不可少的基本条件,只有满足了这些要素,通信才能够进行顺利,实现信息交流。
1.1 网络通信为什么需要使用协议
网络通信需要协议是因为协议规定了网络中数据传输的标准化方法,确保不同设备之间能够正确而无误地交换信息。没有协议的话,网络中的设备无法准确理解彼此发送的数据,也无法确定如何响应(解析并回应)这些数据,这样就会导致网络通信的失败。
具体来说,协议定义了数据传输时所需的格式、参数、序列化方式(下文讲述)、异常检测和重传机制等一系列细节内容。
网络通信需要协议是因为它提供了一个标准的框架,使得在大量不同的设备和复杂的网络环境下,数据能够被有效地传输、组织和管理。
二、网络模型
在网络通信中,需要约定协议,一个应用层的数据(软件),被指定的另一个应用层接收,中间传输是非常的复杂的,设想一下,中国人给一个外国人发电子邮件,不论距离有多远,不论你在何方,给一个合法的接收地址,信息就能来到你的身旁,接下来,博主就来带大家领略一下信息是如何从这里到那里的。
面对复杂的网络通信环境,就需要复杂的协议来约束,一种协议肯定是无法胜任所有的应用场景,即使可以那也是相当的复杂,所以协议有很多,每个协议都有自己的独特的功能,就可以针对这些协议分类,同时针对这些不同的类别,将协议进行分层,并约定层级和层级之间的调用关系,只允许上层协议调用下层协议,下层协议给上层协议提供支持,不允许跨层调用协议。
协议分层的好处:
协议分层后,后续就比较容易针对某一层的协议进行替换,举个例子:应用层的协议,qq 能发消息,也只能被 qq 这个应用接收并解析吧(只有qq认识),微信也能发消息,抖音,支付宝……都可以发消息,只是以上这些应用软件使用的是不同的应用层协议,对信息是怎么传输的没有任何影响吧?站在程序员的角度,真正操作的只是传输层和应用层,你可以先理解传输层能保证将你的信息从你的电脑送到指定接收人的电脑(这其实是网络层干的活),并且会根据端口号(下文讲)将这些信息交给某个应用,至于应用程序怎么解析这些信息那就是各个应用的事情了。
以上事例就是为了告诉大家,协议分层之后,层次之间,“耦合程度比较低 ”,也就是说每层协议负责干自己的活,流水线作业,中间有道工序的员工摸鱼去了,对前面的员工来讲没有任何影响,依旧可以干活,对于后面的员工来讲,没货上来,等于没事干~~,领导查看当日的货物清单,woc,经过层层排查发现中间那货,效率这么低,这不赶紧换人(第二个优势就是方便对某一层协议进行替换),“换人” 这个操作对于前面的员工、后面的员工没有任何影响,只会有效率的问题,后面的员工直夸:这个猛~~
编辑
站在程序的角度看待协议分层:
调用服务:不需要关心接口具体是如何实现的,只关心通过那些接口能做什么事就行了。
提供服务:封装隐藏功能实现的细节,提供开放接口给别人使用
2.1 OSI 七层模型
OSI (Open System Interconnection) ,开放系统互连 , 它由国际标准化组织(ISO)制定并发布。该模型将计算机网络通信划分为7个不同的层次,以帮助不同的网络设备和软件之间的交互和协作。
OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
它的最大优点是将服务、接口和协议这三个概念明确地区分开,概念清楚,理论也比较完整。通
过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
- 应用层(Application Layer):应用层定义了协议、接口和数据格式,以支持特定应用程序的数据交换。
- 表示层(Presentation Layer):表示层负责将数据呈现给应用程序,以便应用程序可以理解和使用数据。如何编码和解码数据,以及如何加密、压缩和转换数据格式等问题。
- 会话层(Session Layer):会话层提供了一种机制,使得在不同计算机之间的数据交换成为可能。此层负责建立、维护和结束会话,并对会话中出现的错误进行处理。会话层还可以支持多个应用程序之间的通信。
- 传输层(Transport Layer) :管理两个节点之间的数据传输,负责可靠的传输,确保数据被可靠的传送到目标地址。
- 网络层(Network Layer) :地址管理:记录源目标主机的ip 和 目的主机ip , 路由转发:负责给两个节点选择一条可靠的高效的传输路径。
- 数据链路层(Data Link Layer) :负责连接设备之间传输数据帧,例如:网卡,交换机
- 物理层(Physical Layer):物理层处理传输介质上的原始比特流,物理层设备:网络、光纤等一系列传输介质。
理论虽好: 但是 OSI 七层网络模型仅仅只存在于教科书上,并没有实质上的实现,真实的网络,实际上只是采用了七层中的 四层 或 五层,当前使用最广泛的网络模型是 TCP / IP 五层网络模型。
三、TCP / IP 五层网络模型
TCP / IP五层模型是一个网络协议集合,涵盖了计算机通过互联网进行通信所需的所有协议。这个模型被设计出来是为了解决不同计算机之间互联的问题,并且能够保证数据在传输过程中的可靠性。接下来通俗易懂的讲讲每层协议对应的功能,具体可以参考 IOS 参考模型。
- 应用层:只关注传输过来的数据,我们要干什么,一个程序在开发过程中,程序员通过一系列的技术手段(在Java中,可以通过Socket类的InputStream和OutputStream来实现对传输层数据的读取和写入)可以获取到这些数据,我们应用层拿到这些数据后如何按照约定的格式处理,那就是不管传输层的事情了。
- 传输层 :管理两个节点之间的数据传输,负责可靠的传输,传输层不关注中间传输的路径,只关注起点和终点并确保数据被可靠的传送到目标地址。
- 网络层 :地址管理:记录源目标主机的ip 和 目的主机ip , 路由转发:负责给两个节点选择一条可靠的高效的传输路径——路径规划。
- 数据链路层:负责连接设备之间传输数据帧,主要关注两个相邻设备节点之间的传输,例如通过网线 / 光纤 / 网络接口,连接的交换机、网卡之间的数据传输。
- 物理层:网路通信的基础设施设备:网络、光纤等一系列传输介质。
我们关注的实际上就是应用层,因为应用层才真正关心数据的用途,但是传输层给应用层提供服务,所以也需要重点学习一下传输层,进行网络编程主要还是围绕着应用层展开。
除了应用层之外,另外的四层是由操作系统内部封装好了,就相当于系统直接给应用层提供了操作传输层的接口,可以直接使用(在Java中,可以通过Socket类的InputStream和OutputStream来实现对传输层数据的读取和写入),注意!!只允许上层协议调用下层协议,下层协议给上层协议提供支持,不允许跨层调用协议,所以应用层只能直接操作传输层。