一、进程之间的通信
从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也处于用户功能中的最底层。下面通过一个示意图来说明运输层的作用,图中的 5,4,3,2,1 分别对应网络体系架构中的应用层,传输层,网络层,链路层与物理层。
从 IP 层(网络层)来看,通信的两端是两台主机。 IP 数据报的首部明确的标志了两台主机的 IP 地址。但“两台主机之间的通信”这种说法还不够清楚,因为真正通信的实体是在主机中的进程。因此严格的讲,两台主机之间进行通信就是两台主机的应用进程互相通信。因此可以看出网络层与运输层有明显的区别:网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
二、复用与分用
在上面的图中,主机 A 的应用进程 AP1 和主机 B 的应用进程 AP3 通信,与此同时,应用进程 AP2 也和也和对方的应用进程 AP4 通信。表明应用层有一个很重要的功能—复用(multiplexing)和分用(demultiplexing)。这里“复用”是指在发送方的不同的应用进程都可以使用同一个运输层协议传送数据(需要加上适当的头部信息)。“分用”是指接收方的运输层在剥去报文的头部后能够把这些数据正确交付给目的地的应用进程。
应用层所有的应用进程都可以通过运输层传送到 IP 层(网络层),这就是复用。运输层从 IP 层收到发送给各应用进程的数据后,必须交付给指明的各应用进程,这就是分用。
三、两个主要协议
根据引用程序的不同,运输层提供了两种不同的协议,即面向连接的传输控制协议 TCP(Transmisssion Controll Protocol) 和无连接的用户数据报协议 UDP(User Datagram Protocol)。
UDP 在传输数据之前不需要先建立连接,UDP 传送的数据单位是 UDP 用户数据报。远程主机的运输层在收到 UDP 报文后,不需要做出任何的确认。虽然 UDP 不提供可靠的交付,但是在某些情况下却是一种最有效的工作方式。
TCP 提供面向连接的服务,TCP 传送的数据单位是TCP 报文段。在传输数据之前必须先建立连接,数据传送结束后需要释放连接。TCP 不提供广播或多播服务。由于 TCP 提供可靠的、面向连接的运输服务,因此相对于 UDP 不可避免的增加了很多的开销,比如确认流量控制、计时器以及连接管理等。
关于TCP 与 UDP 这里只是作了一个简单的概述,在后面的博文后对这两个协议分别作具体的介绍。下面是一些应用和应用层协议主要使用的运输层协议:
应用 | 应用层协议 | 运输层协议 |
电子传送 | SMTP(简单邮件传送协议) | TCP |
万维网 | HTTP(超文本传输协议) | TCP |
文件传送 | TFTP(简单文件传送协议) | UDP |
域名解析 | DNS(域名系统) | UDP |
IP 地址配置 | DHCP(动态主机配置协议) | UDP |
四、端口
我们知道主机之间的通信实际上是应用进程之间的通信,但是一个主机上可能会有很多应用进程,如何识别这些应用进程呢?解决这个问题的方法就是在运输层使用协议端口号(protocol port number),或者简称为端口(port)。这就意味着,虽然通信的终点是应用进程,但只要把传送的报文交给目的主机的某个合适的端口,剩下的工作就由 TCP 或 UDP 来完成。
端口分为硬件端口与软件端口,硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
由此可见,两个计算机中的进程要互相通信,不仅需要知道对方的 IP 地址(为了找到对方的计算机),而且还需要知道对方的端口号(为了知道对方计算机中的某个进程)。这个过程可以类似我们生活中的寄信,当我们要给某人写信时,就必须要在信封上标注收件地址(相当于 IP 地址),还要写上收件人的名字(相当于端口号),除了需要标注收件人的信息外,还需要在信封上写明自己的地址,让收件人知道是谁的来信。
五、总结
- 网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
- 运输层有两个主要的协议:UDP 和 TCP。它们都提供复用和分用,以及差错检测的功能。UDP 提供不可靠的数据交付,TCP 提供可靠的数据交付。
- 两台计算机中的进程要互相通信,不仅需要知道对方的 IP 地址(为了找到对应的计算机),还需要知道对方应用进程的端口号(为了找到对方计算机中的应用进程)。
参考书籍:
《计算机网络》 谢希仁 著