在这个视频中,我们要探讨TCP/IP模型。对于TCP/IP模型考试的要求是这样的,首先我们需要记住它各个层次的名称和顺序,以及我们需要了解TCP/IP 模型和OSI参考模型,它们在设计理念上有哪些区别,设计理念的区别又导致了TCP/IP模型和OSI参考模型的各个层次之间功能上也会有一些区别。接下来,我们会依次展开探讨这些问题。
首先我们尝试记住TCP/IP模型的各个层次。TCP/IP模型总共只有四个层次,第一层叫做网络接口层,它的作用类似于OSI参考模型的第一层和第二层。接下来TCP/IP模型的第二层叫做网络层,它的作用和OSI参考模型的网络层是类似的。紧接着,第三层传输层,它和OSI参考模型的传输层也非常类似,最顶层是应用层,这一层的作用相当于OSI参考模型的会话层、表示层以及应用层。这是TCP/IP模型的四个层次,接下来我们要探讨TCP/IP模型和OSI参考模型在设计理念上有哪些区别。
首先我们来回顾OSI参考模型的5、6、7三个层次,重点关注第五层和第六层。在计算机网络的分层结构当中,上面一层会使用下一层提供的服务,或者说会使用下一层已经实现的功能。在OSI参考模型中,应用层会使用表示层的功能,也就是数据格式转换,而表示层又会使用会话层的功能,也就是会话管理。之前的视频中我们说过会话管理的效果类似于文件的断点续传,现在思考这样一个问题:会话管理的功能和数据格式转换的功能,对于每一个应用程序都是必要的吗?显然不是。比如说一个应用给另一个应用传文件,如果左边这台机器的数据编码格式和右边这台机器数据编码格式是完全一样的,数据格式转换的功能就没有必要存在了。另一方面,如果传文件的过程当中网络出现了问题,也就是文件的传输可能在中间某个点被中断了。那么当网络重新恢复的时候,我们必须断点续传吗?也不一定,事实上我们也可以选择在网络恢复的时候重新传整个文件。这也是一种可行的解决方案。所以会话管理这个功能对于有些应用程序来说,它也是可有可无的。既然对于某些应用程序来说,数据格式转换、会话管理这些功能可有可无的话,表示层和会话层这两个层次是不是就也没有必要非得让它存在?如果我们去掉这两个层次,其实可以让整个网络体系结构更简洁,层次越少,其实效率也会越高。
这就是TCP/IP模型和OSI参考模型在设计上的第一个很大的不一样,它把表示层和会话层给干掉了。因为表示层和会话层所提供的这些功能,并不是所有的网络应用都需要的,所以这两个层次不需要存在。
如果说某些应用程序,它确实需要数据格式转换、会话管理这些比较个性化的功能怎么办呢?我们只需要让这些比较个性的功能用应用层的某些协议去实现就可以了。假设微信和微信之间的通信需要使用会话管理的功能,那么这两个应用程序在通信的时候,使用包含会话管理功能的协议就可以。相反的,如果不需要使用会话管理功能,我们就换一个不包含会话管理的协议。也就是说,我们把这两种功能放在应用层去实现,应用程序对于这两种功能使用与否的选择是非常灵活的。相比之下,在OSI参考模型中,一个应用程序,不管是否需要使用数据格式转换,是否需要使用会话管理的功能,它一定都会经过表示层和会话层的处理。对于这两个层次功能的选择是不灵活的,非选不可。所以TCP/IP模型的应用层在功能上其实包含了OSI参考模型的表示层,以及会话层。只不过TCP/IP模型的应用层在实际使用的时候功能的选择会更灵活。
接下来我们再来回顾OSI参考模型的第一层和第二层。第一层物理层,需要去定义电路接口的参数,比如说网线的接口长什么样子,光纤的接口长什么样子,是什么尺寸,以及电信号、光信号分别是什么含义等等,这些东西都需要在物理层中去进行说明。另外,数据链路层需要实现差错控制、流量控制的功能。也就是说OSI参考模型对于第一层要干什么,第二层要干什么,分别需要支持哪些功能,具有哪些特性,都需要有清晰明确的规定。这就意味着一个网络硬件厂商,他在研发物理层和数据链路层的设备的时候,必须遵循OSI参考模型的规定。从某种意义上来讲,OSI参考模型对于第一层,第二层的规定太死,反而会导致这些网络硬件厂商在进行设备研发的时候更不灵活,本来可以有更多的创新,但是为了贴合这个参考模型的要求,创新被限制了。所以TCP/IP模型在底层的部分,它有不一样的设计思路。TCP/IP模型认为,网络硬件的种类很繁多,并且通信技术其实日新月异,可能每隔几年就会有更高性能的设备,更先进的通信技术出现,所以TCP/IP 模型认为,在网络层之下的部分,到底如何实现相邻的两个节点之间比特流的传输,这个其实不应该有太多的限制,这是TCP/IP模型的一个理念。
基于这样的理念,TCP/IP模型在网络层之下,只有一层叫做网络接口层。TCP/IP模型只规定网络接口层的任务是什么,就是要实现相邻节点之间的数据传输。如果从垂直视角来看,就是为网络层传输分组,网络层会把分组交给这个网络接口层,网络接口层可以用比较灵活多样的方式去传输这个分组的数据,具体是怎么传输的不做特别的规定。这样的设计思想使得TCP/IP体系结构拥有更强的灵活性和适应性,每一个网络设备商都可以去发挥自己的创造力,去研发更先进的,更好的网络接口层技术,只要研发的通信设备、通信技术能够和网络层正确的交互就可以了。
我们做一个阶段性的总结, OSI参考模型的会话层和表示层主要的功能是会话管理和数据管理,因为这两个功能并不是所有的应用都需要的,所以这两个层次可以直接干掉, TCP/IP模型会在应用层去灵活的支持数据格式转换和会话管理这些比较个性化的功能。另一方面,OSI参考模型的物理层和数据链路层,详细的规定了这两个层次需要支持哪些功能,规定的太多,反而会导致物理层和数据链路层的设备厂商,他们在生产研发设备的时候不太好发挥,有很多限制。相比之下TCP/IP 模型的网络接口层,在功能上虽然类似于物理层和数据链路层。但是TCP/IP模型对于网络接口层要实现哪些功能,需要支持哪些协议,并没有做具体的规定,而是交给网络设备商去自由的发挥,这也使得TCP/IP模型能够被更多的设备厂商所支持,最终也使得TCP/IP模型在商业上取得了巨大的成功。
到目前为止,我们探讨的是这两种模型在结构上的明显区别,现在我们关注中间的两个层次,可以看到两种模型都有网络层,网络层之上也都是传输层。那么这些层次之间又有哪些设计理念上的区别呢?我们不妨先回顾一下OSI参考模型的网络层和传输层分别需要实现哪些功能。首先OSI的网络层和传输层都需要实现差错控制、流量控制,连接管理和可靠传输管理这些功能。只不过,网络层针对的是数据报,而传输层针对的是报文段。另外,数据链路层也需要支持差错控制和流量控制的功能,只不过数据链路层针对的是帧。
之前的视频中我们说过,各个层次传输数据的单位是不一样的,越上面的层次,每一次传输的数据单位也会更长,比如说应用层以报文为单位,而报文交给传输层之后,传输层会把报文拆分成多个报文段。当然,如果报文很小的话,也可以不拆分。类似的,当传输层把报文段交给网络层之后,网络层会把比较长的报文段拆分成多个数据报,或者说拆分成多个分组。类似的,网络层把一个分组交给数据链路层之后,数据链路层又会把比较长的分组拆分成多个帧。也就是说,越靠下的层次,传输数据的单位是越局部的,而越靠上面的层次,传输的数据是越接近全局的。显然数据的局部正确不可以推出数据的全局正确,也就是说数据链路层只能确保每一个帧的传输是没问题的,但是无法确保每一个分组的传输是没有问题的。因此OSI参考模型认为,在网络层这儿,又需要对分组进行差错控制、流量控制,以此去保证分组的数据传输没有问题。同样的道理,网络层保证了分组局部数据的正确性,但是无法保证报文段这个全局数据的正确性。因此在传输层,OSI又会再一次进行差错控制、流量控制,以确保报文段的传输是没有问题的,连接管理和可靠传输这两个功
能也是类似的道理,就是说网络层这儿可以确保数据分组的传输有序、不重复、不丢失。但是不意味着报文这个全局数据的传输有序、不重复、不丢失。所以网络层这儿实现过的功能,在传输层这儿又需要再重新去支持,重新去实现。这是OSI参考模型的设计思路。数据的局部正确,不可以保证数据全局正确。我们不妨换一个思路,如果我们能够确保数据的全局是正确的,是否可以推出数据的局部也是正确的。显然,这个逻辑也是成立的。也就是说,事实上,网络层、数据链路层、物理层这几个层次,它可以不管自己的这个数据传输到底有没有出现错误,可不可靠,反正最终都让这个传输层以报文段为单位去确保数据的传输是没有出错的,是有序的,是可靠的就可以了。因为只要我们检测出数据全局正确,那么数据的局部肯定也是正确的。
所以基于这样的思路,TCP/IP模型的网络层,去除掉了差错控制、流量控制、连接的管理以及可靠传输管理。它去除掉了这些功能,网络层去除掉这些功能之后,就会使得网络层的数据传输变得不再可靠。比如说现在传输层把一个报文段交给网络层,让它去传输,网络层会把报文段拆分成若干个分组,然后再把分组交给网络接口层去传输,网络接口层的数据传输是不可靠的。也就说一个分组从A结点传输到相邻的B结点,在这个传输的过程当中,分组的数据就有可能出现错误了,中间节点的网络层接收到一个分组之后,即便这个分组有可能出错,甚至分组有可能会丢失,但都没有关系,反正中间节点接收到一个分组之后,把它尽最大努力转交给下一个节点就可以了。所以最终目的结点接收到的这些分组序列有可能是有错误的,有可能是失去的。这些分组最终会被合并成报文段,再转交给上层的传输层。只不过刚才我们说,由于中间的传输过程网络层并没有进行差错控制、流量控制、连接管理、还有可靠传输管理。因此,最终这个目的结点收到的报文段就有可能是有问题的,所以TCP/IP模型的网络层,它的理念就是主打一个摆烂,我只尽我最大的能力去交付这些分组,去传输这些分组。数据的传输我知道是不可靠的,但是我就是摆烂。摆烂的结果就是
目的节点的传输层,他收到的报文段数据有可能是错的,当然也有可能是对的。
接下来目的节点的传输层就会对报文段进行差错控制、流量控制、连接管理、可靠传输管理去确保报文段的传输,这个全局数据的传输是没有问题的。所以TCP/IP模型它并不是完全不管数据传输的正确性、可靠性这些东西,只不过这些任务都会由传输层来完成。
相比之下OSI参考模型的网络层也需要实现差速控制、流量控制、连接的建立与释放、可靠传输的功能。这些额外的功能就会使得网络的核心部分,这些路由器它需要承载更多的事情,功能变得更复杂,负载变得更高,造价也会变得更高。而TCP/IP模型,它的网络层功能相对简单,这也使得网络的核心部分这些路由器,它的负载变得更低,功能变得更简单,造价也可以变得更低。刚才也说了TCP/IP模型的传输层会负责保证数据的正确性、有序性、可靠性等等这些方面。也就是说数据传输的正确性、可靠性的保障是交给了网络的边缘部分,交给了这些主机。所以相当于把网络核心部分的压力降低了,然后把压力给到网络的边缘部分的主机,这就会使得网络的核心部分,这些路由器传输分组的整体性能可以得到大幅度的提升,因为它不需要去管什么差错、流量,这些乱七八糟的东西。所以TCP/IP模型和OSI参考模型在网络层这个层次,设计理念上是有很大的区别的。
在这个视频中,我们介绍了TCP/IP模型,TCP/IP相比于OSI参考模型来说,层次更少也更简洁。在这个图当中,总结了的TCP/IP四个层次,分别需要完成什么样的任务,以及各个层次具体需要实现哪些功能,标蓝字的这些部分是TCP/IP模型和OSI参考模型有不同的地方。注意在网络层这个地方差错控制、流量控制,连接管理,可靠传输管理这几个功能点都是画了删除线的。这就意味着,在OSI参考模型中,这几个功能是存在于网络层当中的,但是在TCP/IP模型当中,这几个功能从网络层当中删除了。
我们在这个视频中也简单介绍了OSI和TCP/IP它们的层次结构有什么区别,OSI参考模型的会话层、表示层和应用层,在TCP/IP模型当中对应应用层。而OSI参考模型的物理层和数据链路层的功能,对应了TCP/IP模型的网络接口层。
另外在这个视频中,我们也详细介绍了OSI参考模型和TCP/IP模型网络层的设计理念区别,OSI参考模型要求网络层必须实现差错控制、流量控制、连接管理,还有可靠传输管理这些功能。而TCP/IP模型的网络层不需要支持这几个功能,也正是因为这个差别,在OSI参考模型中,网络层可以向上层,也就是向传输层提供有连接可靠的服务以及无连接不可靠的服务。之前我们提到过分组交换,或者说数据报交换,其实就是无连接不可靠的服务。网络层在传输分组的时候不确保分组有序到达,也不保证分组不丢失。所以当不使用网络层的差错控制、流量控制、连接管理,还有可靠传输管理这些功能的时候,它所能提供的就是数据报服务,是无连接不可靠的。而如果网络层的这些功能全部被启用,那么它就可以为上层传输层提供有连接可靠的服务,也就是虚电路交换的服务。在虚电路交换中,可以保证分组是有序到达的,无差错的以及不丢失的。再看TCP/IP的网络
层,由于它不支持差错控制、流量控制这些乱七八糟的东西,所以TCP/IP的网络层只能向上层提供无连接不可靠的服务,也就是不保证分组的正确性、有序性。另外在TCP/IP模型中数据传输的可靠性是由传输层去实现的,如果传输层使用TCP协议,就可以保证数据的传输是有连接的、可靠的,也就是说数据的正确性,有序性等等都可以得到保证。当然TCP/IP模型的传输层也可以向上层应用层去提供无连接不可靠的服务。如果使用UDP协议去传输数据的话,那么数据的传输就是无连接不可靠的。关于TCP和UDP的具体内容我们会在之后的章节中进行更详细的探讨,这儿大家先有个印象就可以。事实上,有的应用程序进行网络通信的时候,是可以允许数据的传输不可靠这件事情的。比如说当我们看直播的时候,我们可能对直播的流畅性要求很高,但是直播的画面丢失了几个帧,或者直播的声音停了几秒钟,这个其实是可以忍受的。所以在现在的网络应用当中,无连接不可靠的这种数据传输服务,也是有必要存在的。相比之下OSI参考模型大概是上个世纪80年代提出来的,在那个年代其实并没有预见网络世界能够发展的如此迅速,应用如此广泛。所以那个年代的设计者认为,传输层只能向上层提供有连接的可靠的数据传输服务。也就是说,数据传输出现一些错误或者出现丢失是不被允许的,是不可以容忍的。这也是OSI的传输层和TCP/IP传输层的一个区别。在考试中,这两种体系结构的网络层和传输层是最喜欢放在一起来考察的。随着这门课后续章节的学习,大家对于这些功能到底有什么作用,以及是如何确保数据传输的正确可靠的,会有更直观的理解。所以在当前阶段看到这些什么有连接的可靠的服务,无连接不可靠的服务,看见这些东西感觉比较模糊是很正常的。
以上就是这小节的全部内容。