范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一文带你搞定TCP流量控制

  摘要理想的流量控制 实际的流量控制 窗口关闭 糊涂窗口综合征 理想的流量控制
  什么是流量控制?
  流量控制就是发送方不能无脑的给接收方发送数据,它需要根据接收方的处理能力来发送数据。
  理想下的流量控制?
  理想意味着在实际中不存在,这里只是简单的说一下流量控制的作用,我们假设的理想通信发生条件为: 客户端是接收方、服务端是发送方 接收窗口和发送窗口相同,为200 接收方和发送方在通信过程中始终保持相同的窗口大小
  客户端发送请求数据 服务端收到请求后,发送确认报文和80字节的数据,可用窗口减少为120(200-80),SND.NXT指针变为321,表示发送方下次发送序列号为321的数据 客户端收到数据后,接收窗口右移80字节,RCV.NXT为321,表示客户端段期望下一个收到的报文的序列号为321,并且发送ACK报文给服务端 服务端发送120字节的数据,可用窗口变为0,服务端无法发送数据 客户端收到120字节的数据,接收窗口右移120字节,接着发送ACK报文给客户端 服务端收到序列号为241(长度为80字节)的ACK报文,因此SND.UNA右移80字节变为321(241+80),可用窗口变为80字节 服务端收到序列号321(长度为120字节)的ACK报文,因此SND.UNA右移120字节变为441(321+120),可用窗口变为200字节 服务端发送160字节的数据,可用窗口变为40字节,并且SND.NXT右移160个字节变为601(441+160) 客户端在收到数据后,接收窗口右移160字节,接着发送ACK报文给服务端 服务端在收到ACK报文后,SND.UNAK右移160字节,并且可用窗口再次恢复为200字节 实际的流量控制
  操作系统缓冲区和滑动窗口的关系
  由于我们发送的数据都是暂存在操作系统的内存缓冲区,所以滑动窗口会收操作系统缓冲区的影响: 操作系统内存缓冲区会动态调整,影响窗口大小 如果应用程序如果无法及时从缓冲区读取内容,也会导致缓冲区减少,此时滑动窗口需要适当调小,避免缓冲区内容溢出。
  应用程序无法及时读取缓存
  假设以下场景: 客户端为发送方,服务端为接收方,初始化发送窗口和接收窗口都为360 服务端繁忙,收到客户端数据后,应用层无法及时读取数据
  客户端发送140字节的数据,可用窗口变为220(360-140),SND.NXT右移140变为141(1+140) 服务端收到140字节的数据,应用程序只读取了40节数据,还有100字节存在于缓冲区中,于是接收窗口变为260(360-100),服务端在给客户端发送ACK报文时会把新的窗口大小告知客户端。 客户端在收到ACK报文以后,发送窗口减少为260,并且由于收到了数据的ACK,因此SND.UNA会右移140个字节变为141,此时可用窗口为260 客户端继续发送180字节的数据,SND.NXT变为321,可用窗口变为80(260-80) 服务端在收到数据后,应用进程没有读取任何数据,于是接收窗口从260缩小为80(260-180),并且在发送ACK报文时告知客户端 客户端收到ACK报文以后,会将发送窗口减少为80,可用窗口此时也是80,因此到这里客户端最多只能发送80字节的数据给服务端 客户端发送最后80字节的数据给服务端,可用窗口变为0 服务端收到80字节的数据后,应用进程依然没有读取任何数据,于是接收窗口减少为0,并在发送ACK报文告知客户端 客户端收到ACK报文以后,发现窗口大小为0,因此将发送窗口减少为0。
  这里会有个问题,窗口变为0也就是发生了窗口关闭。
  操作系统缓冲区变化
  当服务器资源紧张,操作系统有可能会减少缓冲区的大小,如果此时应用程序还无法读取数据,那么将会出现数据包丢失现象。
  客户端发送140字节数据,可用窗口变为220(360-140) 服务端收到140字节数据后,但是系统资源紧张,操作系统减少120字节的缓冲区,并且应用层没有读取任何数据,于是接收窗口变为100(360-120-140),然后发送ACK报文告知客户端 在收到服务端的ACK报文前,客户端又发送了180字节的数据,可用窗口减少到40 服务器收到180字节的数据后,由于接收窗口只有100字节,超出了缓冲区的大小,因此会丢弃该数据包 客户端此时收到之前的ACK报文,会将发送窗口减少为100,此时可用窗口出现了负值-80 =(100 -(321 - 141))
  在上述情况中, 减少缓存先于收缩窗口发生,出现丢包现象 。
  为了防止上述情况, TCP规定是先收缩窗口,过段时间再减少缓存,这样避免丢包。 窗口关闭
  什么是窗口关闭
  窗口大小为0,阻止发送方给接收方发送数据,直到窗口变为非0才能恢复发送。
  窗口关闭的危险
  窗口关闭以后发送端无法发送数据给接收端,只有当接收端处理完数据以后,这时候窗口回复,发送ACK报文信息给客户端,客户端才能恢复发送。但是一旦该ACK报文丢失,那么发送方会一直等待接收方的非0窗口通知,接收方也一直在等待发送方的数据,容易造成死锁现象。
  如何解决窗口关闭带来的死锁?
  只要TCP连接的一方收到对方0窗口的通知,就启动计时器,如果计时器超时就会发送窗口探测报文给对端,对端会给出自己的接收窗口大小。 如果收到的窗口依然为0,发送方重启启动持续计时器 如果收到的窗口不为0,恢复正常发送
  窗口探测的次数一般为3次,每次大约30~60s。如果三次以后接收窗口还是0,有的TCP实现就会发送RST报文来中止连接。 糊涂窗口综合征
  什么是糊涂窗口综合征?
  如果接收方太忙,来不及取走缓冲区的数据,发送方的窗口会越来越小,最后如果接收方空出几个字节并告诉发送方现在有几个字节的窗口,发送方便会发送这几个字节,这就是糊涂窗口综合征。
  糊涂窗口综合征的缺点?
  TCP+IP头部大约有40个字节,为了几个字节数据,需要加上头部相对大的开销,性价比极低。
  糊涂窗口综合征的原因是? 接收方会告知发送方一个小的窗口 发送方可以发送小数据
  如何避免接收方告知小窗口?
  接收方在告知窗口时会采取一种策略: 当窗口大小小于min(MSS,缓存空间/2),就会向发送方告知窗口为0,避免发送方发送数据,等到接收方处理完一些数据后,窗口大小>=MSS或者有一半以上缓存空间可以使用时,就可以把窗口打开让发送方发送数据。
  如何避免发送方发送小数据?
  发送方在发送数据时采用Nagle算法,该算法的思路是延时处理,满足以下两个条件才可以发送数据: 窗口大小>=MSS或是数据大小>=MSS 收到之前发送数据的ACK报文
  对于telnet或ssh这种小数据包交互场景的应用程序,需要关闭Nagle算法。 // 在Java中,对Socket进行以下设置可以关闭Nagle算法。 Socket socket =  new Socket(); socket.setTcpNoDelay(true);

最新互联网企业亏损排行榜,滴滴亏损493亿,成为年度亏损王近期,很多互联网公司的年度财报陆续出炉,表现不一,几家欢喜几家愁。通过2021企业年报的搜集和整理,制作出了2021互联网企业亏损排行榜。希望对你了解这个行业有所帮助。第一名滴滴,航天发展董秘正开展5G低轨卫星以及5G高空无人机项目的研制工作,已形成原型样机航天发展(000547)04月19日在投资者关系平台上答复了投资者关心的问题。投资者公司一季度生产经营情况如何?航天发展董秘投资者您好!有关公司一季度生产经营情况请具体关注公司后续走路快更长寿?研究表明走路快的人大约能多活1520年走路被世界卫生组织认定为世界上最好的运动,可能会有人质疑,走路这么简单,真的是个锻炼身体的好方式吗?事实上,走路这个动作需要身体各个系统的紧密配合,比如骨骼肌肉呼吸系统神经系统等,拒绝雷军之后,魅族落魄卖身吉利魅族困险地近日,吉利汽车收购魅族手机的消息登上热搜,网传收购已经到交割阶段,不日将会官宣。对此,魅族方面回应称多谢对魅族科技的关心。而吉利旗下的星纪时代对该传闻的态度是暂时不作评价韧性足潜力大快递业一季度总体运行平稳原标题快递业一季度总体运行平稳国家邮政局近日发布的2022年邮政行业经济运行情况显示,一季度,邮政行业业务总量和业务收入分别完成3354。3亿元和3268。8亿元,同比分别增长10快递业一季度总体运行平稳国家邮政局近日发布的2022年邮政行业经济运行情况显示,一季度,邮政行业业务总量和业务收入分别完成3354。3亿元和3268。8亿元,同比分别增长10。7和10。0。其中,快递服务iOS15。5正式版怎么样?我的iPhone11ProMax更新了,有三点感受如果没猜错的话,iOS15。5正式版应该是iOS15系统最后一个小版本迭代了。接下来,苹果会把更多的精力放在iOS16系统,而手持iPhone手机的朋友们也可能会很期待iOS16系鹏华基金闫思倩新能源板块调整已相对充分看好智能车光伏投资机会余世鹏中国证券报中证网中证网讯(记者余世鹏)5月20日,鹏华基金的基金经理闫思倩发表观点称,自去年底至今,新能源板块整体调整的时间和空间都已经相对充分,后续看好新能源相关领域投资机微信PC版迎来更新,语音图片功能大调整,办公可以扔掉QQ了?想要了解更多热门资讯玩机技巧数码评测科普深扒,可以点击右上角关注我们的头条号雷科技微信已经成为我们日常生活中不可或缺的社交软件,甚至用微信来办公的公司也不在少数。但和QQ等软件不同2018Python开发者大调查Python和JavaScript最配?编辑suiling出品AIthon大本营(IDpythonnews)在2018年秋季,Python软件基金会与JetBrains发起了年度Python开发者调查。报告的目的是寻找P架构大调整后天猫超市模式生变(图片来源全景视觉)经济观察报记者黄一帆如果说2018年是天猫超市升级的一年,那么2019年将是天猫的改变之年。2018年11月,阿里巴巴集团CEO张勇(花名逍遥子)发出全员公开信
如果禁播西藏徒步视频,还会有人去徒步吗?我现在就在318线上,路途中大把徒步真真假假的都在走,不可能所有平台全禁播,还会有人继续前行!明显会少很多,不夸张的说,起码90都不会去了,在这个吃快餐的时代,为了自己的梦想,在现京东上线二手交易App鲸置,拍拍更名为拍拍严选据Tech星球报道,京东近日上线了一款名为鲸置的二手交易平台,该应用已上架苹果AppStore。根据官方的介绍,鲸置是京东旗下App,用户不仅可以淘到全品类二手好货,还可以快速售出五部门出手,滴滴再次被约谈,10余家网约车平台被拖下水?本文原创,禁止抄袭,违者必究!6月30日晚,滴滴在纽交所静默上市,市值4000亿7月2日,滴滴被相关部门网络安全审查7月4日,滴滴出行APP被下架,市值蒸发超百亿7月9日,滴滴旗下雕塑家便携显示器新品上市OLED面板4K分辨率雕塑家作为一个总部坐落于深圳的新型显示器品牌,拥有极为强悍的产品研发能力和创新能力。旗下便携显示器产品凭借高品质的做工优秀的画面表现,以及丰富的产品功能,在京东平台获得了不俗的销量在搭载苹果M芯片的Mac上重新安装macOS时收到个性化错误怎么办?在重新安装时,您可能会收到一条信息,提示在准备更新期间出现了错误。如果您抹掉了搭载AppleM1芯片的Mac,您可能无法通过macOS恢复功能重新安装macOS。系统可能会显示信息三星S21FE曝光,预计搭载骁龙888处理器,售价4000以下近日,有网友爆出了三星S21FE的相关配置信息和外观设计图。从中可以看到,这款新机应该是采用了骁龙888或者自家的Eyxnos2100处理器,拥有6。4英寸120Hz刷新率单挖孔屏设计抢眼外形帅炸,谷歌Pixel6系列或10月份发布随着时间进入2021年9月,各大厂商新机发布的节奏也加快了。近日据JonProsser爆料,谷歌的亲儿子谷歌Pixel6系列将于10月19日发布。目前谷歌Pixel6系列的渲染图已三星GalaxyZ系列全家桶新品价格公布899起就在刚刚,三星GalaxyZ系列新品发布会结束,新品全家桶的价格也是在第一时间公布给大家。三星GalaxyBuds2售价899元三星GalaxyWatch440mm售价1699元三华为p50pro出来了华为mate40pro值得买吗?毕竟买新不买旧,但是看看今年的p50pro没有5g也是一大缺点,相机摸组差别很大主要是看个人的审美价格方面也是有一点小差距,华为mate40pro个人观念还是值得买的毕竟在6千多的线下门店面临的经营困境,小程序如何帮助商家顺利破局?近两年,因为疫情的原因,任何行业都在艰难生存,特别是线下门店,纷纷倒闭,,面对剩余的一些商家,应该如何规避风险,顺利破局?一线下门店的经营困境1服务范围有限2客户无法长期留存3电商9月9日新机,天玑1200加持,IP685000mAh120W,影像升级不管什么行业,只有掌握了自己的核心技术,才能走得更长远,获得更多利润,尤其是智能手机行业。像老大哥华为品牌就做了一个很好的榜样,不仅研发了属于自己的麒麟芯片,还开发了鸿蒙系统。对于