(十八)运输层--概述

运输层概述

从本文开始,我们将学习运输层。

进程之间的通信

从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能的最底层。当网络的边缘部分中的两台主机使用网络的核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

从IP层来说,通信的两端是两台主机。IP数据报的首部明确的标志了这两台主机的IP地址。但“两台主机之间的通信”这种说法还不够清楚,因为真正进行通信的实体是在主机中的进程,是这台主机中的一个进程和另一台主机中的一个进程在交换数据(通信)。因此严格的讲,两台主机进行通信就是两台主机中的应用进程互相通信。IP协议虽然能把分组送到目的主机,但是这个分组还停留在主机的网络层而没有交付主机中的应用进程。从运输层的角度看,端到端的通信是应用进程之间的通信。例如,某用户在使用浏览器查找网站的信息时,其主机的应用层运行浏览器客户进程,此时用户若要发送邮件,那么主机的应用层就还要运行电子邮件的客户进程。如下图所示:

主机A的应用进程AP1和主机B的应用进程AP3通信,而与此同时,应用进程AP2也和对方的应用进程AP4通信。这表明运输层有一个很重要的功能——复用(multiplexing)和分用(demultiplexing)。这里的复用是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据,而分用是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。

网络层为主机之间提供逻辑通信,运输层为应用进程之间提供端到端的逻辑通信。根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。

运输层的两个主要协议

TCP/IP运输层的两个主要协议都是互联网的正式标准,即:
(1)用户数据报协议UDP(User Datagram Protocol)
(2)传输控制协议TCP(Transmission Control Protocol)

按照OSI的术语,两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元TPDU(Transport Protocol Data Unit)。但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文段或UDP用户数据报。

UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP却是一种最有效的工作方式。

TCP则提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或单播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免的增加了许多的开销,如确认、流量控制、计时器、连接管理等。下表给出了一些应用和应用层协议主要使用的运输层协议:

运输层的端口

应用层的所有应用进程都可以通过运输层再传送到网络层,这就是复用。运输层从网络层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程,这就是分用。显然,给应用层的每个应用进程赋予一个非常明确的标志是至关重要的。解决这个问题的方法就是在运输层使用协议端口号。虽然通信的终点是应用进程,但只要把所传送的报文交付目的主机的某个合适的端口,剩下的工作就由TCP和UDP来完成。

请注意,这种在协议栈层间的抽象的协议端口是软件端口,和路由器或交换机上的硬件端口是完全不同的概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

TCP/IP的运输层用一个16位端口号来标志一个端口。但请注意,端口号只具有本地意义,它只是为了标志本计算机应用层中的各个进程在和运输层交互时的层间接口。在互联网不同计算机中,相同的端口号是没有关联的。16位的端口号可允许有65535个不同的端口号,这个数目对一个计算机来说是足够用的。

由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,而且要知道对方的端口号。运输层的端口号分为下面的两大类:
(1)服务器端使用的端口号
这里又分为两类:

  • 熟知端口号或系统端口号
    数值为0~1023。IANA把这些端口号指派给了TCP/IP最重要的一些应用程序,让所有的用户都知道。当一种新的应用程序出现后,IANA必须为它指派一个熟知端口,否则互联网上的其它应用进程就无法和它进行通信。下表给出了一些常用的熟知端口号:

  • 登记端口号
    数值为1024~49151。这类端口号是为没有熟知端口号的应用程序使用的。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。
    (2)客户端使用的端口号
    数值为49152~65535。由于这类端口号仅在客户进程运行才动态选择,因此又叫做短暂端口号。这类进程留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的端口号,因而可以把数据发送给客户进程。通信结束后,刚才已使用过的客户端口号就不复存在,这个端口号就可以供其它客户进程使用。
原文地址:https://www.cnblogs.com/cone/p/14968587.html