计算机网络自顶向下第三章:运输层

一、 概述和运输层服务:

运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能;

  1. 运输层协议是在端系统中而不是在路由器中实现的。在发送端,运输层将发送应用程序进程接收到的报文转换呈运输层分组(用因特网术语来讲该分组称为运输层报文段)。
  2. 实现的方法(可能)是将应用报文划分为较小的块,并为每块加上一个运输层首部以生成运输层报文段。然后在发送端系统中,运输层将这些报文段传递给网络层,网络层将其封装成网络层分组(即数据报)并向目的地发送。
  3. 网络路由器仅作用于该数据报的网络层字段;即它们不检查封装在该数据报的运输层报文段的字段。在接收端,网络层从数据报中提取运输层报文段,并将该报文段向上交给运输层。运输层则处理接收到的报文段,使该报文段中的数据为接收应用进程使用。
  4. 运输层和网络层的关系:
    i. 网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供了逻辑通信
    ii. 运输层协议只工作在端系统中。在端系统中,运输层协议将来自应用程序的报文移动到网络边缘(即网络层)。中间路由器既不处理也不识别运输层加在应用层报文的任何信息
    iii. 运输协议能够提供的服务常常受制于低层网络层协议的服务模型
  5. 因特网运输层概述
    i. 运输层协议分为:
    UDP(用户数据报协议),它为调用它的应用程序提供了一种不可靠、无连接的服务,基于“尽力而为的网络层,没有做(可靠性方面的)扩展”;
    TCP(传输控制协议),它为调用它的应用程序提供了一种可靠的、面向连接的服务。
    ii. 运输层分组称为报文段

二、 多路复用与多路分解:

  1. 多路复用与多路分解将由网络层提供的主机到主机交付服务延伸到为运行在主机上的应用程序提供进程到进程的交付服务
  2. 在目的主机,运输层从紧邻其下的网络层接收报文段。运输层负责这些报文段中的数据交付给在主机上运行的适当应用程序进程。
  3. 由于在任一时刻,在接收主机上可能有不止一个套接字,所以每个套接字都有唯一的标识符。标识符的格式取决于它是UDP还是TCP套接字
  4. 每个运输层报文段中具有几个字段。在接收端,运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用
  5. 运输层多路复用要求:套接字有唯一标识符;每个报文段有特殊字段来指示该报文段所要交付到的套接字
  6. 分解服务:在主机上的每个套接字能够分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字,然后报文段中的数据通过套接字进入其所连接的进程

a) 无连接的多路复用与多路分解

  1. 通常,应用程序的客户端让运输层自动地(并且是透明地)分配端口号,而服务器端则分配一个特定的端口号
  2. 一个UDP套接字是由一个二元组来全面标识的,该二元组包含一个目的IP地址和一个目的端口号
  3. 源端口号用作“返回地址”的一部分

b) 面向连接的多路复用与多路分解

  1. TCP套接字是由一个四元组(源IP地址、源端口号,目的IP地址,目的端口号)来标识的
  2. 服务器主机可以支持很多并行的TCP套接字,每个套接字与一个进程相联系,并由其四元组来标识每个套接字。当一个TCP报文段到达主机时,所有4个字段被用来将报文段定向(分解)到相应的套接字

c) Web服务器与TCP

  1. 当今的高性能Web服务器通常只使用一个进程,但是为每个新的客户连接创建一个具有新连接套接字的新线程
  2. 连接套接字与进程之间并非总是有着一一对应的关系。

三、 无连接运输:UDP

  1. 除了复用/分解功能以及少量的差错检测外,它几乎没有对IP增加别的东西。
  2. 使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手。因此,UDP被称为是无连接的
  3. 采用UDP时,只要应用进程将数据传递给UDP,UDP就会将此数据打包进 UDP报文段并立即将其传递给网络层。
  4. UDP不需要任何准备即可进行数据传输,因此UDP不会引入建立连接的时延。
  5. UDP不需要维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数以及序号与确认号的参数
  6. UDP仅有8字节的首部开销

以上均为许多应用如流媒体应用(容忍丢失、速率敏感)更适合用UDP的原因。UDP还用于DNS、SNMP。

  1. UDP报文段结构
    i. UDP首部只有4个字段,每个字段由两个字节组成。通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程(即执行分解功能)。长度字段指示了在UDP段中的字节数(首部加数据)
    在这里插入图片描述
  2. UDP检验和:UDP检验和提供了差错检测功能
    i. 检验和用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了变化。发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷(即将进位加在和的后面)。得到的结果被放在UDP报文段中的检验和字段。接收方计算所收到段的校验和,将其与校验和字段进行对比,如果不相等,则检测出错误;如果相等,则表示没有检测出错误(但有可能错误)

四、 可靠数据传输原理:

rdt是可靠数据传输协议,udt表示不可靠数据传输。可靠指的是数据不错、不丢、不乱。信道的不可靠性决定了可靠数据传输协议的复杂性。

a) 构造可靠数据传输协议

  1. 经完全可靠信道的可靠数据传输:rdt1.0
    i. 底层信道完全可靠(不会发生错误,不会丢弃分组)
    ii. 发送方和接收方的FSM独立

  2. 经具有比特差错信道的可靠数据传输:rdt2.0
    i. 该数据传输协议采用了差错检测、肯定确认与否定确认
    ii. 发送方不会发送一块新数据,除非发送方确信接收方已正确接收当前分组,由于这种行为,rdt2.0这样的协议被称为停等协议.
    iii. 确认机制(ACK):接收方显式地告知发送方分组已正确接收;NAK:接收方显式地告知发送方分组有错误。发送方收到NAK后,重传分组。基于这种重传机制的rdt协议称为自动重传请求(ARQ)协议

  3. rdt2.1与rdt2.0相比,发送方为每个分组增加了序列号;需校验ACK/NAK消息是否发生错误;状态数量翻倍(状态必须“记住”“当前”的分组序列号)。接收方需判断分组是否重复(当前所处状态提供了期望收到分组的序列号)。注意:接收方无法知道ACK/NAK是否被发送方正确收到

  4. rdt2.2(无NAK消息协议):与rdt2.1功能相同,但是只使用ACK。实现:接收方通过ACK告知最后一个被正确接收的分组;在ACK消息中显式地加入被确认分组的序列号。发送方收到重复ACK之后,采取与收到NAK消息相同的动作(重传当前分组)

  5. 经具有比特差错的丢包信道的可靠数据传输:rdt3.0(因为分组序号在0和1之间交替,因此rdt3.0有时被称为比特交替协议)
    i. 发送方负责检测和恢复丢包工作,如果发送方愿意等待足够长的时间以便确定分组已丢失,则它只需重传该数据分组即可。如果等待了“合理”时间后没有收到ACK,重传;如果分组或ACK只是延迟而不是丢了,重传会产生重复,序列号机制能够处理,接收方需在ACK中显式地告知所确认地分组。
    ii. 发送方至少需要等待这么长的时间:发送方与接收方之间的一个往返时延(可能会包括在中间路由器的缓冲时延)加上接收方处理一个分组所需的时间

b) 流水线可靠数据传输协议

i. 发送方(或信道)的利用率:发送方实际忙于将发送比特送进信道的那部分时间和发送时间之比
ii. 发送方只有万分之2.7时间是忙的,解决这种特殊的性能问题的一个简单方法是:不使用停等方式运行,允许发送方发送多个分组而无需等待确认。这种技术被称为流水线。
iii. 流水线技术对可靠数据传输协议带来的影响有:必须增加序号范围;协议的发送方和接收方两端也许必须缓存多个分组(发送方最低限度应当能缓冲那些已发送但没有确认的分组);所需序号范围和对缓冲的要求取决于数据传输协议如何丢失、损坏及延时过大的分组
iv. 解决流水线的差错恢复有两种基本方法是:回退N步(GBN)和选择重传(SR)

c) 回退N步:

允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数N
i. 在GBN中发送方看到的序号:
在这里插入图片描述
ii. 那些已被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内长度为N的窗口。随着协议的运行,该窗口在序号空间向前滑动。因此,N常被称为窗口长度,GBN协议也常被称为滑动窗口协议
iii. GBN发送方必须响应三种类型的事件:

  1. 上层的调用
  2. 收到一个ACK
  3. 超时事件

iv. ACK(n):确认到序列号n(包含n)的分组均已被正确接收,可能收到重复ACK
v. 为空中的分组设置计时器
vi. 超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组
vii. 对于乱序到达的分组:直接丢弃(接收方没有缓存);重新确认序列号最大的、按序到达的分组

d) 选择重传:

接收方对每个分组单独进行确认(设置缓存机制,缓存乱序到达的分组),通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。
i. 这种个别的、按需的重传要求接收方逐个地确认正确接收的分组。再次用窗口长度N来限制流水线中未完成、未被确认的分组数
ii. 与GBN不同的是,发送方已经收到了对窗口中某些分组的ACK
iii. SR发送方的事件与动作:

  1. 从上层收到数据
  2. 超时
  3. 收到ACK

iv. SR接收方的事件与动作:

  1. 序号在[rcv_base, rcv_base+N-1]内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择ACK被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收窗口的基序号,则该分组以及以前缓存的序号连续的分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组
  2. 序号在[rcv_base-N, rcv_base-1]内的分组被正确收到,在此情况下,必须产生一个ACK,即使该分组是接收方以前已确认过的分组
  3. 其他情况。忽略该分组

五、 面向连接的运输:TCP

a) TCP连接:

  1. TCP是面向连接的,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。
  2. 由于TCP协议只在端系统中运行,而不在中间的网络元素(路由器和链路层交换机)中运行,所以中间的网络元素不会维持TCP连接状态
  3. TCP连接提供的是全双工服务
  4. 发起连接的这个进程被称为客户进程,而另一个进程被称为服务器进程
  5. TCP建立连接的过程:客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户再用第三个特殊报文段作为响应。前两个报文段不承载“有效载荷”,也就是不包含应用层数据;而第三个报文段可以承载有效载荷。由于在这两台主机之间发送了3个报文段,所以这种连接建立过程常被称为三次握手
  6. TCP连接的组成包括:一台主机上的缓存、变量和与进程连接的套接字,以及另一台主机上的另一组缓存、变量和进程连接的套接字

b) TCP报文段结构

  1. TCP报文段由首部字段和一个数据字段组成。数据字段包含一块应用数据
  2. 首部包括源端口号和目的端口号,它被用于多路复用/分解来自或送到上层应用的数据
  3. 同UDP一样,TCP首部也包括检验和字段
    在这里插入图片描述
  4. TCP报文段首部还包括:
    i. 32比特的序号字段和32比特的确认号字段(这些字段被TCP发送方和接收方用来实现可靠数据传输服务)
    ii. 16比特的接收窗口字段(该字段用于流量控制)
    iii. 4比特的首部长度字段(该字段指示了以32比特的字为单位的TCP首部长度)
    iv. 可选与变长的选项字段(该字段用于发送方与接收方协商最大报文段长度)
    v. 6比特的标志字段

c) 往返时间的估计与超时

d) 可靠数据传输

  1. TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损坏、无间隔、非冗余和按序的数据流;即该字节流与连接的另一方端系统发送出字节流是完全相同
  2. TCP通过引入流水线机制、累积确认、使用单一重传计时器、触发重传的事件(超时、收到重复ACK)等来保证可靠数据传输
  3. 如何设置定时器的超时时间,不能大于RTT(但RTT是变化的),不能过短(会引起不必要的重传),不能过长(对段丢失事件反应慢)。
  4. 如何估计RTT请看书!
  5. 发送方从应用层接收到数据,创建报文段,序列号是报文段第一个字节的编号,开启计时器,设置超时事件TimeOutInterval。超时事件会导致重传引起超时的报文段,重启定时器。收到ACK的话,如果确认是此前未确认的报文段,则更新发送的SendBase,如果窗口还有未被确认的分组,则重新启动定时器。
  6. 快速重传:在定时器超时之前即进行重传

e) 流量控制:

TCP为它的应用程序提供了流量控制服务以消除发送方使接收方应用程序的读取速率相匹配

  1. TCP发送方也可能因为IP网络的拥塞而被遏制,这种形式的发送方的控制被称为拥塞控制
  2. TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制。接收窗口用于给发送方一个指示——该接收方还有多少可用的缓存空间
  3. 接收方为TCP连接分配缓存,速度匹配机制可以使得发送方不会传输的太多、太快以至于埋没接收方

f) TCP连接管理

建立连接:

  1. 客户端向服务器端发送一个SYN报文段,另外客户端会随机选择一个初始序列号,并将此序列号放置于该起始的TCP SYN报文段的序号字段中。SYN报文段中不包含任何数据
  2. 服务器接收到SYN报文段,回应客户端一个SYNACK报文段,分配缓存,服务器选择自己的初始序号并将其放置到TCP报文段首部的序号字段中。SYN比特被置为1,该TCP报文段首部的确认号字段被置为client_isn+1。
  3. 在收到SYNACK报文段后,客户也要给该连接分配缓存和变量。客户主机则向服务器发送另外一个报文段;这最后一个报文段对服务器的允许连接的报文段进行了确认(该客户通过将值sever_isn+1放置到TCP报文段首部的确认字段中来完成此项工作)。因为连接已经建立了,所以该SYN比特被置为0。该三次握手的第三个阶段可以在报文段负载中携带客户到服务器的数据。

关闭连接:

  1. 客户TCP向服务器进程发送一个特殊的报文段。这个特殊的报文段让其首部中的一个标志位即FIN比特被设置为1.
  2. 当服务器接收到该报文段后,就向发送方回送一个确认报文段。然后服务器发送它自己的终止报文段,其FIN比特被置为1
  3. 最后,该客户对这个服务器的终止报文段进行确认。
    此时,在两台主机上用于该连接的所有资源都被释放了。

六、 拥塞控制原理

拥塞的非正式定义:太多发送主机发送了太多数据或者发送速度太快,以至于网络无法处理
表现:分组丢失(路由器缓存溢出)、分组延迟过大(在路由器缓存中排队)

a) 拥塞原因与代价

i. 情况1:两个发送方和一台具有无穷大缓存的路由器
拥塞时分组延迟太大,达到最大的吞吐率。不会发生丢包,所以没有重传。
ii. 情况2:两个发送方和一台具有有限缓存的路由器
发送方必须执行重传以补偿因为缓存溢出而丢失的分组。
发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本
iii. 情况3:4个发送方和具有优先缓存的多台路由器及多跳路径
当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了

b) 拥塞控制方法

i. 端到端拥塞控制

  1. 在该方法中,网络层没有为运输层拥塞控制提供显式支持。即使网络中存在拥塞,端系统也必须通过对网络行为的观察(如分组丢失与时延)来推断之。TCP报文段的丢失(即通过超时或3次冗余确认而得知)被认为是网络拥塞的一个迹象,TCP会相应地减小其窗口长度。

ii. 网络辅助的拥塞控制

  1. 对于网络辅助的拥塞控制,拥塞信息从网络反馈到发送方通常有两种方式:
  2. 直接反馈信息可以由网络路由器发给发送方。这种方式的通知通常采用了一种阻塞分组的形式
  3. 第二种形式的通知是,路由器标记或更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生

七、 TCP拥塞控制

a) 一个丢失的报文段表意味着拥塞,因此当丢失报文段时应当降低TCP发送方的速率
b) 一个确认报文段表指示该网络正在向接收方交付发送方的报文段,因此,当对先前未确认报文段的确认到达时,能够增加发送方的速率
c) 带宽探测
d) TCP拥塞控制算法

i. 慢启动

  1. 当一条TCP连接开始时,cwnd地值通常初始置为一个MSS的较小值
  2. 在慢启动状态下,cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加一个MSS。即呈指数型增长。
  3. 慢启动结束的第一种情况:如果在一个由超时指示的丢包事件(即拥塞),TCP发送方将cwnd设置为1并重新开始慢启动过程。它还将第二个状态变量的值ssthresh(“慢启动阈值”的速记)设置为cwnd/2,即当检测到拥塞时将ssthresh设置为cwnd的值的一半。
  4. 慢启动结束的第二种方式:直接与ssthresh的值相关联。因为当检测到拥塞时ssthresh设为cwnd的值一半,当到达或超过ssthresh的值时,继续使cwnd翻番可能有些鲁莽。因此,当cwnd的值等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式。当进入拥塞避免模式时,TCP更为谨慎地增加cwnd。
  5. 慢启动结束的第三种方式:如果检测到3个冗余ACK,这是TCP执行一种快速重传并进入快速恢复状态

ii. 拥塞避免

  1. 一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的值的一半。
  2. 采用线性增长的方式,当出现超时时,TCP的拥塞避免算法行为相同。与慢启动情况一样,cwnd的值被设置为1个MSS,当丢包事件出现时,ssthresh的值被更新为cwnd值的一半。如果是由一个三个冗余ACK事件触发的丢包事件,TCP将cwnd的值减半(为使测量结果更好,计及已收到的3个冗余的ACK要加上3个MSS),并且当收到3个冗余的ACK,将ssthresh的值记录为cwnd的值的一半。接下来进入快速恢复状态。

iii. 快速恢复

在快速恢复中,对于引起TCP进入快速恢复状态的缺失报文段,对收到的每个冗余的ACK,cwnd的值增加一个MSS。最终,当对丢失报文段的一个ACK达到时,TCP在降低cwnd后进入拥塞避免状态。如果出现超时事件,快速恢复在执行如同在慢启动和拥塞避免中相同的动作后,迁移到慢启动状态;当丢包事件出现时,cwnd的值被设置为1个MSS,并且ssthresh的值设置为cwnd的一半。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值