5.传输层

传输层提供的服务

传输层的功能

从通信和信息处理的角度看,传输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。传输层位于网络层之上,它为运行在不同主机上的进程之间提供了逻辑通信,而网络层提供主机之间的逻辑通信。即使网络层协议不可靠(网络层协议使分组丢失、混乱或重复),传输层同样能为应用程序提供可靠的服务。

传输层的功能如下:

  • 传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是,网络层提供的是主机之间的逻辑通信。“逻辑通信”的意思是:传输层之间的通信好像是沿水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接。
  • 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
  • 传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查数据报的首部,不检验数据部分是否出错。
  • 提供两种不同的传输协议,即面向连接的和无连接的。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)。

传输层向高层用户屏蔽了低层网络核心的细节(如网络拓扑、路由协议等),它使应用进程看见的是好像在两个传输层实体之间有一条端到端的逻辑通信信道,这条逻辑通信信道对上层的表现却因传输层协议不同而有很大的差别。当传输层采用面向连接的时,尽管下面的网络是不可靠的(只提供尽最大努力的服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。但当传输层采用无连接的时,这种逻辑通信信道仍然是一条不可靠信道。

传输层的寻址与端口

端口能够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点(),它在传输层的作用类似于地址在网络层的作用或地址在数据链路层的作用,只不过地址和地址标识的是主机,而端口标识的是主机中的应用进程。

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

应用进程通过端口号进行标识,端口号长度为,能够表示个不同的端口号。端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程,且同一台计算机中分别拥有自己的端口号,它们互不干扰。在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:

  • 服务器端使用的端口号。它又分为两类,最重要的一类是熟知端口号,数值为(互联网地址指派机构)把这些端口号指派给了最重要的一些应用程序,让所有的用户都知道。另一类称为登记端口号,数值为。它是供没有熟知端口号的应用程序使用的,使用这类端口号必须在登记,以防止重复。一些常用的熟知端口号如下:

    应用程序(数据)(控制)
    熟知端口号
  • 客户端使用的端口号,数值为。由于这类端口号仅在客户进程运行时才动态地选择,因此又称短暂端口号(也称临时端口)。通信结束后,刚用过的客户端口号就不复存在,从而这个端口号就可供其他客户进程以后使用。

在网络中通过地址来标识和区别不同的主机,通过端口号来标识和区分一台主机中的不同应用进程,端口号拼接到地址即构成套接字。在网络中采用发送方和接收方的套接字来识别端点。套接字实际上是一个通信端点,即。它唯一地标识网络中的一台主机和其上的一个应用(进程)。

无连接服务与面向连接服务

面向连接服务就是在通信双方进行通信之前,必须先建立连接,在通信过程中,整个连接的情况一直被实时地监控和管理。通信结束后,应该释放这个连接。面向连接的服务可以保证数据的可靠和顺序交付。无连接服务是指两个实体之间的通信不需要先建立好连接,需要通信时,直接将信息发送到“网络”中,尽力而为地往目的地传送。

协议族在层之上使用了两个传输协议:

  • 面向连接的传输控制协议():传输层向上提供的是一条全双工可靠逻辑信道。不提供广播或组播服务。由于提供面向连接的可靠传输服务,因此不可避免地增加了许多开销,时延大,如确认、流量控制、计时器及连接管理等。这不仅使协议数据单元的头部增大很多,还要占用许多的处理机资源。因此主要适用于可靠性更重要的场合,如文件传输协议()、超文本传输协议()、远程登录()等。

    和网络层虚电路的区别:报文段在传输层抽象的逻辑信道中传输,对路由器不可见;虚电路所经过的交换结点都必须保存虚电路状态信息。在网络层若采用虚电路方式,则无法提供无连接服务;而传输层采用不影响网络层提供无连接服务。

  • 无连接的用户数据报协议():传输层向上提供的是一条不可靠的逻辑信道。它在之上仅提供两个附加服务:多路复用和对数据的错误检查知道怎样把分组投递给一台主机,但不知道怎样把它们投递给主机上的具体应用。在传送数据之前不需要先建立连接,远程主机的传输层收到报文后,不需要给出任何确认。必须在传输层的上层即应用层提供可靠性方面的全部工作。

    由于比较简单,因此执行速度比较快、实时性好。使用的应用主要包括,小文件传送协议()、和实时传输协议()。

    数据报和数据报的区别:数据报在网络层要经过路由的存储转发;而数据报在传输层的端到端的逻辑信道中传输,封装成数据报在网络层传输时,数据报的信息对路由是不可见的。

如果一个协议使用确认机制对传输的数据进行确认,那么可以认为它是一个可靠的协议;如果一个协议采用尽力而为的传输方式,那么是不可靠的。

UDP协议

的主要特点:

  • 无须建立连接,无连接状态,因此不会引入建立连接的时延。

  • 不保证可靠交付,维护可靠性的工作可由用户在应用层来完成。

  • 面向报文的,适合一次性传输较少数据的网络应用。

    发送方对应用层交下来的报文,在添加首部后就向下交付给层,一次发送一个报文,既不合并,也不拆分,而是保留这些报文的边界;接收方层交上来数据报,在去除首部后就原封不动地交付给上层应用进程,一次交付一个完整的报文。因此报文不可分割,是数据报处理的最小单位。

    因此,应用程序必须选择合适大小的报文,若报文太长,把它交给层后,可能会导致分片;若报文太短,把它交给层后,会使数据报的首部的相对长度太大,两者都会降低层的效率。

  • 无拥塞控制,适合很多实时应用。

  • 首部开销小。应用层能更好地控制要发送的数据和发送时间,适合多媒体应用。

 

数据报包含两部分:首部和用户数据。首部有,由个字段组成,每个字段的长度都是。各字段意义如下:

  • 源端口:源端口号,在需要对方回信时选用,不需要时可用全

  • 目的端口:目的端口号,在终点交付报文时必须使用到。

  • 长度:数据报的长度(包括首部和数据),其最小值是(仅有首部),单位为

  • 校验和:检测数据报在传输中是否有错,检查首部和数据部分,有错就丢弃。该字段是可选的,当源主机不想计算校验和时,则直接令该字段为全。当计算的结果为时,将校验和置为全

    当传输层从层收到数据报时,就根据首部中的目的端口,把数据报通过相应的端口上交给应用进程。如果接收方发现收到的报文中的目的端口号不正确(即不存在对应于端口号的应用进程),那么就丢弃该报文,并由发送端口不可达差错报文给发送方。

在计算校验和时要在数据报之前增加的伪首部,伪首部并不是的真正首部。只是在计算校验和时,临时添加在数据报的前面,得到一个临时的数据报。校验和就是按照这个临时的数据报来计算的。伪首部既不向下传送又不向上递交,而只是为了计算校验和。

XeWYbq.md.png

伪首部第四个字段数据报首部协议字段协议对应的值,长度为首部加数据部分长度,不包括伪首部。

发送端计算校验和步骤:

  1. 填上伪首部。
  2. 填充校验和字段。
  3. 填充数据部分,若数据报的数据部分不是的整数倍,则要在数据部分末尾填充全零字节(但此字节不发送)。
  4. 伪首部、首部、数据部分采用二进制反码求这些位字的和。求和方法链接
  5. 把和求反码填入检验和字段。
  6. 去掉伪首部,发送。

接收端验证校验和步骤:

  1. 填上伪首部。
  2. 伪首部、首部、数据部分采用二进制反码求和。
  3. 结果全为则无差错,否则丢弃数据报,或者交给应用层附上出差错的警告。

TCP协议

是在不可靠的层之上实现的可靠的数据传输协议,它主要解决传输的可靠有序无丢失不重复问题。主要特点如下:

  • 面向连接(虚连接)的传输层协议。

  • 每条连接只能有两个端点,每条连接只能是点对点的(一对一)。

  • 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。

  • 提供全双工通信,允许通信双方的应用进程在任何时候都能发送数据,为此连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

    发送缓存用来暂时存放:发送应用程序传送给发送方准备发送的数据;已发送但尚未收到确认的数据。

    接收缓存用来暂时存放:按序到达但尚未被接收应用程序读取的数据;不按序到达的数据。

  • 面向字节流的,虽然应用程序和的交互是一次一个数据块(大小不等),但把应用程序交下来的数据仅视为一连串的无结构的字节流

在发送报文时所采用的方式完全不同。报文的长度由发送应用进程决定,而报文的长度则根据接收方给出的窗口值和当前网络拥塞程度来决定。如果应用进程传送到缓存的数据块太长,就把它划分得短一些再传送;如果太短,也可以等到积累足够多的字节后再组成报文段发送出去。

传送的数据单元称为报文段报文段既可以用来运载数据,又可以用来建立连接、释放连接和应答。一个报文段分为首部和数据两部分,整个报文段作为数据报的数据部分封装在数据报中。其首部的前是固定的。报文段的首部最短为,后面有字节是根据需要而增加的选项,通常长度为的整数倍。首部各字段意义如下:

  • 源端口和目的端口:各占。端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口实现。
  • 序号:占,范围为是面向字节流的(即传送时是逐个字节传送的),所以连接传送的字节流中的每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。
  • 确认号:占,是期望收到对方下一个报文段的第一个数据字节的序号。若确认号为,则表明到序号为止的所有数据都已正确收到。
  • 数据偏移(即首部长度)。占位,表示首部长度(首部中还有长度不确定的选项字段),它指出报文段的数据起始处距离报文段的起始处有多远。单位是。当此字段的值为时,达到首部的最大长度
  • 保留:占位,保留为今后使用,但目前应置为
  • 紧急位时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据(高优先级的数据),应尽快传送(插队)。但需要和紧急指针配合使用,即数据从第一个字节到紧急指针所指字节就是紧急数据。
  • 确认位:仅当时确认号字段才有效。当时,确认号无效。规定,在连接建立后所有传送的报文段都必须把
  • 推送位:接收方收到的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
  • 复位位时,表明连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。
  • 同步位:同步表示这是一个连接请求或连接接受报文。当时,表明这是一个连接请求报文,对方若同意建立连接,则应在响应报文中使用
  • 终止位:用来释放一个连接。当时,表明此报文段的发送方的数据已发送完毕,并要求释放传输连接。
  • 窗口(接受窗口大小):占,范围为。它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,因此用窗口值作为接收方让发送方设置其发送窗口的依据。以字节为单位。
  • 校验和:占。校验和字段检验的范围包括首部数据两部分。在计算校验和时,和一样,要在报文段的前面加上的伪首部(只需将伪首部的第个字段,即协议字段的改成,其他的和一样)。
  • 紧急指针:占。紧急指针仅在时才有意义,它指出在本报文段中紧急数据共有多少字节(紧急数据在报文段数据的最前面)。
  • 选项:长度可变。最初只规定了一种选项,即最大报文段长度()。报文段中的数据字段的最大长度。
  • 填充:这是为了使整个首部长度是的整数倍。

XeWsM9.md.png

TCP连接管理

连接的管理就是使传输连接的建立和释放都能正常进行。在连接建立的过程中,要解决以下三个问题:

  • 要使每一方能够确知对方的存在。
  • 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项、时间戳选项及服务质量等)。
  • 能够对传输实体资源(如缓存大小、连接表中的项目等)进行分配。

连接的端口即为套接字插口,每条连接唯一地被通信的两个端点(即两个套接字)确定。连接的建立采用客户/服务器方式。主动发起连接建立的应用进程称为客户,而被动等待连接建立的应用进程称为服务器

连接都有三个阶段:

  • 连接建立(三次握手):连接建立前,服务器进程处于(收听)状态,等待客户的连接请求。

    1. 客户机的首先向服务器的发送连接请求报文段。这个特殊报文段的首部中的同步位,同时选择一个初始序号规定,报文段不能携带数据,但要消耗掉一个序号。这时,客户进程进入(同步已发送)状态。

    2. 服务器的收到连接请求报文段后,如果同意建立连接,则向客户机发回确认,并为该连接分配缓存和变量。在确认报文段中,把位和位都置,确认号是,同时也为自己选择一个初始序号确认报文段不能携带数据,但也要消耗掉一个序号。这时,服务器进程进入(同步收到)状态。

    3. 当客户机收到确认报文段后,还要向服务器给出确认,并为该连接分配缓存和变量。确认报文段的位置,确认号,序号。该报文段可以携带数据。这时,客户进程进入(已建立连接)状态。

    服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到洪泛攻击

    XeWfPO.md.png

  • 数据传送:提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。

  • 连接释放(四次挥手):参与连接的两个进程中的任何一个都能终止该连接。

    1. 客户机打算关闭连接时,向其发送连接释放报文段,并停止发送数据,主动关闭连接,该报文段的终止位,序号,它等于前面已传送过的数据的最后一个字节的序号加报文段即使不携带数据,也消耗掉一个序号。这时,客户进程进入(终止等待)状态。

    2. 服务器收到连接释放报文段后即发出确认,确认号,序号,等于它前面已传送过的数据的最后一个字节的序号加。然后服务器进入(关闭等待)状态。此时,从客户机到服务器这个方向的连接就释放了,连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。

    3. 若服务器已没有要向客户机发送的数据,就通知释放连接,此时其发出连接释放报文段。设该报文段的序号为(在半关闭状态服务器可能又发送了一些数据),还须重复上次已发送的确认号。这时服务器进入(最后确认)状态。

    4. 客户机收到连接释放报文段后,必须发出确认。把确认报文段中的确认位,确认号,序号。此时连接还未释放,必须经过时间等待计时器设置的时间(最长报文段寿命)后,客户机才进入(连接关闭)状态。

    XeW4Re.md.png

TCP可靠传输

提供的可靠数据传输服务保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。使用了校验序号确认重传等机制来达到这一目的。

  • 校验:与校验机制一样(伪首部)。

  • 序号:首部的序号字段用来保证数据能有序提交给应用层,把数据视为一个无结构但有序的字节流,序号建立在传送的字节流之上,而不建立在报文段之上。连接传送的数据流中的每个字节都编上一个序号。序号字段的值是指本报文段所发送的数据的第一个字节的序号。

  • 确认:首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。发送方缓存区会继续存储那些已发送但未收到确认的报文段,以便在需要时重传。默认使用累计确认,即只确认数据流中至第一个丢失字节为止的字节。对报文段确认的机制。

  • 重传:有两种事件会导致对报文段进行重传:

    • 超时:每发送一个报文段,就对这个报文段设置一次计时器。计时器设置的重传时间到期但还未收到确认时,就要重传这一报文段。

      由于的下层是一个互联网环境,数据报所选择的路由变化很大,因而传输层的往返时延的方差也很大。为了计算超时计时器的重传时间,采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应确认的时间,这两个时间之差称为报文段的往返时间()。保留了的一个加权平均往返时间,它会随新测量样本值的变化而变化。超时计时器设置的超时重传时间()应略大于,但也不能大太多,否则当报文段丢失时,不能很快重传,导致数据传输时延大。

      在计算平均往返时间时,只要报文段重传了,就不采用其往返时间样本,且报文段每重传一次,就把增大一些。

      设权为,新的往返时间为,则

    • 冗余(冗余确认):超时触发重传存在的一个问题是超时周期往往太长。发送方通常可在超时事件发生之前通过注意所谓的冗余来较好地检测丢包情况。冗余就是再次确认某个报文段的,而发送方先前已经收到过该报文段的确认。规定每当比期望序号大的失序报文段到达时,就发送一个冗余,指明下一个期待字节的序号。当发送方收到对同一个报文段的个冗余时(即收到四个相同),就可以认为跟在这个被确认报文段之后的报文段已经丢失。这种技术通常称为快速重传

TCP流量控制

提供流量控制服务来消除发送方(发送速率太快)使接收方缓存区溢出的可能性,因此可以说流量控制是一个速度匹配服务(匹配发送方的发送速率与接收方的读取速率)。提供一种基于滑动窗口协议的流量控制机制。

在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,这称为接收窗口,即调整报文段首部中的“窗口”字段值,来限制发送方向网络注入报文的速率。同时,发送方根据其对当前网络拥塞程度的估计而确定的窗口值,这称为拥塞窗口,反映网络的当前容量,其大小与网络的带宽和时延密切相关。

例如,在通信中,有效数据只从发往,而仅向发送确认报文,这时可以通过设置确认报文段首部的窗口字段来将通知给即接收方允许连续接收的最大能力,单位是字节。发送方总是根据最新收到的值来限制自已发送窗口的大小,从而将未确认的数据量控制在大小之内,保证不会使的接收缓存溢出。发送窗口的实际大小中的最小值

为每一个连接设有一个持续计时器,只要连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。若窗口仍然是,那么发送方就重新设置持续计时器。

传输层和数据链路层的流量控制的区别是:传输层定义端到端用户之间的流量控制,数据链路层定义两个中间的相邻结点的流量控制。另外,数据链路层的滑动窗口协议的窗口大小不能动态变化,传输层的则可以动态变化。

TCP拥塞控制

拥塞控制是指防止过多的数据注入网络,保证网络中的路由器或链路不致过载。出现拥塞时,端点并不了解拥塞发生的细节,对通信连接的端点来说,拥塞往往表现为通信时延的增加。

拥塞控制与流量控制的区别:拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是指点对点的通信量的控制,是个端到端的问题(接收端控制发送端),它所要做的是抑制发送端发送数据的速率,以便使接收端来得及接收。当然,拥塞控制和流量控制也有相似的地方,即它们都通过控制发送方发送数据的速率来达到控制效果。

因特网建议标准定义了进行拥塞控制的种算法:

这里假设接收方总是有足够大的缓存空间,因而发送窗口大小由网络的拥塞程度决定,也就是说,可以将发送窗口等同为拥塞窗口。

  • 慢开始:在刚刚连接好并开始发送报文段时,先令拥塞窗口,即一个最大报文段长度。每收到一个对新报文段的确认后,将,即增大一个。用这样的方法逐步增大发送方的,可使分组注入网络的速率更加合理。

    慢开始的“慢”并不是指拥塞窗口的增长速率慢,而是指在开始发送报文段时先设置,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大,这对防止网络出现拥塞是一个非常有力的措施。使用慢开始算法后,每经过一个传输轮次(即往返时延),就会加倍,即的大小指数式增长。慢开始一直把增大到一个规定的慢开始门限(阈值),然后改用拥塞避免算法。

    ,则下一个后的等于,而不等于,即不能跃过值。

  • 拥塞避免:每经过一个往返时延就把发送方的拥塞窗口,而不是加倍,使拥塞窗口按线性规律缓慢增长(即加法增大),这比慢开始算法的拥塞窗口增长速率要缓慢得多。

  • 快重传:当发送方连续收到三个重复的报文时(总共收到个一样的报文),直接重传对方尚未收到的报文段,而不必等待那个报文段设置的重传计时器超时。

  • 快恢复:当发送方连续收到三个冗余(即重复确认)时,把慢开始门限设置为此时发送方的一半。这是为了预防网络发生拥塞。但发送方现在认为网络很可能没有发生(严重)拥塞,否则就不会有几个报文段连续到达接收方,也不会连续收到重复确认。因此与慢开始不同之处是它把值设置为慢开始门限改变后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。由于跳过了拥塞窗口起始的慢开始过程,所以被称为快恢复。

 

根据的大小执行不同的算法,可归纳如下:

  • 时,使用慢开始算法。
  • 时,停止使用慢开始算法而改用拥塞避免算法。
  • 时,既可使用慢开始算法,又可使用拥塞避免算法(通常做法)。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(未按时收到确认),就要把慢开始门限设置为出现拥塞时的发送方的值的一半(但不能小于)。然后把拥塞窗口重新设置为,执行慢开始算法,从产生超时到需要一个往返时间。这样做的目的是迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完。

XmiJyQ.md.png

Last modification:May 26, 2023
希望能帮到你(^-^)V