网络7层协议简述
互联网的本质是一系列的网络协议,这个协议就叫做OSI协议。按照功能不同分工不同,认为的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。OSI就是一个开放的通信系统互联参考模型,也是一个定义的很好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从下到上分别是7-应...
互联网的本质是一系列的网络协议,这个协议就叫做OSI协议。按照功能不同分工不同,认为的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。OSI就是一个开放的通信系统互联参考模型,也是一个定义的很好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从下到上分别是7-应用层、6-表示层、5-会话层、4-传输层、3-网络层、2-数据链路层、1-物理层。
七层协议详解
物理层(网卡):是模型的最低层。该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。功能是:利用传输介质为数据链路层提供物理连接,用于计算机之间的数据传输,传输bit流。负责0、1 比特流(0/1序列)与电压的高低、逛的闪灭之间的转换。
在这一层,数据的单位称为比特(bit)。
数据链路层(交换机):模型的第二层。主要功能是:负责物理层面上的互联的、节点间的通信传输(例如一个以太网项链的2个节点之间的通信),传输以“帧”为单位的数据包,该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。对bit数据格式化,校验。目的是保障数据传输可靠性。采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
在这一层,数据的单位称为帧。
网络层(路由选择,点到点):第三层。主要功能是:为数据在节点之间传输创建逻辑链路,IP寻址,通过IP连接网络上的计算机。将数据传输到目标地址;目标地址可以使多个网络通过路由器连接而成的某一个地址,主要负责寻找地址和路由选择。通过路由实现不同局域网间的通信。通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。
在这一层,数据的单位称为数据包(packet)。
传输层(端到端):第四层。只在通信双方的节点上(比如计算机终端)进行处理,而无需在路由器上处理,主要功能是:建立了主机端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一层。主要关注tcp、udp。ipv6传输效率高就和这层有关。
在这一层,数据的单位称为数据段(segment)
主要功能:
①:为端到端连接提供传输服务
②:这种传输服务分为可靠和不可靠的,其中Tcp是典型的可靠传输,而Udp则是不可靠传输
③:为端到端连接提供流量控制,差错控制,服务质量(Quality of Service,QoS)等管理服务
包括的协议如下:
TCP:传输控制协议,传输效率低,可靠性强
UDP:用户数据报协议,适用于传输可靠性要求不高,数据量小的数据(比如QQ)
会话层(会话控制):第五层。主要功能是:负责维护两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。管理不同设备之间通信。
表示层(数据格式转化):第六层。对应用层数据编码和数据格式转换,保障不同设备之间通信(windows和linux)。主要功能是:用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
应用层:模型的最高层。主要功能是:提供应用接口,为用户直接提供各种网络服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。
先自上而下,后自下而上处理数据头部。
记忆从上至下是:应,表,会,传,网,数链,物。
OSI模型最初是因为美国人的两台机器之间有进行通信的需求。
需求1:两个硬件之间如何进行通信,具体就是一台发比特流,另一台能够收到。
于是就有了物理层:主要是定义设备标准,如网线的接口类型、管线的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流,就是从1/0转化为电流强弱来进行传输,到达目的之后再转化为1/0,也就是我们常说的数模转换。这一层的数据是比特。
需求2:现在通过电线我能发数据流了,但是我还是希望能通过无线电波,通过其他介质来进行传输。然后我还要保证传输过去的比特流是正确的,需要由纠正错误的功能。
数据链路层:定义了如何让格式化数据进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
需求3:现在我能发正确的比特流数据到另一台计算机了,但是当我发大量数据的时候,可能需要很长时间,例如:一个视频格式的,网络会中断好多次,实际上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的。我需要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个发送。
于是发明了传输层(传输层在OSI模型中,是在网络层面上)。比如TCP,是用于发送大量数据的,我发出去一万个包,另一台电脑就需要告诉我是否接收到一万个包,如果缺少3个包,就告诉我是第1001/234/8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。例如UDP,适用于发送少量数据的。我发20个包出去,一般不会丢包,所以 ,我不管你收到多少,在多人互动游戏中,也经常受到UDP协议,因为一般都是简单的额信息,而且有广播的需求。如果用TCP,效率就会很低,因为它会不停地告诉主机我收到20个包,或者18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包就卡一下,算了,下次再发包更新。
需求4:传输层是解决了打包的问题。但是如果我有多台计算机,怎么能找到我要发的那台?或者A要给F发信息,中间要经过B/C/D/E,但是中间还有好多节点,如K/J/Z/Y.我怎么选择最佳路径?这就是路由要做的事情。
于是发明了网络层,也就是路由器,交换那些具有寻址功能的设备所实现的功能。这一层定义的是IP复制,通过IP地址寻址,所以产生了协议。
需求5:现在已经能够给指定计算机发送正确的封装过的信息了,但是用户级别的体验并不是很好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。
于是发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。
需求6:现在我能保证应用程序自动收发包和寻址了,但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,EXE不能在Linux下用,shell在window也也是不能直接运行的。
于是需要表示层,帮我们解决不同系统之间的通信语法问题。
需求7:现在所有必要条件都准备好了,我们可以写个Android程序,web程序去实现需求吧。
补充:不知道有没有小伙伴熟悉Socket,这不是一个协议,而是一个通信模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要是一台电脑两个进程之间进行通信,然后把它用到两台电脑的进程间通信。所以,可以把它简单理解为进程间通信,主要是这么做的:
A发包:A发请求包给某个已经绑定的端口;收到B的允许后,A正式开始发送,发送完了,A告诉B要断开连接;A收到断开允许后,马上断开,然后发送已经断开信息给B。
B收包:绑定端口和IP,然后在这个端口监听接收到A的请求,发给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收,B接收到断开请求,并允许断开,B确认断开后,继续监听其他请求。
换句话说,socket就是I/O操作,socket并不仅限于网络通信。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层。
from:https://blog.csdn.net/qq_27623337/article/details/80982931
from:https://www.cnblogs.com/mike-mei/p/8548238.html
数据链路层
数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并交给网络层。在互联网中,网络层协议数据单元就是IP数据报(或简称为数据报、分组或包)。数据链路层的三个基本作用:封装成帧、透明传输和差错检测。两台主机通过互联网进行通信时数据链路层所处的地位:
当我们专门研究数据链路层的问题时, 在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层。
当H1到H2发送数据时,从数据链路层来看, H1到H2的通信可以看成由四段不同的链路层通信组成, 即:
H1→R1, R1→R2, R2→R3和R3→H2。 这四段不同的链路层可能采用不同的数据链路层协议。
1. 数据链路和帧
链路和数据链路不是一回事。
所谓链路就是从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换接点。在进行数据通信时,两台计算机之间的通信路径往往要经过许多段这样的链路。可见链路是路径的组成部分。
数据链路是另一个概念、这是因为当需要在一条线路上传输数据时,除了必须有一条物理线路外,还必须有一些必要的协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用网络适配器(既有硬件,也有软件)来实现这些协议。一般设配器都拥有物理层和数据链路层。
点对点信道的数据链路层在进行通信时主要步骤如下:
1.结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
2.结点A把封装好的帧发送给结点B的数据链路层。
3.若接点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给网络层;否则丢掉这个帧。
数据链路层不必考虑物理层如何实现比特传输的细节。我们甚至还可以简单的设想好像是沿着两个数据链路层的水平方向把帧直接发送到对方。
封装成帧
在数据部分的前面和后面添加上首部和尾部,构成一个完整的帧。首部和尾部可以确定帧的界限、此外还有很多控制信息。在发送帧时,是从帧首部进行发送的,各种数据链路层协议都对帧首部和帧尾部的格式由明确的要求。
当数据出现差错时,帧定界的作用更加的明显。假定一个帧发送到一半突然出了故障,中断了发送。但随后很快又恢复了正常,于是从头发送这个帧,由于使用了帧定界符,那么前面收到的帧是不完整的帧(只有首部SOH而没有尾部EOT),必须丢弃。而后面收到的数据有明确的定界符,因此得到的是一个完整的帧,应当收下。
from:https://www.jianshu.com/p/a93e79669cc5
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)