OSI网络分层结构:
网络结构的标准模型OSI,是由国际互联网标准化组织(ISO)定制的网络分层模型。一共分为7层,每一层和它的上下两层是分开的,这种方式使得各层之间是相对独立的(无论它的上层下层如何修改都不会影响到本层),每层只为它上一层提供服务。同时各层之间的规则是相互对立的。例如数据的格式、通信的方式等,这就被称为协议。
不同主机相同层之间是对等的,例如主机A和主机B中的应用层是相同的层,它们互称为“对等层”,对等层的队则是一致,但实现方式不一定相同,例如linux网络协议栈运行在主机A上,Windows网络协议栈运行在主机B上,只要它们规则相同就可以。OSI听起来是非常完美的,但完美就导致了实现需要付出很大的代价。而且在OSI制定出来时,TCP/IP已经被广泛的使用了,所以现在规模最大的、覆盖全球的、基于TCP/IP的互联网并没有使用OSI标准。OSI失败的原因可归纳为:
(1)OSI的专家们缺乏实际经验,他们在完成OSI标准时缺乏商业驱动力。
(2)OSI的协议实现起来过分复杂,而且运行效率低。
(3)OSI标准的制定周期太长,因而使得按OSI标准生产的设备无法及时进入市场(主要原因)
(4)OSI的层次划分不合理,有些功能上在多个层次中重复出现。
国际上规定网络结构的标准的模型是OSI模型,而使用最广泛的标准的是TCP/IP模型。
TCP/IP网络模型:
相同的颜色即表示等同的意思。五层协议的体系结构只是为了介绍网络原理,实际应用还是TCP/IP四层体系结构。各个层的主要功能如下:
(1)物理层:在物理层所传输的数据的单位是比特。
(2)数据链路层:数据链路层,简称为链路层。将网络层交下来的IP数据报转化组装成帧,在两个相邻结点的链路上传送帧。每个帧包括数据和必要的控制信息(同步信息、地址信息、差错信息)。
(3)网络层:也称为网际层,是整个TCP/IP协议栈的核心。将数据包进行分组并发往目的主机的或者网络。由于在网络层使用的是IP协议,因此分组也被称为IP数据报,或简称为数据报。
(4)运输层:负责运输的任务就是负责向两台主机中进程之间的通信提供通用数据的数据传输服务。传输的数据被称为用户数据报(UDP)或者报文段(TCP)。
(5)应用层:通过应用进程间的交互来完成特定的网络应用,直接用户的应用进程提供服务。注意这里的进程,是指运行在主机上的程序。在这一层交互的数据单元为报文。
为什么要对网络进程分层?
在网络通信是为什么要对网络进程分层,为什么不直接在一层将信息处理好,为什么要分为好几层去处理一个数据那?原因就是网络环境太过于复杂,大部分信息在网络的传输并不是直接可以从源主机传输到目的主机的,这其中要经过路由器的中转,而且用户使用的网络和系统可能都是不同的,如果要将网络在一层处理,可以是肯定可以的,不过一旦需要修改那将是一个非常浩大的工程。
网络进行分层的好处:
(1)各层之间是独立的。某一层并不需要直到它的上一层和下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供服务。每一只实现一种相对独立的功能,这样可以将复杂的问题简单化。
(2)灵活性好。当任何一层发生了变化时,只要层间的接口不变,则不会影响到其他层。
(3)结构上可分割开。各层多可以采用最合适的技术来实现。
(4)易于实现和维护。整个系统被分为了几个若干个相对独立的子系统,使得整个系统变得易于处理。
(5)能促进标准化工作。
两台主机通讯的具体过程以及数据在各个层之间的存在形式(画的不好,请多包含)。
举个例子:
例如你向你的QQ里的好友发送一条消息内容为“你好”的消息,然后点击“发送”。
(1)在你点击发送后,QQ(应用)会自动对信息打包,对信息进行封装(应用层协议是唯一个可以通过用户自己定义的协议)。然后将报文向下层即运输层下发。
(2)假设是QQ采用tcp协议,那么这时Tcp就会通过“三次握手”和腾讯QQ服务器建立连接,并将消息(报文)通过Tcp协议封装,然后下发到网络层(IP层)。
(3)IP层内部会维护一张表,简单的说这个表中记录着各个主机的IP地址和MAX地址,然后通过查表找到对应的目的IP地址的MAC地址,再将消息(报文段)进行封装下发到数据链路层。如果找不到就会通过ARP协议,发送ARP请求,找出对应的MAC地址。
(4)在数据链路层,将数据报通过数据链路层的协议封装然后组装成帧,下发到物理层。
(5)将数据转化为使用0和1表示的比特。放在缓冲区等待发送。
(6)在腾讯QQ服务器接收到消息后,将消息进行解析,然后发送给对应对的主机。对应的主机在通过相反的方式一层一层的解包。所以TCP/IP又被称为TCP/IP协议栈(先进后出)。
(*大体就是这样的情况,其中的具体情况没有区讨论。)