从本节内容开始,我们学习TCP/IP模型的传输层的知识。传输层是TCP/IP模型中的重要组成部分,如果没有传输层的处理,那么源主机发送的IP数据包到达目的主机之后,目的主机将不知道这个数据是哪个应用程序的数据,就不能很好地跟应用层对接,最终无法面向用户。所以传输层是一个非常重要存在,在各类考试当中,尤其是计算机考研408科目中,根据传输层的知识点出的题目也占有较高的比重。
传输层的任务
首先,我们仍然要回忆一下TCP/IP模型,传输层的位置处在网络层和应用层之间,它接受网络层提供的服务,同时为应用层提供服务。
从数据封装与解封装过程的角度看,发送方应用层的数据到达传输层,加上传输层的首部,向下交给网络层;接收方网络层去除 IP首部后将其数据部分向上交给传输层,由传输层进行处理。
传输层负责的任务是:为两台主机中的应用进程之间的通信提供通用的数据传输服务。在这里,有两个主要的地方:
第一,应用进程,这是一个计算机操作系统领域的概念,可以通俗的理解为计算机中正在运行的应用程序。那么,传输层为两台主机中的应用进程之间的通信提供数据传输服务是什么意思呢?其实,我们之前所说的两台主机之间的通信,这种说法是不够准确的,更准确的说法是两台主机的应用进程之间在互相通信。例如,QQ、微信这是两个不同的应用程序,它们在运行的时候各自创建一个应用进程,主机A的用户用QQ和主机B的用户消息聊天,这其实是双方主机上的QQ进程在通信。
那么在这里,传输层存在的意义就在于:如果主机B用户同时登录着QQ、微信,还有其他的应用程序,那么当主机A的消息发送过来以后,让主机B能够知道这是一个应该由QQ进程接收的消息。
所以,网络层负责解决的是:数据怎么能够从源主机传输到目的主机;而传输层负责解决的是:数据到达目的主机之后,应该交由哪一个具体的应用程序来接收。
谢希仁教授的教材中有这样一个很好的例图(图中,AP1、AP2指的就是不同的应用进程;另外图中还标注出了端口,端口的概念在本节的后半部分会解释):
第二,通用的数据传输服务,“通用”的意思就是,不针对特定的应用,多种应用可以使用同一个运输层服务。拿上面的例子来说,不管是QQ还是微信,或者其他的应用,这些数据在经过传输层封装的时候都是使用传输层的协议(TCP或UDP)。
这就有点类似于我们前面学过的多路复用,发送方多个应用程序的数据“复用”传输层的TCP或UDP,数据到达接收方的传输层后再进行“分用”,上交给应用层的不同应用程序。
传输层的两大协议
传输层这一部分的学习内容,其实主要就是学习传输层的两大协议:TCP和UDP。这两个协议各有特点:TCP提供可靠传输的机制,UDP提供不可靠但简单有效的传输机制。我们知道网络层的IP协议提供的是尽最大努力交付的不可靠的服务,如果数据传输出错,会通过ICMP差错报告通知源主机,由高层来实施处理,这里的高层就是传输层,如果传输层使用TCP协议,TCP会通过重传数据等方式解决问题。
不过这两种协议虽是一个可靠,一个不可靠,但都有各自的用处:对一些时延不敏感,而且要保证数据准确度的应用,应使用可靠的TCP协议传输;而对一些时延比较敏感,比如在网络上看个直播,这时候就需要用UDP协议传输了,虽然不如TCP可靠,但是使用UDP反而效果要好,因为即使在UDP传输过程中,可能会出现偶尔的丢包,表现在看直播上会有一点小卡顿,但并不会影响太大。试想这种情况下如果用TCP的话,只要出一点错误就重传一次数据,那么直播的画面可能一直在重复“倒带”,观看效果就更差了。
好了,以上就是传输层第一节的内容,主要是了解传输层为主机之间不同应用进程的通信提供服务。包括两大协议,TCP和UDP。下一节内容我们学习另一个重要的基础性概念——端口号。
参考教材:谢希仁《计算机网络》第八版