聊聊计算机网络传输层


如上图,计算机网络在TCP/IP概念模型中被分为4层,传输层位于应用层和网络层之间,它是分层的网络体系结构的重要组成部分。该层为运行在不同主机上的应用进程提供直接通信起着至关重要的作用。这篇文章,就聊一聊传输层。

在协议栈中,传输层位于网络层之上。网络层提供了主机之间的逻辑通信,而传输层为不同主机上的进程之间提供了逻辑通信。理解传输层与网络层的这种本质差别对理解传输层提供的服务至关重要。下面我们举一个类比的例子,来说明。

一个类比例子

考虑有两个家庭,一家位于美国东海岸,一家位于美国西海岸,每家有12个孩子。东海岸的孩子们是西海岸家庭孩子们的堂兄弟姐妹。这两个家庭的孩子们喜欢彼此通信,每个人每周要给每个堂兄弟姐妹写一封信,每封信都用单独的信封通过传统的邮政服务发送。因此,每个家庭每周向另一家庭发送144封信。(如果他们有电子邮件的话,这些孩子可以省不少钱!)每个家庭有一个孩子负责收发邮件,西海岸家庭是Ann而东海岸家庭是Bill。每周Ann去她所有的兄弟姐妹那里收集邮件,并将这些邮件交到每天到家门口的邮政运输车上。当信件到达西海岸家庭时,Ann也负责将信件发到她的兄弟姐妹手上,东海岸家庭中Bill也负责类似工作。

-- 例子来源于《计算机网络-自顶向下的方法

我们可以做下面这样的类比:

1
2
3
4
5
应用层报文  = 信封上的字符
进程     = 堂兄弟姐妹
主机(端系统) = 家庭
运输层协议  = Ann和Bill
网络层协议  = 邮政服务

在这个例子中,网络层就像邮递员,而运输层就像Ann和Bill。现在我们再来理解上面的这句话:网络层提供了主机之间的逻辑通信,而传输层为不同主机上的进程之间提供了逻辑通信。邮政服务知识将信件送到指定的家庭,它不会将信件分发到家庭的具体成员手中。这个分发的工作则是由Ann和Bill提供的。值得注意的是Ann和Bill都是在各自的家里进行工作的,他们没有参与任何中间邮件中心对邮件进行分拣的工作,也没有将邮件从一个邮件中心送到另一个邮件中心。相应的,运输层协议只工作在端系统中。在端系统中,运输层协议将来自应用进程的的报文移动到网络边缘(即网络层),但对有关这些报文在网络层中如何移动却不做任何规定。
由这个例子,我们可以做出如下概括:网络层提供了不同端系统的数据交付服务,而传输层则将这种不同主机间的交付拓展为了运行在不同端系统上的两个进程之间的交付。进程到进程之间的数据交付是传输层提供的最基本的服务之一。

多路复用与多路分解

传输层的这种进程间的数据交付是怎样实现的呢?众所周知,一个网络应用程序有一个或多个套接字(Socket),它相当于是从网络向进程传递数据和从进程向网络传递数据的门户。在接收端,传输层实际上并没有将数据交付给进程,而是将数据交给了一个中间套接字。由于在任一时刻,在接收主机上可能不止一个套接字,所以每个套接字都有唯一的标识符。

现在我们考虑接收主机怎样将一个到达的运输层报文段定向到适当的套接字。为此目的每个运输层报文段中具有几个字段。在接收端,运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(这将在以后用于分解)从而生成报文段,然后将这些报文段传递到网络,所有这些工作被称为多路复用。联系上面的例子,Ann收集家庭成员的信件,并交到每天到家门口的邮政运输车上就是多路复用;而Ann分发收到的邮件给各个兄弟姐妹的过程则为多路分解。

传输层提供的其他服务

上面讲到了传输层通过多路复用和多路分解将不同主机间的交付拓展为了运行在不同端系统上的两个进程之间的交付。进程到进程之间的数据交付是传输层提供的最基本的服务之一。除此之外传输层还提供了许多其它的服务。下面进行列举:

  • 进程间的数据交付(TCP,UDP)
  • 完整性检查(TCP,UDP)
  • 可靠数据传输(TCP)
  • 拥塞控制(TCP)

这里先列举出来,置于这些服务究竟是怎么实现的,请关注后续文章。

结论

1.运输层拓展了网络层的主机到主机的数据交付,提供了进程之间的数据交付。
2.运输层只运行在端系统中。
3.进程间的数据交付只是传输层最基本的功能之一,传输层还可以提供很多其他的功能。