什么是滑窗迭代算法?

什么是滑窗迭代算法?,第1张

TCP的首部中有一个很重要的字段就是16位长的窗口大小,它出现在每一个TCP数据报中,配合32位的确认序号,用于向对端通告本地socket的接收窗口大小。也就是说,如果本地socket发送一个TCP数据,其32位确认序号是5,窗口大小是5840,则用于告诉对端,对端已经发出的4个字节的数据已经收到并确认,接下来,本地socket最多能够接收从第5个字节开始的5840个字节长度的数据。这是由接收方进行的一种流量控制,接收方通过告诉发送方自己所能够接收数据的大小,达到控制发送方发送速度的目的。

结构体struct tcp_sock中有很多成员数据跟滑动窗口协议相关,需要注意的是这里讲的滑动窗口都是指本地socket的接收窗口。

成员window_clamp表示滑动窗口的最大值,滑动窗口的大小在变化的过程中不能超出这个值。它在TCP连接建立的时候被初始化,被置为最大的16位整数左移窗口的扩大因子,因为滑动窗口在TCP首部中以16位表示,window_clamp太大会导致滑动窗口不能在TCP首部中表示。

成员rx_opt是一个struct tcp_options_received结构体,它有两个成员snd_wscale和rcv_wscale,分别表示来自对端通告的滑动窗口扩大因子(本地发送数据报时需要遵守),和本地接收滑动窗口的扩大因子。snd_wscale从来自对端的第一个SYN中获取。rcv_wscale在本地socket建立连接时初始化,它赋值的原则是使16位整数的最大值左移rcv_wscale后,至少可以达到整个接收缓存的最大值。接收缓存最大值在协议栈中由全局变量mysysctl_rmem_max表示,它是256*(256+sizeof(struct sk_buff))后的值,为107520,但sysctl_tcp_rmem[3]所表示的接收缓存的上限更大,为174760,所以,取后者,这样的话,rcv_wscale的值几乎可以说是固定的,为2。所以window_clamp的值就是 65535 <<2 = 262140。可见,window_clamp的值超出了接收缓存的最大值,但这没有关系,因为在滑动窗口增长的时候,会考虑接收缓存的大小这个因素的。

rcv_wnd表示当前的接收窗口的大小,这个值在接收到来自对端的数据后,会变动的。它的初始值取接收缓存大小的3/4跟MAX_TCP_WINDOW之间的最小值,MAX_TCP_WINDOW在系统中的定义为32767U。然后,还要根据mss的值作一个调整,调整逻辑是:如果mss大于3*1460,则如果当前的rcv_wnd大于两倍的mss,就取两倍的mss作为rcv_wnd的值;如果mss大于1460,则如果当前的rcv_wnd大于3倍的mss,就取3倍的mss作为rcv_wnd的新值;否则,如果rcv_wnd大于4倍的mss,就取4倍的mss作为rcv_wnd的新值,我们的实验环境的mss值为1448(因为tcp首部有12字节的时间戳选项),所以rcv_wnd最后被调整为1448*4=5792。

OriginOS Ocean系统开启小窗模式方法

方法一、侧滑呼出小窗应用列表

全屏手势下,侧滑并停顿可呼出小窗应用列表,呼出后滑动到需使用应用即可打开小窗(侧滑设置路径:设置--系统导航--快速启动应用小窗,开启开关);

方法二、应用内滑启动小窗

在应用内,从屏幕左下角(靠近侧边位置)向内滑动即可打开小窗(开启方法:进入设置--快捷与辅助--多任务--手动启动小窗--打开“左下角内滑启动小窗”);

方法三、应用库启动小窗

抽屉风格桌面上滑呼出应用库,长按并拖动支持小窗的应用图标;

方法四、近期应用启动小窗

调出近期应用界面,点击软件名称后的“▼”图标选择”小窗“即可开启;(部分系统软件不支持开启小窗)

方法五、悬浮消息启动小窗

看视频时,社交应用的消息通知显示为悬浮消息,可自定义设置展开方式(小窗展开/分屏展开);

方法六、游戏侧边栏启动小窗

玩游戏时,可以点击游戏魔盒侧边栏“系统小窗”按钮、三指上滑或在控制中心点击“分屏”启动游戏画中画;

方法七、分屏后启动小窗

将软件分屏后,按住分屏应用顶部“▁▁”指示条,然后将分屏应用窗口拖动至屏幕中间位置,即可将应用切换为小窗形态。

打开VS2008或者2005.新建一个“windows窗体应用程序”,默认情况下有一个窗体Form1,从左边工具箱拖动一个button放入窗体Form1,双击窗体Form1,进入Form1.cs文件,在private void Form1_Load(object sender, EventArgs e){}方法里初始化变量count;就是int count = 0;

然后切换到Form1设计。。双击刚才托上去的BUTTON,然后又会进入到Form1.cs代码页面,在 private void button1_Click(object sender, EventArgs e){}方法里写上代码

count++//每点击一次计数加

button1.Text = count.ToString()//类型转换

按Ctrl+F5运行!

vs已经封装好你需要的 *** 作。button的属性,在右下角可以修改。不需要知道源文件在哪里的。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11104900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存