5.7TCP的流量控制 ·5.7.1利用滑动窗口实现流量控制 。5.7.2TCP的传输效率 运输层(1) 27
5.7 TCP 的流量控制 • 5.7.1 利用滑动窗口实现流量控制 • 5.7.2 TCP 的传输效率 运输层(1) 27
5.7.1利用滑动窗口实现流量控制 ·一般说来,我们总是希望数据传输得更快一些 但如果发送方把数据发送得过快,接收方就可能 来不及接收,这就会造成数据的丢失。 流量控制(flow control)就是让发送方的发送速 率不要太快,既要让接收方来得及接收,也不要 使网络发生拥塞 利用滑动窗口机制可以很方便地在TCP连接上 实现流量控制。 运输层(1) 28
5.7.1 利用滑动窗口实现流量控制 • 一般说来,我们总是希望数据传输得更快一些。 但如果发送方把数据发送得过快,接收方就可能 来不及接收,这就会造成数据的丢失。 • 流量控制 (flow control) 就是让发送方的发送速 率不要太快,既要让接收方来得及接收,也不要 使网络发生拥塞。 • 利用滑动窗口机制可以很方便地在 TCP 连接上 实现流量控制。 运输层(1) 28
利用可变窗口进行流量控制举例 A向B发送数据。在连接建立时,B告诉A: “我的接收窗口rwnd=400(字节) ” B seq 1,DATA A发送了序号1至100,还能发送300字节 seq 101,DATA 、 A发送了序号101至200,还能发送200字节 seq 201,DATA 丢铁 ACK =1,ack 201,rwnd 300 允许A发送序号201至500共300字节 seq 301,DATA A发送了序号301至400,还能再发送100字节新数提 seq 401,DATA A发送了序号401至500,不能再发送新数据了 seq 201,DATA A超时重传旧的数据,但不能发送新的数据 ACK =1,ack 501,rwnd 100 允许A发送序号501至600共100字节 seq 501,DATA A发送了序号501至600,不能再发送了 ACK=1,ack 601,rwnd =0 不允许A再发送(到序号600为止的数据都收到了) 运输层(1) 29
seq = 1, DATA seq = 201, DATA seq = 401, DATA seq = 301, DATA seq = 101, DATA seq = 201, DATA seq = 501, DATA ACK = 1, ack = 201, rwnd = 300 ACK = 1, ack = 601, rwnd = 0 ACK = 1, ack = 501, rwnd = 100 A B 允许 A 发送序号 201 至 500 共 300 字节 A 发送了序号 101 至 200,还能发送 200 字节 A 发送了序号 301 至 400,还能再发送 100 字节新数据 A 发送了序号 1 至 100,还能发送 300 字节 A 发送了序号 401 至 500,不能再发送新数据了 A 超时重传旧的数据,但不能发送新的数据 允许 A 发送序号 501 至 600 共 100 字节 A 发送了序号 501 至 600,不能再发送了 不允许 A 再发送(到序号 600 为止的数据都收到了) 丢失! 利用可变窗口进行流量控制举例 A 向 B 发送数据。在连接建立时,B 告诉 A: “我的接收窗口 rwnd = 400(字节)”。 运输层(1) 29
可能发生死锁 ·B向A发送了零窗口的报文段后不久,B的接收缓 存又有了一些存储空间。于是B向A发送了wnd= 400的报文段。 ·但这个报文段在传送过程中丢失了。A一直等待收 到B发送的非零窗口的通知,而B也一直等待A发 送的数据。 如果没有其他措施,这种互相等待的死锁局面将 直延续下去。 为了解决这个问题,TCP为每一个连接设有一个持 续计时器(persistence timer)。 运输层(1) 30
可能发生死锁 • B 向 A 发送了零窗口的报文段后不久,B 的接收缓 存又有了一些存储空间。于是 B 向 A 发送了 rwnd = 400 的报文段。 • 但这个报文段在传送过程中丢失了。A 一直等待收 到 B 发送的非零窗口的通知,而 B 也一直等待 A 发 送的数据。 • 如果没有其他措施,这种互相等待的死锁局面将一 直延续下去。 • 为了解决这个问题,TCP 为每一个连接设有一个持 续计时器 (persistence timer)。 运输层(1) 30
持续计时器 ·TCP为每一个连接设有一个持续计时器(persistence timer)o 只要TCP连接的一方收到对方的零窗口通知,就启 动该持续计时器。 若持续计时器设置的时间到期,就发送一个零窗口 探测报文段(仅携带1字节的数据),而对方就在 确认这个探测报文段时给出了现在的窗口值。 。1 若窗口仍然是零,则收到这个报文段的一方就重新 设置持续计时器。 ·若窗口不是零,则死锁的僵局就可以打破了。 运输层(1) 31
持续计时器 • TCP 为每一个连接设有一个持续计时器 (persistence timer) 。 • 只要 TCP 连接的一方收到对方的零窗口通知,就启 动该持续计时器。 • 若持续计时器设置的时间到期,就发送一个零窗口 探测报文段(仅携带 1 字节的数据),而对方就在 确认这个探测报文段时给出了现在的窗口值。 • 若窗口仍然是零,则收到这个报文段的一方就重新 设置持续计时器。 • 若窗口不是零,则死锁的僵局就可以打破了。 运输层(1) 31