一、概念
"分层"的设计思想就是将庞大复杂的一堆事情,分而治之,拆分成若干局部较小的事情,分到各个层级完成各自的功能
比如快递网络的例子
那么计算机也要实现很多复杂的功能:
- 差错控制:确保数据在传输过程中不出错。
- 流量控制:发送端的发送速率必须使接收端来得及接收,不要太快。
- 分段和重装:发送端将要发送的数据块划分为更小的单位,并在接收端将其还原
- 复用和分用:发送端几个高层会话复用一条低层的连接,在接收端再进行分用。
- 连接建立和释放:交换数据前先建立一条逻辑连接,数据传送结束后释放连接
- ......
就需要分层来完成
二、应该如何分层
一个合理的分层结构需要做到这几点:
1、功能分配合理,不管你3层4层100层,你要让合适的层次干合适的事(用快递网络的例子,你不能让快递员负责冷链装箱吧?也不能让快递驿站去运输长途快递吧?)
'
2、同一功能允许重复出现(比如顾客自己可以打包快递,当然快递驿站、快递员也可以再次加固打包快递)
三、计算机网路结构的3大模型
【网络的体系结构】是计算机网络的各层及其协议的集合,就仅仅是这个计算机网络及其构件所应完成的功能的精确定义 (不涉及实现)。
实现 是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题。(体系结构是抽象的 ,而实现 则是具体的)
用我们开发的经验举例:JAVA里有很多抽象接口,里面的抽象方法都是没有内容的,它只是规定了这个方法是做什么的;或者我们前端、后端框架都有规定好的一致的项目结构,但是里面的内容还得每一个程序员自己实现,而不是框架一开始就写好内容的,这些都只是一个抽象的规定协议
四、网络结构里的层级关系
1、水平方向各层关系
【协议、实体】
实体就是每一层的 "软件+硬件"。不同机器之间的同一层叫【对等层】,同一层里的实体叫【对等实体】
每一层对应着实现规定好的功能,那么协议就是规定好【对等实体之间】通信的结构
打比方,一个企业规定了全国的分公司,公司体系都是由"研发部"、"人事部"、"市场部"来组成,然后现在四川分公司要跟北京分公司对接项目,四川的"研发部" 和 北京"研发部"沟通,你不能让四川的"研发部"沟通的人讲四川方言吧?然后北京"研发部"的人讲北京方言,结果两部门谁也听不懂,项目怎么协商?你"研发部"就统一给我讲普通话的计算机术语!"市场部"就讲普通话的销售术语......
协议的作用
【具体例子细讲】
协议的三要素
2、垂直方向各层的关系
【接口、服务】
接口就是每一层向临近层交换信息的入口
服务是下层为紧邻的上层的功能调用,不能跨层服务
大致的传输流程:
发送方将信息发出,然后除了【物理层】,每一层都会在上一层数据的基础上,加上属于自己这一层协议控制信息( "首部"或"尾部"都可以 )
;
物理层就只用原封不动把信息按【比特流】的形式传输给下一个节点
;
下一个节点接收的时候,每一层就根据属于它这一层的控制信息,来做出相应的功能处理
;
在向下一个节点发送信息的时候,数据部分不动,就改一下各层的【新"首"或"尾"部控制信息】就可以
;
最后传到接收方主机也是一样
每一层只关心自己这一层的控制信息,读取完就拿走
直到传到用户那里,就只有原本的【数据】部分了
;
【完整图】
五、PDU、SDU、PCI
PDU、SDU、PCI是针对上面垂直方向数据传输的各层数据的一些的单位名称
王道考研的解释是:
看着比较费劲,结合图片解释:
- PDU(Protocol Data Unit):协议数据单元 ,就是这整一层所有信息(也就是:SDU + PCI)
- SDU(Service Data Unit):服务数据单元 ,就是除了这一层的控制信息没有,包含上面层所有控制信息+原始数据
- PCI(Protocol Control Information):协议控制信息 ,就是只指属于这一层的控制信息
网络分层结构的总结
六、OSI模型
个别名词前提:
1、OSI模型顺序记忆
记住模型顺序,从底到顶是:
物理层------>数据链路层------>网络层------>运输层------>会话层------>表示层------>应用层
2、网络设备的层次实现
计算机网络中的【网络设备实体】因为对应不同的职责,他们的结构不同,所需要实现的网络分层也不同
那么我们主要要了解这几个网络设备对应实现的是什么层次
3、物理层
记住【物理层】传输的单位是【比特】
物理层需要做的事就是根据【电伏】来将 数据 以 "比特流" 形式传输给下一个节点
比如高电伏特5V代表1,低电伏特1V代表0,然后根据一定的时间间隔输送每一位比特位
不过物理层传输的数据很容易受外界干扰,导致某些比特位出错
4、数据链路层
记住数据链路层传输的单位是【帧】
1个【帧】由多个【比特】组成
数据链路层就可以解决物理层上数据出错的这个问题,它可以进行差错控制,
他要做的任务就是:确保相邻节点的链路逻辑上无差错
具体功能是:1、差错控制 2、流量控制
补充简单了解一下 "帧" 的概念:
【帧】是数据链路层的数据单位,它包含多位比特位
它包括【帧头】【数据部分】【帧尾】
其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分 则包含网络层传下来的数据,比如IP数据包等等。
在发送方,【数据链路层】将【网络层】的传下来的数据封装成【帧】,然后发送到【物理层】
在接受方,【数据链路层】将数据部分从【帧】中取出,交给【网络层】
1)对于差错控制:
数据链路层会在原数据的基础上额外增加几个比特位,用于校验差错,也就是帧头帧尾的差错控制信息
比如原本网络层传下来8bit的数据,数据链路层会额外加2个bit用来给下一个节点校验用,因此就会传个10bit数据过去下个节点。
------然后下一个节点的数据链路层用校验编码技术来校验,当发现有错误时,可以采取【前向纠错 】(更正信息);也可以采取【自动重传请求】(也就是丢弃这个数据,要求重新发送)。
------如果校验过后没有错误,那么这2bit的差错控制信息就可以拆掉,然后把原本的8bit数据给到【网络层】
这里补充一些知识点,当时王道没说,但是我觉得可以学一下,还包含了计算机组成原理的知识点,就当串联复习:
【差错控制信息】又分为【检错编码 】或【纠错编码 】
- 检错编码:只能发现位错 ,然后用自动重传请求方式来纠正 位错及帧错。(常用的方法:奇偶校验码、循环冗余码)
- 纠错编码:不仅可以发现位错 ,还能指出出错的比特位从而进行前向纠错。(常见的方法:海明码)
奇偶校验法回顾:
同下面两种编码,就可以根据1bit的校验位来判断传过来的数据有没有错误
资料:
2)流量控制
当两个节点的传输速率不一样时可能会丢帧,那么数据链路层就需要进行【流量计控】
比如一个能传10帧,一个能传5帧,那就让10帧的适应慢的那个,也5帧5帧的传
5、网络层
记住网络层传输的单位是【分组】
1个【分组】由多个【帧】组成
主要这么几个职责:
- 1、路由选择
- 2、分组转发
- 3、拥塞控制
- 4、网际互联
- 5、其他:差错控制、流量控制、连接的建立与释放、可靠传输管理
1)路由选择:
网络层负责在源节点和目标节点之间选择最佳路径,并根据网络拓扑结构和路由算法将数据包从源节点传递到目标节点。这涉及路由表的建立和维护(常见的路由协议有RIP、OSPF和BGP)
2)分组转发:
网络层将数据封装成【分组】,就是采用分组存储转发形式发送数据(这就是路由器干的事)
3)拥塞控制:
网络层通过多种机制防止和缓解网络拥塞问题,确保数据能够高效传输。这可能涉及路由算法的优化和流量管理策略的实施。
4)网际互联:
各个网络的结构是不一样的,路由器就是用来连接各个不同结构的网络的,那么网络层就要实现这种异构网络互连
5)其他:差错控制、流量控制、连接的建立与释放、可靠传输管理
差错控制:网络层实现基本的差错检测和处理机制,如ICMP协议用于网络诊断(如ping和traceroute工具)。
;
流量控制:还是一样,控制两个节点的传输数据的速率协调
;
这里注意:
------【数据链路层】的差错控制是以【帧】为单位的,是一种局部的差错控制;
------ 而【网络层】的数据单位是【分组】,分组是由多个【帧】组成
在数据链路层给网络层传输中可能出现 "失帧",比如一个分组应该由3个帧组合,结果丢了一个就撤了2帧信息,这就是错的。那么【网络层】就要针对【分组】 的全局的差错控制
;
连接建立和释放:这是我们前面章节提到的"虚电路"技术要用到的,OSI网络层可以建立虚拟电路的连接和释放
;
可靠传输管理:就是分组信息发出之后,要用网络层来接收确认对方是否有收到,没什么好说的
另外,我在网上看到还有这么个功能,王道那里没说,这里提一下:
协议实现:网络层的主要协议是IP(互联网协议),包括IPv4和IPv6。IP协议负责数据包的寻址、路由和传输,是互联网通信的基础。
;
网络层的主要协议和工具
- IP(Internet Protocol):负责数据包的路由和传输,提供逻辑地址命名。
- ICMP(Internet Control Message Protocol):用于网络诊断和差错报告,如ping和traceroute工具。
- ARP(Address Resolution Protocol):将IP地址映射到物理地址(MAC地址)。
- RARP(Reverse Address Resolution Protocol):将物理地址映射到IP地址。
- NAT(Network Address Translation):在私有网络和公共网络之间转换IP地址,通常用于路由器。
6、传输层
记住传输层的数据单位是【报文段】
一个【报文段】由多个【分组】组成
传输层要多的事:实现【端到端】的通信,也就是操作系统里的【进程跟进程】的通信
具体2大任务:
- 1、数据复用和分用(分段和重组)
- 2、其他:差错控制、流量控制、建立连接和释放、可靠传输控制
1)数据复用和分用(分段和重组):
在发送方时,传输层将应用层的数据分段成较小的块,以适应网络传输的需要
在接收端,将数据链路层的分组信息重新组装成报文段形式的原始数据。
2)其他:差错控制、流量控制、建立连接和释放、可靠传输控制、服务质量
建立连接和释放:跟网络层一样,负责建立、维护和释放连接。它使用握手协议(如三次握手和四次挥手)来确保报文段有序、不重复地到达接收方。
;
流量控制:传输层通过流量控制机制(如滑动窗口协议)调节发送方的数据传输速率,防止接收方因处理能力不足而导致数据丢失。
;
差错控制:传输层又是对【报文段】的一种全局差错控制,对于报文段来说网络层又变成了局部的差错控制。
;
可靠传输管理:就是分组信息发出之后,要用网络层来接收确认对方是否有收到,没什么好说的
;
服务质量:传输层提供不同级别的服务质量(QoS),以满足不同应用对数据传输的需求。例如,实时视频传输可能需要低延迟和高带宽,而电子邮件传输则可能更注重可靠性。
另外,我在网上看到还有这么个功能,王道那里没说,这里提一下:
传输层的主要协议:
- TCP(Transmission Control Protocol):提供面向连接、可靠的数据传输服务。TCP负责数据分段、重组、流量控制、差错检测和校正等功能。它适用于对可靠性要求高的应用,如文件传输、电子邮件和网页浏览。
- UDP(User Datagram Protocol):提供无连接、不可靠的数据传输服务。UDP不进行数据分段和重组,也不提供流量控制和差错校正。它适用于对实时性要求高但容忍少量数据丢失的应用,如视频会议、实时游戏和流媒体传输。
7、会话层、表示层、应用层
记住应用层的传输数据单位是【报文】
1个【报文】由多个【报文段】组成
会话层管理进程间的会话断点检查,当通信失效(比如没网了)时设断点,等恢复正常了接着那里续传信息
表示层任务是,因为不同设备的编码可能不一样,比如有的是GBK、有的是UTF-8,那就要数据统一格式化
应用层是OSI模型的最高层,直接为用户和应用程序提供服务,它与应用程序的交互最多。
应用层在OSI模型中起到了桥梁作用,将用户和应用程序与网络通信的底层细节隔离开来。它为各种应用提供了通用的通信框架和协议。应用层协议是互联网和网络服务的重要组成部分,直接影响用户体验和应用程序的功能。
;
主要有这些任务:
- 用户接口:应用层为应用程序提供与网络通信的接口,使得用户能够直接使用网络服务,如电子邮件、文件传输和网页浏览。
- 网络服务:应用层提供各种网络服务,包括但不限于文件传输(FTP)、电子邮件(SMTP、IMAP、POP3)、远程登录(Telnet、SSH)、域名解析(DNS)、网页服务(HTTP、HTTPS)等。
- 数据处理:取出除了各部控制信息以外、用户只关心的【核心数据】
- 协议实现:应用层包含了一系列协议,用于支持不同类型的网络应用和服务。常见的应用层协议有:
- HTTP(HyperText Transfer Protocol):用于网页浏览和数据传输。
- FTP(File Transfer Protocol):用于文件传输。
- SMTP(Simple Mail Transfer Protocol):用于电子邮件传输。
- DNS(Domain Name System):用于域名解析,将域名转换为IP地址。
- Telnet:用于远程登录。
- SSH(Secure Shell):用于加密的远程登录和其他安全网络服务。
- 数据完整性和安全性:应用层协议通常提供数据完整性和安全性保证,例如通过加密和认证机制保护数据不被篡改和窃取。
- 通信协作:应用层支持不同应用程序和用户之间的协作通信,确保数据能够在分布式系统中正确传递和处理。
【总结】
OSI模型,在发送信息时,从上到下,数据传输的单位越分越小;在接收信息时,从下到上,数据传输单位越组越大。【报文------>报文段------>分组------>帧------>比特】
在发送信息时,从上到下,数据传输的过程叫【分段】
在接收信息时,从下到上,数据传输的过程叫【重组】
七、TCP/IP模型
1、TCP/IP 模型顺序记忆
2、【应用层】顶替【表示层+会话层】
因为1、并不是所有主机都需要实现"会话管理",通信中断了就叫他重新传数据就好了
2、并不是所有设备的编码都不一样,很多主机都是UFT-8编码了
所以TCP/IP去掉了OSI模型里的【表示层】和【会话层】,但是考虑到不得不应对个别"数据格式转换"和"会话管理",TCP/IP就把这两个功能加到了【应用层】
也就是【TCP/IP 应用层】=【OSI 表示层】+【OSI 会话层】
3、【网络接口层】顶替【数据链路层+物理层】
OSI不是规定了【数据链路层】要实现"差错控制"、"流量控制"的功能嘛;然后【物理层】要实现定义电路接口参数、信号含义、电气特征这些东西嘛
后面随着网络硬件设备厂商发明越来越多先进设备之后,OSI的【数据链路层】和【物理层】的要求越来越限制网络硬件设备厂商的发挥了,于是就要取消掉【数据链路层】和【物理层】
于是TCP/IP 用一个**【网络接口层】**顶替【数据链路层】和【物理层】,but这一层只为网络层传输"分组"数据,具体底层是怎么传输的不管,让设备厂商自己发挥
4、网络层
那么既然TCP/IP用【网络接口层】代替了【数据库链路层】+【物理层】,就少了一步差错控制、流量控制,数据到了【网络层】会是错的,那TCP/IP的【网络层】是不是要差错控制更仔细一点?
不!TCP/IP的【网络层】直接摆烂不管了,错的就错的,无所谓
5、传输层
ok,【网络接口层】摆烂,【网络层】也摆烂
那【传输层】没办法了,只能它干活了呗
所以**【传输层】** 接了:复用和分用、差错控制、流量控制、连接建立和释放、可靠传输管理
那么回顾之前我们前几章的知识点,当一个网络中,核心部分(路由器节点、链路...等等) 这些来控制数据的差错控制、流量控制这些事,就会让核心部分负载高,从而降低核心部分数据传输的能力,而且会增加造价成本
;
但是如果让边缘部分的网络设备 自己具有这些差错控制、流量控制功能,那就缓解了核心部分的运输负载,减少造价成本,提高网络通信的性能
;
所以OSI模型就是典型的让核心部分的路由器、链路具备这些琐碎的功能
;
而TCP/IP就是让边部分的主机,用传输层来实现这些琐碎的功能
总结
简单看一下TCP/IP各层的任务功能:
然后重点是要区分【OSI】和【TCP/IP】的【传输层】和【网络层】
记住:
OSI 的【网络层】因为具有"差错控制"、"流量控制"、"连接建立和释放"、"可靠传输管理"这些功能 ,所以可以向上层提供【有连接的服务,可靠性、有序性保障的信息(用虚电路实现)】和【无连接的服务,无可靠性、有序性保障的信息(数据报形式数据)】
而OSI的【传输层】只能向上层提供【有连接的服务,可靠性、有序性保障的信息】
反之,TCP/IP的【网络层】因为不具有"差错控制"、"流量控制"、"连接建立和释放"、"可靠传输管理"这些功能 ,所以【网络层】只可以向上层提供【无连接的服务,无可靠性、有序性保障的信息(数据报形式数据)】
而TCP/IP的【传输层】可以通过【协议】的形式,来向上层提供【有连接的服务,可靠性、有序性保障的信息(用TCP协议实现)】和【无连接的服务,无可靠性、有序性保障的信息(UDP协议实现)】