首页 > 代码库 > 8.运输层简介
8.运输层简介
1. 运输层服务
1.1 进程到进程的通信
运输层协议的首要任务是提供进程到进程的通信。网络层负责计算机级的通信。网络层协议只能把报文交付给目的计算机。运输层协议负责把报文交付给合适的进程
1.2 编址:端口号
本地主机和远程主机都是通过IP地址定义。定义进程需要通过端口号定义。TCP/IP协议簇,端口号是0~65535之间的整数。ICANN定义的端口号范围:熟知端口0~1023。注册端口1024~49151。动态端口49152~65535可被用作临时的或专用的端口号
套接字地址: TCP协议簇的运输层协议在建立连接时,需要在连接的两端同时使用IP地址和端口号。它们的组合称为套接字地址。客户套接字地址唯一地定义一个客户进程
1.3 封装和解封
为了把报文从一个进程发送到另一个进程,运输层协议要对报文进行封装和解封。封装发生在发送方。当进程想要发送一个报文,报文、套接字地址和其它一些信息递交给运输层。运输层接收数据并添加运输层首部。解封发送在接收方。当报文到达目的运输层,首部被拆除,然后运输层将报文交付给应用层运行的进程
1.4 复用和分用
当一个实体接收来自多个源的输入时,称为复用。当一个实体将数据交付到多个源时,称为分用。源点的运输层执行的是复用,终点的运输层执行的是分用
上图描绘了一个客户和两个服务器之间的通信。客户端运行着三个进程:P1、P2和P3。客户进程P1和P3需要向某个服务器上运行的相应进程发送请求,客户进程P2需要向另一台服务器上运行的相应进程发送请求。客户端的运输层从三个进程接收到三个报文,产生三个分组,起到复用器的作用。分组1和分组3使用相同的逻辑信道到达第一个服务器的运输层。运输层担负起分用器的作用,将报文分别交付给两个不同的进程。
1.5 流量控制
当一个实体产生数据而另一个实体消耗数据时,数据的产生速度和消耗速度之间应当达到某种平衡。如果数据产生速度比消耗的速度快,那么消耗方会因来不及处理而被迫丢弃一些数据。如果数据产生的速度比消耗的速度慢,消耗方就需要等待,从而使得整个系统的效率降低。流量控制与第一个问题有关,需要防止发生在消耗端的数据丢失。
1.5.1 推送或拉取
如果发送方只要数据一产生就发送出去,不管消耗方是否请求过数据,称为推送。如果发送方只有在消耗方请求之后才发送数据,称为拉取。当生产者推送数据时,消耗者可能因数据太多来不及处理,所以需要反方向进行流量控制,防止数据被丢弃。换言之,消耗者需要警告生产者停止发送数据,并在它再次准备好接收时,向生产者发出通知。只有推送方式才需要进行流量控制。
1.5.2 运输层的流量控制
运输层的通信中,需要与四个实体交互:发送方进程、发送方运输层、接收方进程、接收方运输层。应用层的发送进程仅仅是一个生产者,产生报文块推送到运输层。发送方的运输层扮演两个角色:消耗者和生产者。它要消耗被生产者推送过来的报文,同时还要将报文封装成分组,推送给接收方的运输层。接收方的运输层扮演两个角色:消耗者,它消耗来自发送方的报文;生产者,将报文解封后交付给应用层。不过,最后的交付通常是一种拉取交付。至少需要两种情况下的流量控制:从发送方的运输层到发送方的应用层以及从接收方的运输层到发送方的运输层
1.5.3 缓存
流量控制可以用很多方法实现,最常见的一种解决方法是使用两个缓存。一个位于发送方的运输层,一个位于接收方的运输层。这里的缓存是可以在发送方和接收方用来保存分组的一组存储器。对于流量控制的通信可以通过从消耗者向生产者发送信号实现。当发送方的运输层缓存满溢时,通知应用层停止传递报文块,当有了空位置时再通知应用层再次传递报文块。当接收方的运输层缓存满溢时,通知发送方的运输层停止发送分组,当有了空位置时通知发送方的运输层再次发送分组
1.6 差错控制
因特网中,负责从发送方运输层向接收方运输层运送分组的网络层是不可靠的。运输层的差错控制负责:检测并丢弃损坏的分组;跟踪丢失和丢弃的分组并重传;识别重复的分组并丢弃;保存失序到达的分组,直至缺失的分组全部抵达。
1.6.1 序号
运输层分组的首部需要增加一个字段,保存分组的序号。当一个分组损坏或丢失时,接收方的运输层通过这个序号能够以某种方式通知发送方的运输层重传分组。同时,如果接收到的两个分组具有相同的序号,接收方的运输层能够检测到两个重复的分组。通过观察序号的连续性能够识别出失序到达的分组
1.6.2 确认
可以使用正信号或负信号实现差错控制。只要一个或一组分组完好地到达,接收方发送一个确认。另一方面,接收方可以简单地丢弃损坏的分组,发送方发送分组时启动一个计时器,如果超时而没有收到ACK,那么重传分组
1.7 流量控制和差错控制的组合
通过使用两个带编号的缓存,可以实现流量控制和差错控制的组合。在发送方,当为分组的发送准备时,可以使用缓存中下一个空位的编号x作为分组的序号。当分组被发送时,它的一个副本保存在存储器的x位置,直至收到来自另一端的确认。当与已发送相关的确认到达,存储器中分组的副本就被清除,从而使存储位置变为空闲。在接收方,当序号y的分组到达时,将其保存在存储器的y位置,直到应用层准备好接收,同时可以发送一个确认声明分组y已经到达
滑动窗口
因为序号是模2m的,所以0~2m-1的序号可以表示为一个环。在发送方,当一个分组被发送出去,相应的小片被标记。当一个确认到达后,相应小片的标记被取消。下图描绘了发送方的滑动窗口。序号是模16(m=4)的,窗口大小为7
圆形表示的滑动窗口
条形表示的滑动窗口
1.8 拥塞控制
因特网中存在的一个重要的问题是拥塞。如果一个网络中的负载(发送到网络上的分组数量)大于网络的容量(网络能够处理的分组数量),网络很有可能发送拥塞。拥塞控制指的是用来控制拥塞,以使负载保持低于容量的机制和技术。网络或互联网中的拥塞是由于路由器或交换机有一些队列,即分组被处理之前或之后用来保存分组的缓存。分组被放入合适的外出队列并等待轮到自己被发送。队列空间是有限的,所以到达路由器的分组数量有可能大于路由器能够保存的分组数量
开环拥塞控制:在拥塞发生之前使用一些策略预防拥塞。此类机制中,拥塞控制可以由源点或者终点来处理
重传策略:有时重传是不可避免的。一般来说,重传可能会加重网络的拥塞。但是,好的重传策略可以预防拥塞,需要重传策略及重传计时器设计得能够优化效率,同时能够预防拥塞
窗口策略:发送方窗口的类型可能会影响到拥塞
确认策略:接收方实施的确认策略有可能影响拥塞。如果接收方不是对每一个收到的分组都进行确认,能够使发送方放慢发送速率,有助于预防拥塞。实现的方式有几种:接收方可以仅仅在有分组要发送时,或一个特殊的计时器到期时才发送一个确认;接收方可以决定一次为N个分组发送确认
闭环拥塞控制:尝试在拥塞发生后缓解拥塞的程度。发送方的窗口大小可以是灵活的。决定发送方窗口大小的一个因素就是因特网的拥塞状况。发送方的运输层可以通过观察分组的丢失情况来监视因特网拥塞状况,如果拥塞状况恶化,可以用一种策略减小窗口大小
1.9 无连接的和面向连接的服务
8.运输层简介