为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自上而下依次为:
其中第四层(传输层)完成数据传送服务,上面三层面向用户(应用层、表示层、会话层)。
除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:
资源分享(主要是两个博客)
https://blog.csdn.net/xqhadoop/article/details/79634854#_labelTop
https://blog.csdn.net/m_buddy/article/details/74178200
https://baike.baidu.com/item/TCP/IP%E5%8D%8F%E8%AE%AE
https://baike.baidu.com/item/TCP/33012?fromtitle=TCP%E5%8D%8F%E8%AE%AE&fromid=8988699
https://baike.baidu.com/item/IP/224599
对于TCP/IP中的各个模型的解释是这样的
有关数据链路层的重要知识点:
链路层作用:在这一层中主要将传输过来的数据转换为数据帧。
链路层功能:在连接层,信息以帧(frame)为单位传输。所谓的帧,是一段有限的0/1序列。连接层协议的功能就是识别0/1序列中所包含的帧。
帧中有什么: 比如说,根据一定的0/1组合识别出帧的起始和结束。在帧中,有收信地址(Source, SRC)和送信地址(Destination, DST),还有能够探测错误的校验序列(Frame Check Sequence)。当然,帧中最重要的最重要是所要传输的数据 (payload)。这些数据往往符合更高层协议,供网络的上层使用。与数据相配套,帧中也有数据的类型(Type)信息。
注意:连接层协议不关心数据中到底包含什么。帧就像是一个信封,把数据包裹起来。(包装、打包)
数据链路层需要实现的操作:数据链路层在物理层提供的服务的基础上向网络层提供服务(层层相依),其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
为达到这一目的,数据链路必须具备一系列相应的功能:主要有:
该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
如何让WiFi上的一台计算机和以太网上的另一台计算机通信呢?我们需要一个“中间人”。这个“中间人”必须有以下功能:
明确一:一个路由器有多个网卡(NIC,Network Interface Controller),每个NIC(网卡)可以接入多个网络并理解相应的连接层协议。
明确二:在帧经过路由到达另一个网络(一个终端就是一个网络)的时候,路由会读取帧的信息,并改写以发送到另一个网络。所以路由器就像是在两个社区都有分支的邮局。
总体上:WiFi上的计算机1 -> 路由WiFi接口 -> 路由以太网接口 -> 以太网上的计算机2(蓝色表示WiFi网络,绿色表示以太网络)
层次上 *个人理解*:会话层发起会话(HTTP&HTTPS)->传输层(TCP协议)包装->网络层(IP协议)寻找目标地址->链路层(对数据进行处理并搭建通道)->物理层(通过物理介质有效传播)->路由器的链路层(翻译、处理)->路由器的网络层(IP协议)寻找目标地址->路由器的链路层(翻译、处理)->物理层(通过物理介质有效传播)->以太网计算机链路层(翻译、处理)->此计算机的网络层(IP协议)->传输层(TCP协议和UDP协议)->会话层(HTTP&HTTP...)
IP协议存在的意义:在连接层,我们的一个帧中只能记录SRC和DST两个地址。而上面的过程需要经过四个地址 (计算机1,WiFi接口,以太网接口,计算机2)。显然,仅仅靠连接层协议无法满足我们的需要。由于连接层协议开发在先,我们无法改动连接层协议,只能在连接层的数据(payload),也就是信纸内部下功夫了。IP协议应运而生。
流程:计算机1,路由器和计算机2都要懂得IP协议。
网络层目的:网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层(TCP协议)不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。
重点协议:网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。有关网络层的重点为:
应用进程发起会话(HTTP&HTTPS),会话提交到传输层(TCP),传输层将HTTP会话请求分成报文段,传输层为报文段添加源和目的端口,输入到网络层(出本机端口),网络层(IP协议)进行IP寻址查找目的端,通过查找路由表找到可靠、高效的通道,提交给链路层,链路层翻译、打包成能够进行传输的模式。
/*
头脑风暴一
会话层发起会话--传输层先接收会话,然后针对不同的应用(进程),对数据进行包装,
并对信息进行修改(添加必要信息),添加上所对应的进程信息,将包装好的数据提交给网络层
--网络层接收传输层的数据,利用IP协议对数据进行再次修改,给他地址等一些信息
*/
/*
头脑风暴二
在遥远的海边有一间别墅(一个终端、一个内部网络),里面住了许多人(进程)
有一天“微信”(某一个进程)想要给远在万里之外的家人(另一台计算机的微信端)写封信(数据)表达自己对家人的思恋
于是“微信”(进程)写好了信(发起了会话),交给了公寓管理员(传输层)并告诉他要寄出去地址等信息,
让他(传输层)帮忙寄出去
管理员(传输层)收到了以后,先在信(数据)里面空白的部分写上了目的地址,然后用信封包装,
交给了邮局的工作人员(网络层)
工作人员写上邮局的名称以后送到了所对应的邮局。在邮局信封被打开,工作人员(网络层)知道了信要送往的地址,
工作人员(网络层)将信放到一个新的信封中,并写上出发地为邮局,到达地为计算机2的信息,并交给此区域的邮差
邮差把信送到了目的地公寓的公寓管理员(传输层)手上
管理员将信拆开知道了是寄给谁的信,将信交给了最终的目标。
*/
上面的三层协议让不同的计算机之间可以通信。但计算机中实际上有许多个进程,每个进程都可能有通信的需求(参看Linux进程基础和Linux进程间通信)。这就好像一所房子里住了好几个人(进程),如何让信精确的送到某个人手里呢?(如何确保数据提交给应该接收的进程?)
传输层协议,比如TCP和UDP,使用端口号(port number)来识别收信人(某个进程)。在写信的时候,我们写上目的地的端口。当信到达目的地的管理员手中,他会根据传输层协议,识别端口号,将信送给不同的人。
TCP和UDP协议是两种不同的传输层协议。UDP协议类似于我们的信件交流过程。TCP协议则好像两个情人间的频繁通信。一个小情人要表达的感情太多,以致于连续写了好几封信。而另一方必须将这些信按顺序排列起来,才能看明白全部的意思。TCP协议还有控制网络交通等功能。
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
通过上面的几层协议,我们已经可以在任意两个人(进程)之间进行通信。然而每个人实际上从事的是不同的行业。有的人是律师,有的人外交官。比如说律师之间的通信,会用严格的律师术语,以免产生纠纷。再比如外交官之间的通信,必须符合一定的外交格式,以免发生外交误会。再比如间谍通过暗号来传递加密信息。应用层协议是对信件内容进一步的用语规范(协议)。应用层的协议包括用于Web浏览的HTTP协议,用于传输文件的FTP协议,用于Email的IMAP等等。
为操作系统或网络应用程序提供访问网络服务的接口。
会话层、表示层和应用层重点:
1> 数据传输基本单位为报文;
2> 包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。