查看: 150|回复: 1

[教程] 每日一贴第十八天 TCP移动窗口(转)

[复制链接]

49

主题

1

好友

1099

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    开心
    前天 11:02
  • 签到天数: 117 天

    [LV.6]常住居民II

    发表于 2016-8-25 16:44:20 |显示全部楼层
    本帖最后由 apple_9938 于 2016-8-25 18:00 编辑

    在进行STM32开发的时候遇到的问题,出现网络端口挂掉情况,经过用wireshark抓包,发现TCP移动窗口变成0,原来是客户端只接收没有处理的缘故。
    以下是查到的资料:
    TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。
    一、滑动窗口协议
         关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。
         所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;2. “滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。在引入一个例子来说这个协议之前,我觉得很有必要先了解以下前提:
    -1. TCP协议的两端分别为发送者A和接收者B,由于是全双工协议,因此A和B应该分别维护着一个独立的发送缓冲区和接收缓冲区,由于对等性(A发B收和B发A收),我们以A发送B接收的情况作为例子;
    -2. 发送窗口是发送缓存中的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓冲区;
    -3. 发送窗口中相关的有四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之中)、允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不允许发送的数据;
    -4. 每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送;
         TCP建立连接的初始,B会告诉A自己的接收窗口大小,比如为‘20’:
         字节31-50为发送窗口

         A发送11个字节后,发送窗口位置不变,B接收到了乱序的数据分组:

         只有当A成功发送了数据,即发送的数据得到了B的确认之后,才会移动滑动窗口离开已发送的数据;同时B则确认连续的数据分组,对于乱序的分组则先接收下来,避免网络重复传递:




    回复

    使用道具 举报

    无效楼层,该帖已经被删除
    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-9 09:53 , Processed in 0.199379 second(s), 10 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部