计算机网络-运输层

一、运输层概述  

1.运输层与网络层的关系

  • 网络层提供了主机之间的逻辑通信,运输层为运行在不同主机上的进程之间提供了逻辑通信。
  • 运输层能够提供的服务常受制于网络层协议的服务模型。
  • 即使底层网络协议不能在网络层提供相应的服务,运输层协议也能提供某些服务(可靠数据传输、运输层报文段的机密性)。

2.概述

  • UDP(用户数据报协议)提供了一种不可靠、无连接的服务。
  • TCP(传输控制协议)提供了一种可靠的、面向连接的服务。
  • IP(网际协议)的服务模型是尽力交付服务,对报文段的交付不做任何确保。
  • 将主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解。
  • UDP和TCP可以通过在其报文段首部中包括差错检测字段而提供完整性服务。
  • TCP通过使用流量控制、序号、定时器确保正确地、按序地将数据从发送进程交付给接收进程。
  • TCP拥塞控制防止任何一条TCP连接用过多流量来淹没通信主机之间的链路和交换设备。

二、多路复用与多路分解

1.概述

1.1 概念

  • 将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。
  • 在源主机从不同套接字收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,这些工作被称为多路复用。

1.2 要求

  • 套接字有唯一标识符。
  • 每个报文段有特殊字段来指示该报文段所要交付到的套接字,即原端口号字段和目的端口号字段。

1.3 端口号

  • 端口号是一个16比特(2字节,1byte = 8 bit)的数,其大小在0 ~ 65535之间。
  • 0 ~ 1023范围的端口号为周知端口号,是受限制的,这是指它们保留给诸如HTTP(80)和FTP(21)之类的周知应用层协议来使用的。
  • 开发一个新的应用程序时必须为其分配一个端口号。

2.无连接的多路复用与多路分解

  • 一个UDP套接字是由一个二元组(目的IP地址、目的端口号)全面标识的。
  • 如果两个UDP报文段有不同的源IP地址或源端口号但具有相同的目的IP地址和目的端口号,那么这两个报文段将通过相同的目的套接字被定向到相同的目的进程。

3.面向连接的多路复用与多路分解

  • 一个TCP套接字是由一个四元组(源IP地址、源端口号、目的IP地址、目的端口号)来标识的。
  • 两个具有不同源IP地址或源端口号的TCP报文段将被定向到两个不同的套接字。

4.Web服务器与TCP

  • 当今的高性能Web服务器通常只使用一个进程,但是为每个新的客户创建一个具有新连接套接字的新线程(线程可以被看作是一个轻量级的子进程)。
  • 如果客户与服务器使用持续HTTP,则在整条连接持续期间,客户与服务器之间经由同一个服务器套接字交换HTTP报文。
  • 如果客户与服务器使用非持续HTTP,则对每一对请求/响应都创建一个新的TCP连接并在随后关闭,因此对每一对请求/响应创建一个新的套接字并在随后关闭。

三、无连接运输:UDP

1.概述

1.1 UDP相较于TCP的特点:

  • 关于发送什么数据以及何时发送的应用层控制更为精细。实时应用通常要求最小的发送速率,不需要过分的延迟报文段的传送,且能够容忍一些数据丢失,UDP更为适合。
  • 无需连接建立。能够减少连接时延。
  • 无连接状态。TCP需要在端系统中维护连接状态,包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数,UDP不维护连接状态。
  • 分组首部开销小。每个TCP报文段都有20字节的首部开销,每个UDP报文段只有8个字节的首部开销。

1.2 常用应用

  • TCP:电子邮件(SMTP)、远程终端访问(Telnet)、Web(HTTP)、文件传输(FTP)、部分流式媒体、部分英特网电话。
  • UDP:远程文件服务器(NFS)、域名转换(DNS)、网络管理(SNMP)、部分流式媒体、部分英特网电话。

2.UDP报文段结构

  •  UDP首部有4个字段,每个字段由两个字节(16比特)组成。
  • 长度字段指示了在UDP报文段中的字节数(首部加数据)。
  • UDP检验和提供了差错检测功能。

3.UDP检验和

  • 发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何益出都被回卷(最高位溢出的1加到最低位),得到的结果被放在UDP报文段中的检验和字段。
  • 接收方将全部的16比特字(包括检验和)加在一起,如果和为1111111111111111则没有引入差错,否则引入差错。
  • 在链路层协议提供了差错检测之后运输层还要提供的原因:不能保证源和目的之间的所有链路都提供差错检测;当报文段存储在某台路由器的内存中时,也可能引入比特差错。
  • UDP提供差错检测,但对差错恢复无能为力,一般是丢弃受损的报文段或者将受损的报文段交给应用程序并给出警告。

四、可靠数据传输原理

1.构造可靠数据传输协议

1.1 经完全可靠信道的可靠数据传输:rdt1.0

  • 底层信道完全可靠。

1.2 经具有比特差错信道的可靠数据传输:rdt2.0(停等协议)

  • 分组中的比特可能受损。
  • 所有发送的分组按其发送顺序被接收。
  • 自动重传请求协议(Automatic Repeat reQuest,ARQ):差错检测、接收方反馈、重传。

  • 受损ACK和NAK的处理方法:在数据分组中添加一个字段,让发送方对其数据分组编号。
  • rdt2.1使用了从接收方到发送方的肯定确认和否定确认:

  •  rdt2.2在有比特差错信道上实现了一个无NAK的可靠数据传输协议:

1.3 经具有比特差错的丢包信道的可靠数据传输:rdt3.0(比特交替协议)

  • 基于时间的重传机制:需要一个倒计时定时器,在给定的时间量(至少发送方与接收方之间的一个往返时延加上接收方处理一个分组所需要的时间)过期后可中断发送方。
  • 发送方的要求:每次发送一个组(包括第一次分组和重传分组)时启动一个定时器;响应定时器中断(采取适当动作);终止定时器。

2.流水线可靠数据传输协议

  • 为了提高信道利用率引入了流水线可靠数据传输协议:允许发送方同时发送多个分组而无需等待。
  • 引入其他问题:必须增加序号范围;协议发送方和接收方两端不得不缓存多个分组;所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。
  • 解决流水线的差错恢复的两种基本方法:回退N步(Go- Back- N,GBN)和选择重传(Selective Repeat,SR)。

3.回退N步

3.1 概述

  • 允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但是它也受限于在流水线中未确认的分组数不能超过某个最大允许数N。
  • 序列号被分为4段:[0~base-1]段内的序号为已经发送并被确认的分组,[base~nextseqnum-1]段内的序号为已经发送但未被确认的分组,[nextseqnum~base+N-1]段内的序号为即将被发送的分组,base+N以上的序号是不可用的。
  • N常被称为窗口长度,GBN协议常被称为滑动窗口协议。
  • 一个分组序号一般在分组首部的一个字段中,如果分组序号字段的比特数是k,则该序号范围是[0,2^{k}-1] 。序号空间可以被看作是一个长度为2^{k}的环,其中序号2^{k}-1紧接着序号0。

 3.2 机制

  • GBN发送方必须响应的三种类型的事件:上层的调用;收到一个ACK;超时事件。
  • GBN接受党的动作:如果一个序号为n的分组按序并且被正确的接收到,则接收方为分组n发送一个ACK,并将分组中的数据部分交付给上层。在所有其他情况下都丢弃丢弃该分组,并为最近按序接收的分组重新发送ACK。

4.选择重传

4.1 概述

  • 让发送方仅重传那些它怀疑出错(即丢失或受损)的分组来避免不必要的重传。

4.2 机制

五、面向连接的运输:TCP

1.概述

  • TCP是面向连接的。
  • TCP连接时点对点的。
  • TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段。
  • TCP连接的组成包括:一台主机上的缓存、变量与进程连接的套接字和另一台主机上的缓存、变量与进程连接的套接字。
  • TCP可以从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(Maximum Segment Size,MSS)。MSS通常根据最初确定的由本地主机发送的最大链路层帧长度,即最大传输单元(Maximum Transmission Unit,MTU)来设置。

2.TCP报文段结构

2.1 概述

  • TCP报文段由首部字段和一个数据字段组成。
  • MSS限制了报文段数据字段的最大长度。
  • TCP首部一般是20字节。

2.2 具体结构

  • 源端口号和目的端口号(各16比特)
  • 序号字段和确认号字段(各32比特):用来实现可靠数据传输服务。
  • 首部长度字段(4比特):指示了以32比特字的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部长度是可变的(通常选项字段为空)。
  • 标志字段(6比特):ACK比特用于指示确认字段中的值是有效的;RST、SYN、FIN比特用于连接的建立和拆除;CWR、ECE比特用于拥塞控制;PSH比特用来指示接收方是否立即将数据交给上层;URG比特用来指示报文段里存在着被发送端的上层实体置为“紧急”的数据。
  • 接收窗口字段(16比特):用于流量控制。
  • 检验和字段(16比特)。
  • 紧急数据指针字段(16比特):指出紧急数据的最后一个字节。
  • 选项字段:用于发送方和接收方协商最大报文段长度(MSS)时或在高速网络环境下用作窗口调节因子时使用。

2.3 序号和确认号

  • TCP把数据看成一个无结构的、有序的字节流,
  • 一个报文段的序号是该报文段首字节的字节流编号。
  • 主机填充进报文段的确认号是主机期望从接收主机收到的下一字节的序号。
  • 处理收到失序报文的解决方案(由编程人员处理):接收方立即丢弃失序报文段;接收方保留失序的字节,并等待缺少的字节以填补该间隔。

3.往返时间估计与超时

3.1 估计往返时间

  • 样本RTT(SampleRTT)就是从报文段被发出到报文段的确认被收到之间的时间量。
  • TCP维持一个SampleRTT均值,称作EstimatedRTT。
  • EstimatedRTT = \left ( 1 - \alpha \right ) \cdot EstimatedRTT + \alpha \cdot EstimatedRTT\alpha的推荐值为0.125 。
  • SampleRTT偏差称作DevRTT。
  • DevRTT = \left ( 1 - \beta \right )\cdot DevRTT + \beta \cdot \left | SampleRTT - EstimatedRTT \right |

3.2 设置和管理重传超时间隔

  • 超时间隔设为EstimatedRTT加上一个余量,当SampleRTT值波动较大时,这个余量应该大一些,反之就应该小一些。
  • TimeoutInterval = EstimatedRTT + 4 · DevRTT,推荐的初始TimeoutInterval值为1秒,出现超时后TimeoutInterval值将加倍,当收到报文段并更新EstimatedRTT就用公式重新计算TimeoutInterval值。

4.可靠数据传输

4.1 概述

  • IP不保证数据报的交付,不保证数据报的按序交付,不保证数据报中数据的完整性。
  • TCP在IP不可靠的尽力而为服务之上创建了一种可靠数据传输服务,确保一个进程从其接收缓存中读出的数据流是无损坏、无间隙、非冗余和按序的数据流。

4.2 超时间隔加倍

  • 每当超时事件发生时,TCP重传具有最小序号的还未被确认的报文段。每次TCP重传时都会将下一次的超时间隔设为先前的两倍。

4.3 快速重传

  • 超时触发重传存在的问题之一是超时周期可能相对较长。
  • 冗余ACK:再次确认某个报文段的ACK。
  • 发送方收到三个冗余ACK后,TCP执行快速重传,即在该报文段的定时器过期之前重传丢失的报文段。

4.4 选择确认

  • 允许TCP接收方有选择的确认失序报文段,而不是累积地确认最后一个正确接收的有序报文段。
  • TCP的差错恢复机制为GBN协议与SR协议的混合体。

5.流量控制

5.1 概述

  • TCP流量控制服务:消除发送方使接收方缓存溢出的可能性。
  • TCP拥塞控制服务:发送方因为IP网络的拥塞而被遏制。

5.2 机制

  • TCP通过让发送方维护一个接收窗口(receive window)的变量来提供流量控制。
  • 接受方相关变量:RcvBuffer(接受缓存);LastByteRead(接收方的应用程序从缓存读取的数据流的最后一个字节的编号);LastByteRcvd(从网络中到达的并且已经放入接收方缓存中的数据流的最后一个字节的编号)。
  • 发送方相关变量:LastByteSent(发送方发送到网络中的数据流的最后一个字节的编号);LastByteAcked(发送方发送到网络中的已经被确认接收的数据流的最后一个字节的编号)。
  • rwnd = RcvBuffer - \left [ LastByteRcvd - LastByteRead \right ],接收方把rwnd值发给发送方,发送方通过LastByteSent - LastByteAcked \leq rwnd来控制不会让接收方缓存溢出。
  • 当接收方的窗口为0时,发送方继续发送只有1个字节数据的报文段,这些报文段将会被接收方确认,当接收方缓存开始由空闲时,确认报文段中将包含一个非0的rwnd值。

6.TCP连接管理

6.1 TCP三次握手

  • 第一步:客户端的TCP首先向服务端的TCP发送一个特殊的TCP报文段,其中一个标志位SYN比特被置为1,客户随机的选择一个初始序号client_isn,并将此编号放置于该起始的报文段的序号字段中。该报文称为SYN报文段。
  • 第二步:服务端接收到来自发送方的SYN报文段后,就会为该TCP连接分配TCP缓存和变量,并向该客户TCP发送允许连接的报文段,其中SYN比特被置为1,该TCP报文段首部确认号字段被置为client_isn+1,服务器选择自己的初始序号server_isn并将其放到TCP报文段首部的序号字段中。该报文被称为SYNACK报文段。
  • 第三步:在收到SYNACK报文段后,客户也会给该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段,其中SYN比特被置为0,确认号字段被置为server_isn+1,这个报文段已经可以带数据了。

6.2 TCP四次挥手

  •  定时等待:假定客户最后的ACK丢失,TIME_WAIT状态使TCP客户重传最后的确认报文。在TIME_WAIT状态中所消耗的时间使与具体实现有关的,典型的值为30s、1min或2min。

 6.3 TCP状态

  • 客户TCP状态

  • 服务器端TCP状态

六、拥塞控制原理

1.拥塞原因与代价

  • 分组的到达速率接近链路容量时,分组经历巨大的时延。
  • 发送方必须执行重传以补偿因为缓存溢出而丢失的分组。
  • 发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本。
  • 当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了。

2.拥塞控制方法

2.1 端到端拥塞控制

  • 网络层不为运输层拥塞控制提供显示支持,端系统必须通过对网络行为的观察来推断。

2.2 网络辅助的拥塞控制

  • 反馈方式一:网络路由器采用阻塞分组的形式直接反馈给发送方自己拥塞了。
  • 反馈方式二:路由器标记或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生。

七、TCP拥塞控制

1.概述

  • TCP使用端到端的拥塞控制。
  • TCP连接的每一端都是由一个接收缓存、一个发送缓存和几个变量(rwnd等)组成。
  • 运行在发送方的TCP拥塞控制机制跟踪一个额外的变量,拥塞窗口(congestion window,cwnd),LastByteSent - LastByteAcked \leq min\left | cwnd, rwnd \right |
  • 通过调节cwnd的值,发送方因此能调整它向连接方发送数据的速率。
  • 出现发送方的丢包事件定义为出现拥塞的指示:出现超时,收到来自接收方的3个冗余ACK。
  • TCP使用确认来触发(或计时)增大它的拥塞窗口长度,TCP被称为是自计时的。
  • TCP拥塞控制速率方法:一个丢失的报文段意味着拥塞,降低发送方的速率;一个确认报文段指示正常,增加发送方的速率;带宽探测。

2.TCP拥塞控制算法

2.1 慢启动

  • cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加1个MSS。
  • 如果出现一个超时指标的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动过程,而且将另一个状态变量的值ssthresh(慢启动阈值)设置为cwnd/2 。
  • 当cwnd的值等于ssthresh的值时,慢启动状态结束并且TCP转移到拥塞避免模式。
  • 如果检测到3个冗余ACK的丢包事件,TCP执行一种快速重传并进入快速恢复状态。

2.2 拥塞避免

  • 每个RTT只将cwnd的值增加一个MSS。
  • 如果出现一个超时指标的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动过程,而且将另一个状态变量的值ssthresh(慢启动阈值)设置为cwnd/2 。
  • 如果检测到3个冗余ACK的丢包事件,TCP将cwnd的值减半(为了使测量结果更好,计及已收到的3个冗余ACK要加上3个MSS),并将ssthresh的值记录为减半后的cwnd,并进入快速恢复状态。

2.3 快速恢复

  • 对收到的每个冗余的ACK,cwnd的值增加一个MSS。
  • 如果出现一个超时指标的丢包事件,TCP发送方将cwnd设置为1并重新开始慢启动过程,而且将另一个状态变量的值ssthresh(慢启动阈值)设置为cwnd/2 。

2.4 图解

  •  TCP拥塞控制通常被称为加性增、乘性减(Additive-Increase,Multiplicative- Decrease,AIMD)拥塞控制方法。

2.5 TCP吞吐量

  • 高度理想化的TCP稳态动态性模型:一条连接的平均吞吐量 = \frac{0.75 \cdot W}{RTT},W表示当丢包事件发生的时候的窗口长度。

3.公平性

3.1 公平性与TCP

  • 理想情况下,仅有TCP连接、所有连接有相同的RTT、每个主机-目的地只有一个TCP连接等,最终都能够基本实现平等分配。
  • 实际中,那些具有较小RTT的连接能够在链路空闲时更快地抢到可用带宽。

3.2 公平性和UDP

  • TCP拥塞控制在面临丢包时,将降低其传输速率,UDP源则不会这样,所以UDP源可能会压制TCP流量。

3.3 公平性和并行TCP连接

  • 当一个应用使用多条并行连接时,它占用了一条拥塞链路中较大比例的带宽。

4.明确拥塞通告:网络辅助拥戴控制

  • 网络辅助的拥塞控制(明确拥塞通告,Explicit Congestion Notification,ECN)已经开始实现和部署。
  • 在网络层,IP数据报首部的服务类型字段中的两个比特(四种可能的值)被用于ECN。
  • 路由器使用一种ECN比特设置指示该路由器正在经历拥塞,该拥塞指示则由被标记的IP数据报所携带,送给目的助局,再由目的主机通知发送主机。
  • 除了TCP以外的其他运输层协议也可以使用网络层发送的ECN信号。数据报拥塞控制协议(Datagram Congestion Control Protocol,DCCP)提供了一种低开销、控制拥塞的类似UDP不可靠服务,该协议使用了ECN。DCTCP(数据中心TCP)是一种专门为数据中心网络设计的TCP版本,也利用了TCP。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值