0%

计网chp3-传输层

参考书:计算机网络自顶向下方法(第6版)(黑皮书)

一些概念

  • rdt(reliable data transfer):停等

    • 不错without error
    • 不乱in order
    • 不丢
  • GBN:流水线

  • SR:流水线

  • multiplexing复用:accept items from more than one source

    • UDP:dest IP+dest port
    • TCP: (source IP+port) + (dest IP+port)
  • demultiplexing分解:deliver items to more than one source

  • congestion control: 拥塞控制是作用于网络的

    • cwnd拥塞窗口
    • ssthresh慢启动阈值
  • flow control:流量控制是作用于接收者的,通过控制发送者的发送速度实现。

传输层

传输层协议提供的服务:

  • 应用程序(进程)间的逻辑通信
  • 差错检测
  • 无连接或面向连接的服务
  • 复用和分解

不提供:

  • delay guarantees
  • bandwith guarantees

除此之外,TCP还提供:

  • connection setup
  • flow control
  • congestion control

可靠数据传输协议

计算机网络 可靠数据传输原理——从rdt协议到GBN到SR_anlian523的博客-CSDN博客_rdt协议

停等

  • 发送方利用率=发送端实际忙于发送比特送进信道的时间/发送时间—>低。
  • 大部分的时间浪费在等待确认上

rdt

可靠数据传输。

  • rdt1.0: 底层信道完全可靠->无错、按序

  • rdt2.0:考虑比特错误、按序

    • ACK,NAK
    • ARQ自动重传请求协议
    • 停等
  • rdt2.1:考虑ACK,NAK是否受损

    • 序号(0,1),包的序号=ACK的序号
  • rdt2.2:无NAK

  • rdt3.0:考虑分组受损+丢包->数据分组丢orACK丢+超时

    • 定时器

    rdt3.0

    • d.Premature timeout过早超时

流水线

允许发送端发送多个分组而无需等待确认。

  • 增加序号范围:每个传输中的分组必须有一个单独的序号
  • 协议的发送方和接收方两端必须能缓存多个分组。发送方至少得能缓存那些已发送但未确认的分组(因为这些分组有可能需要被发送方重传),而接收方或许也需要缓存那些已经正确接收的分组(因为这些分组有可能暂时还不能交付给上层,当小序号的分组迟迟未到,而大序号的分组却先到了)。

GBN

回退N步。受限于在流水线中未确认的分组数不能超过 N(流量控制是需要限制窗口长度的原因之一)。

GBN窗口

  • nextseqnum下一个即将被发送的分组将采用的序号
  • 累积确认,接收方反馈的(ACK, n)代表的是 接收方已正确收到了序号n以及n以前的所有分组

GBN流程

  • pkt2丢失,在pkt2超时重传之前发送过的3,4,5都要重传
  • 单个分组的差错可能会引起GBN重传大量的分组,然后许多本来不用重传的分组会充斥在信道中,造成资源浪费

SR

选择重传

  • 让发送方仅重传那些丢失和受损的分组而避免不必要的重传
  • 接收方也需要维护一个接收窗口,并且需要缓存分组的能力。

SR流程

  • 发送方接收到ACK则滑动窗口
  • vs GBN
    • 根据不同序号启动对应的定时器。而不是当发送窗口内第一个分组时才启动定时器。
    • 当需要发送滑动窗口所属序号以外的数据时,则把它缓存起来。而不是直接抛弃。
    • GBN和SR的发送最大窗口长度=2^n-1,n表示sequence number

TCP

  • 累积应答-与GBN类似
  • 在接收端缓存失序分组-与SR类似
  • 快速重传:如果收到对于一个特定报文段的3个冗余ACK,则在超时事件发生前就会对该报文段进行重传,这大大节约了时间。
  • TCP中的ACK是指接收端希望从发送端收到的下一字节的序号。

UDP

报文

image-20220612164915586

  • length: UDP segment including header
  • checksum:同上
    • 有进位的加法(溢出则加到低位)
    • 取反码

TCP

报文

image-20220612165836865

  • ACK:seq # of next byte expected from other side
  • FIN:置1表示想要关闭连接

三次握手

image-20220612170829221

  • 前两步的seq是随机初始化的

可靠数据传输

是GBN和SR的混合。

拥塞控制

在tcp双方建立逻辑链接关系时, 拥塞窗口cwnd的值被设置为1,还需设置慢开始门限ssthresh,在执行慢开始算法时,发送方每收到一个对新报文段的确认时,就把拥塞窗口cwnd的值加一,然后开始下一轮的传输,当拥塞窗口cwnd增长到慢开始门限值时,就使用拥塞避免算法。TCP的拥塞控制(详解)_程序媛_婷的博客-CSDN博客_拥塞控制

image-20220613135940693

慢启动

当cwnd=2时,发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文后,将拥塞窗口的值加2变为4,因此整体看是呈指数增长。当cwnd=ssthresh时进入拥塞避免。

拥塞避免

cwnd线性加一。直至出现:

  • 超时重传
    • ssthresh=cwnd/2
    • cwnd=1
    • 重新开始慢启动
  • 3次冗余ACK
    • ssthresh=cwnd/2
    • cwnd=cwnd/2[+3]

流量控制