设想有两座相隔遥远的房子,一座位于东海岸,另一座位于西海岸。每座房子里都有10个堂兄妹,他们喜欢通过书信保持联系。每周,每个孩子都会给他们的堂兄妹写一封信,这些信件由传统的邮局递送。
在这个场景中,邮递服务负责将信件从一座房子传递到另一座房子,它提供的是两座房子之间的逻辑通信。而在每座房子内部,有一个孩子扮演着重要的角色,他们负责收集和分发信件,确保每个堂兄妹都能收到其他人的来信。在西海岸的房子里,这个孩子叫Ann;在东海岸的房子里,这个孩子叫Bill。
这个例子中,房子代表主机,堂兄妹代表进程,信封里的信件代表应用程序的消息,邮递服务代表网络层协议,而Ann和Bill则代表传输层协议。
网络层协议负责将消息从一个主机传送到另一个主机,类似于邮递员将信件从一座房子送到另一座房子。而传输层协议则关注于主机内部进程之间的通信,就像Ann和Bill在他们的家中收集和分发信件。
重要的是,传输层协议不负责网络层中的数据传输细节,比如如何在各个邮递中心分类和转发邮件。同样,网络层的路由器不会识别或处理传输层添加在消息上的任何信息。
如果Ann和Bill去度假了,其他的孩子Susan和Harvey可能会接替他们的工作。然而,Susan和Harvey的服务可能与Ann和Bill不同,他们可能会更少地收集和分发信件,甚至有时会丢失信件。这就类似于不同的传输层协议为应用程序提供不同的服务模型。
此外,传输层协议的服务质量也受限于网络层协议。例如,如果邮递服务无法保证信件在两座房子之间的传递时间,那么Ann和Bill就无法保证堂兄妹之间的信件到达时间。
计算机网络中的传输层和网络层也是如此。传输层协议,如TCP和UDP,提供不同的服务模型,以满足不同应用程序的需求。而网络层协议,如IP,则负责将数据包从源主机传输到目的主机,但不涉及主机内部进程之间的通信。
通过这个比喻,我们可以更直观地理解网络层和传输层的角色和功能,以及它们如何协同工作以实现有效的数据通信。
在协议栈中,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。这个区别很微妙,但却非常重要。下面我们用一家人作为类比来说明一下这个区别:
假设想有两所房子,一个位于东海岸而另一个位于西海岸,每所房子里都住着10个小孩。东海岸的房子里的小孩和西海岸房子里的小孩是堂兄妹。两所房子里的孩子喜欢互相通信——每个孩子每周都给每一个堂兄妹写一封信,每一封信都由老式的邮局分别用信封来寄。
这样,每一家每周就都有100封信要送到另一家(这些孩子如果可以用电子邮件的话就可以省掉很多钱了!)在每一家里面。都由一个孩子——西海岸的房子里的Ann和东海岸房子里的BilI——负责邮件的收集和分发。每周Ann都从她的兄弟姐妹那里收集信件,并将这些信件送到每天都来的邮递服务员那里。当信件到达西海岸的房子,Ann又将这些信件分发给她的兄弟姐妹。BilI在东海岸有着同样的工作。
在这个例于中,邮递服务提供着两所房子之间的逻辑通信——邮递服务在两所房子之间传递邮件,而不是针对每个人的服务。另一方面,Ann和BilI提供堂兄妹之间的逻辑通信——Ann和BilI从他们的兄弟姐妹那里收集邮件并将邮件递送给他们。注意,从这些堂兄妹的角度看,Ann和BilI是邮件的服务人,尽管他们俩只是端到端寄送服务的一部分(终端系统部分)。
这个例子是传输层和网络层之间的关系的一个形象比喻: 主机(也称为终端系统)=房子 进程 = 堂兄妹
应用程序消息 = 信封里的信
网络层协议 = 邮递服务(包括邮递员) 传输层协议 = Ann和Bill
继续这个例子,Ann和Bill各自在他们的家中做所有的工作:
他们不负责各个邮递中心的邮件分类工作以及将邮件从一个中心送到另一个中心的工作。这正与传输层协议在终端系统中的作用一样。在一个终端系统中,传输层协议将应用进程的消息传送到网络边缘(也就是网络层),反之亦然:但是它并不涉及消息是如何在网络层之间传送的工作。事实上,中间路由器对于传输层加在应用程序消息上的信息不能做任何识别和处理。
继续这个例子,假设Ann和Bill都去度假了,另外一对堂兄妹——Susan和Harvey代替——他们来提供家庭内部的邮件收取和分发工作。不幸的是,Susan和Harvey所提供的收集和分发工作与Ann和Bill所提供的不完全相同。对于年龄更小的Susan和Harvey来说,他们收集和分发邮件的频率比较少,而且偶尔会发生丢失信件的事情。
这样,这一对堂兄妹Susan和Harvey提供了一套不同于Ann和Bill的服务(也就是说,服务模型不同)。打比方来说,正如一个计算机网络可以接受不同的传输层协议一样,每一个协议为应用程序提供不同的服务模型。
Ann和Bill所能提供的服务明显受限于邮递服务所提供的服务。例如,如果邮递服务并不提供在两所房子之间传递邮件所需要的最大时限(如3天),那么Ann和Bill也就不能保证各个堂兄妹之间的邮件的最大延迟。
同样,传输层协议所提供的服务也通常受限于位于其下方的网络层协议。如果网络层协议不能提供主机之间传送的PDU的延迟和带宽保证,那么传输层协议也不能提供进程之间传送的消息的延迟和带宽保证。