传输层与网络层区别
在协议栈中,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。这个区别很微妙,但却非常重要。下面我们用一家人作为类比来说明一下这个区别:
假设想有两所房子,一个位于东海岸而另一个位于西海岸,每所房子里都住着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 的延迟和带宽保证,那么传输层协议也不能提供进程之间传送的消息的延迟和带宽保证。