TCP到底怎么做流量控制?

  • 时间:
  • 浏览:34
  • 来源:空间引流吧_提供小刀辅助网技术_蚂蚱辅助网资讯

亲戚亲戚大伙儿都知道TCP是某种可靠的,面向连接的传输层协议。亲戚亲戚大伙儿一直希望TCP还里能 传输的数据太快越好。可能性处在好多好多 某种情况汇报,发送方数据发送的非常快,为社 让接收方耗尽本人的资源也根好多好多 不及接收,那那先 多余的数据就会被丢弃,这就违背了TCP可靠的宗旨了。

作者:源理君来源:技术原理君|2019-07-02 10:22

亲戚亲戚大伙儿都知道TCP是某种可靠的,面向连接的传输层协议。亲戚亲戚大伙儿一直希望TCP还里能 传输的数据太快越好。可能性处在好多好多 某种情况汇报,发送方数据发送的非常快,为社 让接收方耗尽本人的资源也根好多好多 不及接收,那那先 多余的数据就会被丢弃,这就违背了TCP可靠的宗旨了。

好多好多 有就还里能 引入某种流量控制的手段:让发送方暂且发送太快,既让接收方还里能 顺利接收数据,为社 让好多好多 会造成网络链路的阻塞。

思路

沿着你这个 思路:让发送方暂且发送的太快。那以后接收方控制发送方的数据大小,每次应答的前一天通知发送方本人还剩有好多个空间都还里能 接收数据。当然实际交互那么那么的简单,好多好多 提供了某种思路。利用你这个 思路,诞生了滑动窗口的依据 。

滑动窗口

滑动窗口相似另俩个 窗口,是用来告诉发送方都还里能 发送数据的大小。也都还里能 说是窗口标记了接收方缓冲区的大小。窗口大小也就表示一次能发送有好多个数据量,为社 让你这个 窗口都还里能 滑动,滑动窗口为社 让得名。

怎么里能告知发送方窗口大小?

怎么里能通知发送方窗口大小呢?难道要重新发送一包数据告诉对方吗,这显然是不合理的。都还里能 巧妙的使用确认应答包。有了确认应答包还是欠缺,可能性是***次交互呢?好多好多 有还还里能 在三次握手前一天,就还里能 告知对方。(rwnd表示接收窗口)

在好多好多 的确认应答策略中,每一次发送数据,都还里能 Ack应答,在接收到Ack前一天才会发送下另俩个 数据段,发送方那么接收到Ack应答呢?好多好多 做的依据 强度着实太低。使用了滑动窗口,都还里能 多次发送数据,只要暂且超过对方窗口大小。好多好多 就大大提高了强度。

滑动窗口细节

  1. 接收方将本人还里能 接收的缓冲区大小是在TCP首部中的“窗口大小”字段表示的,通过Ack通知发送方。
  2. 窗口大小是发送方都还里能 发送的***值,也好多好多 说都还里能 不还里能 Ack应答,都还里能 发送多次数据,前提发送总数据量暂且超过窗口大小。
  3. 窗口大小大说明网络的吞吐率高
  4. 操作系统内核维护了一块接收缓冲区,只能Ack应答前一天的数据还里能 从缓冲区中删除。
  5. 接收方一旦发现本人的缓冲区快满了,就会通知对方本人的窗口为更小的值。
  6. 可能性接收方发现本人的缓冲区满了,就会将窗口的大小设置为0,此时发送方将不再发送数据,为社 让还里能 定期发送另俩个 窗口探测数据段,使接收方把窗口大小告诉发送方 。(针对你这个 点重点说明下为那先 还里能 定期发送窗口探针?都还里能 想象下,可能性接收方缓冲区满了,为社 让通过Ack告知发送方窗口大小为0。发送方从此不想发送数据给接收方,接收方也没依据 告知对方本人缓冲区都还里能 接收数据,就会跳出“卡死”的情况汇报)

实例

A 向 B 发送数据。在连接建立时,B 告诉 A:“我的接收窗口 rwnd = 200(字节)。注意:图中的箭转过身面大写的ACK表示首部中的确认位ACK,小写ack表示确认字段的值。

中间的过程是好多好多 的:

  1. A发送了数据序号1至200,还能发送200字节
  2. A发送了数据序号101至200,还能发送200字节
  3. A发送了数据序号201至200,为社 让丢失了数据
  4. B发送了ACK,一起通知A,允许A发送序号201至2000,200字节
  5. A发送了数据序号2001至200,还能发送200字节
  6. A发送了数据序号401至2000,只能发送数据了
  7. A超时重传旧的数据,但只能发送新数据
  8. B发送了ACK,一起通知A,允许A发送序号2001至2000,200字节
  9. A发送了数据序号2001至2000,只能发送数据了
  10. B发送了ACK,一起通知A,不允许A发送数据

【编辑推荐】

【责任编辑:

武晓燕

TEL:(010)684762006】



点赞 0