TCP协议详解三:数据的传输及滑动窗口协议

2018-10-0408:01:31计算机网络技术Comments2,922 views字数 1296阅读模式

数据的传输

1. tcp传输的数据分类

  • 成块数据传输:量大,报文段常常满
  • 交互数据传输:量小,报文段为微小分组,大量微小分组,在广域网传输会增加拥堵的出现
  • tcp处理的数据包括两类,有不同的特点,需要不同的传输技术

2. 交互数据的传输技术

2.1 经受时延的确认

  • 概念:tcp收到数据时,并不立马发送ack确认,而是稍后发送
  • 目的:将ack与需要沿该方向发送的数据一起发送,以减少开销
  • 特点:接收方不必确认每一个收到的分组,ACk是累计的,它表示接收方已经正确收到了一直到确认序号-1的所有字节
  • 延时时间:绝大多数为200ms。不能超过500ms

2.2 Nagle算法

  • 解决什么问题:微小分组导致在广域网出现的拥堵问题
  • 核心:减少了通过广域网传输的小分组数目
  • 原理:要求一个tcp连接上最多只能有一个未被确认的未完成的分组,该分组的确认到达之前,不能发送其他分组。tcp收集这些分组,确认到来之前以一个分组的形式发出去
  • 优点:自适应。确认到达的快,数据发送越快。确认慢,发送更少的组。
  • 使用注意:局域网很少使用该算法。且有些特殊场景需要禁用该算法

3. 成块数据的传输

  • 主要使用滑动窗口协议

滑动窗口协议

1. 概述

  • 解决了什么问题:发送方和接收方速率不匹配时,保证可靠传输和包乱序的问题
  • 机制:接收方根据目前缓冲区大小,通知发送方目前能接收的最大值。发送方根据接收方的处理能力来发送数据。通过这种协调机制,防止接收端处理不过来。
  • 窗口大小:接收方发给发送端的这个值称为窗口大小

2. tcp缓冲区的数据结构

TCP协议详解三:数据的传输及滑动窗口协议
  • 接收端:
    • LastByteRead: 缓冲区读取到的位置
    • NextByteExpected:收到的连续包的最后一个位置
    • LastByteRcvd:收到的包的最后一个位置
    • 中间空白区:数据没有到达
  • 发送端:
    • LastByteAcked: 被接收端ack的位置,表示成功发送确认
    • LastByteSent:发出去了,还没有收到成功确认的Ack
    • LastByteWritten:上层应用正在写的地方

3. 滑动窗口示意图

3.1 初始时示意图

TCP协议详解三:数据的传输及滑动窗口协议
  • 黑框表示滑动窗口
  • #1表示收到ack确认的数据
  • #2表示还没收到ack的数据
  • #3表示在窗口中还没有发出的(接收方还有空间)
  • #4窗口以外的数据(接收方没空间)

3.2 滑动过程示意图

TCP协议详解三:数据的传输及滑动窗口协议
  • 收到36的ack,并发出46-51的字节

4. 拥塞窗口

  • 解决什么问题:发送方发送速度过快,导致中转路由器拥堵的问题
  • 机制:发送方增加一个拥塞窗口(cwnd),每次受到ack,窗口值加1。发送时,取拥塞窗口和接收方发来的窗口大小取最小值发送
  • 起到发送方流量控制的作用

5. 滑动窗口会引发的问题

5.1 零窗口

  • 如何发生: 接收端处理速度慢,发送端发送速度快。窗口大小慢慢被调为0
  • 如何解决:ZWP技术。发送zwp包给接收方,让接收方ack他的窗口大小。

5.2 糊涂窗口综合征

  • 如何发生:接收方太忙,取不完数据,导致发送方越来越小。最后只让发送方传几字节的数据。
  • 缺点:数据比tcp和ip头小太多,网络利用率太低。
  • 如何解决:避免对小的窗口大小做响应。
    • 发送端:前面说到的Nagle算法。
    • 接收端:窗口大小小于某个值,直接ack(0),阻止发送数据。窗口变大后再发。

作者:kinnylee
来源:掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/wangluo/6268.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/wangluo/6268.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定