CAN201 W5

This is the note of CAN201 Week5.
We will focus on Transport Layer.
Roadmap

  1. Pipelined communication
  2. TCP: connection-oriented transport
  3. Principles of congestion control

Lecture

rdt3.0: stop-and-wait operation
就是之前我们说的停等机制。3.0同时考虑到封包遗失与资料错误的情形,除了使用ACK机制,另外在传送端多了倒数计时器,封包送出去如果超过时间仍未收到ACK或是收到不正确编号的ACK,则再送出封包一次。


Piplined protocols

Pipelining: sender allows multiple, “in-flight”, yet-to-be acknowledged pkts.

  • Range of sequence numbers must be increased 序号的范围必须增加
  • Buffering at sender and/or receiver 发送端和/或接收端缓冲

Pipelining: increased utilization 管道增加利用率


滑动窗口协议(slide window)

  • 发送缓存区
    • 形式:内存中的一个区域,落入缓存区的分组可以发送
    • 功能:用于存放已发送,但是没有得到确认的分组
    • 必要性:需要重发时可用
  • 发送缓存区大小:一次最多可用发送多少个未经确认的分组
    • 停止等待协议=1
    • 流水线协议>1,合理的值,不能很大,链路利用率不能够超100%
  • 发送缓冲区中的分组
    • 未发送的:落入发送缓冲区的分组,可以连续发送出去;
    • 已经发送出去的、等待对方确认的分组:发送缓冲区分组只有得到确认才能删除

发送窗口最大值小于等于发送缓存区的大小
发送窗口每发送一个信息,就往前挪一个,一直挪到发送窗口的后沿,不能超过发送缓冲区。数据收到接受信号之后,就离开发送窗口,窗口移动到后面的数据上。
接受窗口每次只能接受一个信息,接受完之后才能向后滑动,继续接受。

接受窗口

接收窗口 (recieving window)=接受缓存区

  • 接收窗口用于控制哪些分组可以被接收
    • 只有收到的分组序号落入接受窗口才允许接收
    • 若序号在接受窗口之外,则丢弃
  • 接收窗口尺寸Wr=1,则只能顺序接收 (GBN协议)
  • 接收窗口尺寸Wr>1,可以乱序接收 (Selected repeat协议)
    • 但提交给上层的分组,要按序
  • 例子:Wr=1,在0的位置:只有0号分组可以接受:向前滑动一个,罩在1的位置,如果来了第2号分组,则丢弃:

GBN和SR的相同和不同点

GBN和SR的相同和不同点
GBN严格按照顺序进行窗口的移动,接收方没有缓存区和滑动窗口,所以会产生后面重复的发送。SR是无序的传送,不会出现重复的发送,只会发送出现问题的信息,在接收方建立缓存区和滑动窗口,帮助乱序的信息留下来。


GBN: 接收方拓展的FSM

  • 只发送ACK:对顺序接受的最高序号的分组
    • 可能会产生重复的ACK
    • 只需要记住expectedseqnum: 接收窗口=1
  • 对乱序的分组:
    • 丢弃 (不缓存)接收方没有缓存
    • 对顺序接受的最高序号的分组进行确认 - 累加确认 可能有丢失ack,但是只需要按照最后一个确认就可以了

GBN in action


SR: 选择重传

  • 接收方对每个正确接受的分组,分别发送ACKn(非累计确认)
    • 接受窗口>1 可以缓存乱序的分组
    • 最终讲分组按照顺序交付给上层
  • 发送方只对那些没有收到ACK的分组进行重发-选择性重发:发送方为每个未确认的分组设定一个定时器
  • 发送窗口的最大值(发送缓冲区)限制发送未确认分组的个数


Selective repeat in action

GBN发送窗口最大值是2^n-1,SR发送窗口最大值是2^(n-1)

SR会出现一些问题,当窗口的大小不合适的时候:
SR dilemma
发送方无法确定发送的pkt和自己需要的是否匹配


TCP: connection-oriented transport

TCP: overview

  • Point-to-point: 点对点
    • one sender, one receiver
  • Reliable, in-order byte steam: 可靠的按顺序的字节流
    • no “message boundaries” 没有报文边界
  • Pipelined: 有滑动窗口
    • TCP congestion and flow control set window size TCP拥塞控制和流量控制设置窗口大小
  • Full duplex data: 全双工数据 既有累加确认,两方也都有缓存区
    • bi-directional data flow in same connection 同一连接中的双向数据流
  • Connection-oriented: 会相关联 要握手
    • handshaking (exchange of control msgs) inits sender, receiver state before data exchange 握手(交换控制msg)在数据交换前初始化发送方、接收方状态
  • Flow controlled: 流控制
    • sender will not overwhelm receiver 发送方不会压倒接收方

TCP segment structure


s段是用于三次握手
TCP seq. numbers, ACKs
Sequence numbers: 序列号

  • Byte stream “number” of first byte in segment’s data

Acknowledgements: 确认号

  • Seq # of next byte expected from other side
  • Cumulative ACK

Q: How receiver handles out-of-order segments 接收器如何处理无序段
A: TCP spec doesn’t say, - up to implementor TCP规范没有说,由实现者决定

一个序列号和确认号的例子:

一共发送了三个报文段。第一个报文段是由客户发给服务器,在他们的数据字段里包含一字节的C的ASCII码。然后第一个报文段的序号字段是42。由于客户还没有接受来自服务器的任何数据,因此该第一个字段的确认号字段就是79。
第二个报文段是由服务器发往客户。首先为该服务器所受到的数据提供一个确认。通过在确认号字段中填入43,服务器告诉客户它已经成功接收到了字节42,正在等待43的出现。所以在第二个报文段的数据字段中填入的是C的ASCII码。第二个报文段的序号是79,它是该TCP连接上从服务器到客户的数据流的起始序号,这也正是服务器要发送的第一个字节数据。值得注意的是,对客户到服务器的数据的确认被装载在一个字节的数据。承载服务器到容户的数据的报文段中;这种确认被称为是被捎带(piggybacked)在服务器到客户的数据报文段中的。
第三个报文段是从客户发往服务器的。它的唯一目的是确认已从服务器收到的数据。(前面讲过,第二个报文段中包含的数据是字符C,是从服务器到客户的。)该报文段的数据字段为空(即确认信息没有被任何从客户到服务器的数据所捎带)。该报文段的确认号字段填入的是80,因为客户己经收到了字节流中序号为79及以前的字节,它现在正等待着字节80的出现。你可能认为这有点奇怪,即使该报文段里没有数据还仍有序号。这是因为TCP存在序号字段,报文段需要填入某个序号。
Host A和Host B是相互发送的。


TCP round trip time, timeout

往返时间的估计和超时
这里产生的问题就是:如何设置TCP的超时时间?
首先,必须要比RTT长,但是不同情况下的RTT差异很大;假如太短就会导致提前超时,造成不必要的重传;假如时间太长就会导致反应太慢而造成segment loss.

Q: How to estimate RTT? 如何估计RTT呢?

  • SampleRTT: measured time from segment transmission until ACK receipt
  • Ignore retransmissions
  • SampleRTT will vary, want estimated RTT “smoother”
  • Average several recent measurements, not just current SampleRTT
  • 公式:EstimatedRTT = (1- a)*EstimatedRTT + a*SampleRTT (a = 0.125)

如何设置timeout时间:估计RTT加上“安全边际”
DevRTT = (1-b)*DevRTT + b*|SampleRTT-EstimatedRTT| (typically, b = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT 4*DevRTT=“safety margin”


TCP reliable data transfer

  • TCP creates rdt service on top of IP’s unreliable service
    • pipelined segments
    • cumulative acks 累积ack
    • single retransmission timer 单重传定时器
  • Retransmissions triggered by: 触发重传的事件
    • timeout events 超时事件
    • duplicate acks 复制ack

TCP sender events

Data rcvd from app:

  • Create segment with seq# 创建段与seq#
  • seq# is byte-stream number of first data byte in segment seq#是段中第一个数据字节的字节流号
  • Start timer if not already running 开启计时器

Timeout:

  • Retransmit segment that caused timeout 重发segment导致超时
  • Restart timer 重新启动计时器

Ack rcvd:

  • If ack acknowledges previously unacked segments 如果ack确认先前未打包的段
    • Update what is known to be ACKed 更新已知被ack的内容
    • Start timer if there are still unacked segments 如果仍然有未打包的段开始定时器

TCP sender


这段自己看ppt,最重要的内容是TCP的三次握手和四次挥手。


Principles of congestion control

看b站 笔记要抄的太多了 b站写的很详细。
中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程


References

  1. XJTLU slides CAN201
  2. 中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
  3. 计算机网络 自顶向下方法.原书第6版
作者

Felix Chen

发布于

2021-10-16

更新于

2021-10-24

许可协议

评论