计算机网络之运输层

开发工具与关键技术:计算机
作者:肖春庆
撰写时间:2020年05月18日
运输层协议概述:从通信处和信息处理的角度看,运输层(或传输层)向它上面的应用层提供端到端通信服务,属于面向通信部分的最高层,同时也是用户功能中的最低层。当位于网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
从IP层来说,通信的两端是两个主机,然而严格地讲,两个主机进行通信实际上就是两个主机中的应用进程互相通信。IP协议虽然能把分组送到目的主机,但这个分组还停留在主机的网络层,并没有交付给主机中的应用进程。从运输层的角度看,通信的真正端点并不是主机而是主机中的进程,而端到端的通信是应用进程之间的通信。

运输层很重要的功能就是复计算机网络之运输层用(multiplexing)和分用(demultiplexing)。“复用”是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据,而“分用”是指接收方的运输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。运输层提供应用进程间的逻辑通信。“逻辑通信”:运输层之间的通信好像是沿着水平方向传送数据,但事实上这两个运输层之间并没有一条水平方向的物理连接,要传送的数据是沿着上下多次的方向传送的。
也就是说,网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。因特网的运输层为应用层提供两种不同的运输协议:面向连接的TCP和无连接的UDP。
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(即只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道;但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。
因特网(TCP/IP网络)为上层应用提供了两个不同的运输层协议:用户数据报协议(User Datagram Protocol,UDP)和传输控制协议(Transmission Control Protocol,TCP)。UDP在传送数据之前不需要先建立连接,尽管不提供可靠交付,但有些情况却是高效的;TCP则是提供面向连接的服务,传送数据之前必须先建立连接,结束后释放连接,虽然TCP提供可靠的运输服务,但不可避免地增加许多开销。
计算机网络之运输层
在TCP/IP网络中,使用一种与操作系统无关的协议端口号(protocol port number)(简称端口号)来实现对通信的应用进行的标志。端口是应用层与运输层之间接口的抽象,端口号是应用进程的运输层地址。因此,运输协议数据单元的首部中必须包含两个字段:源端口号和目的端口号。
UDP报文有两个字段:数据字段和首部字段。首部字段只有8个字节,由4个字段组成,每个字段都是两个字节。各个字段意义:源端口、目的端口、长度和检验和(差错检验码)。UDP通过二元组(目的IP地址和目的端口号)来定位一个接收方应用进程,而用二元组(源IP地址和源端口号)来标识一个发送方进程。二元组(IP地址和端口号)被称为套接字(socket)地址。
TCP是面向连接的协议,因此,TCP连接就有三个阶段:即连接建立、数据传送和连接释放。建立连接的目的为通信做好充分的准备工作,其中最重要的就是分配相应的资源。通信结束后显然要释放所占用的资源,即释放连接。
TCP的连接建立采用客户-服务器方式。主动发起连接建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(server)。假设B中运行TCP的服务器进程,它先发出一个被动打开(passive open)命令,准备接受客户进程的连接请求。然后服务器就处于“听”(listen)的半途而废,不断检测是否有客户进程要发起连接请求,若有则将做出响应。假设客户进程运行在主机A,它先向其TCP发出主动打开(active open)命令,表明要向某个IP地址的某个端口建立运输层连接。主机A的TCP向主机B的TCP发出连接请求报文段,主机B的TCP收到连接请求报文段后,若同意,则发回连接请求确认。主机A的TCP收到B接受连接请求的确认后,还要向B给出确认。运行客户进程的主机A的TCP通知上层应用进程,连接已经建立。同时,服务器进程的主机B的TCP收到主机A的确认后,会通知其上层应用进程,连接已经建立。
计算机网络之运输层
连接建立采用的这种过程叫做三次握手(three-way handshake)。数据传输结束后,通信的双方都可以发出释放连接的请求。在连接释放过程中要释放为该连接分配的所有资源。连接的释放过程是四次握手,也可以看成是两个二次握手。
当网络中出现太多的分组时,网络的性能开始下降,这种情况称为拥塞(congestion)。如果网络中的负载(load),即发送到网络中的数据量超过了网络的容量(网络中能处理的数据量),那么网络中就可能发生拥塞。所谓拥塞控制(congestion control)就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
计算机网络之运输层
输入负载或网络负载,代表单位时间内输入给网络的分组数目。吞吐量(throughput),代表单位时间内从网络输出的数据量。理想情况下,在吞吐量饱和之前,网络吞量就等于负载。拥塞控制的任务是防止过多的数据注入到网络中,使网络能够承受现有网络负载,这是一个全局性的问题。从控制论的角度出发,拥塞控制可以分为开环控制和闭环控制。开环控制试图用良好的设计来解决问题,本质是从一开始保证问题不会发生。闭环控制则是一种基于反馈一路的方法。