社区
网络编程
帖子详情
tcp当被告知接收窗口为0后的行为?
xiaoyin_ok
2011-03-24 04:55:00
当被告知接收窗口为0后,发送方不能再发送了,它会定期的发送窗口探寻,但如果这时候接收方因为某种原因不再理会发送方,发送方岂不是一直发送窗口探寻,连接也一直不关闭?
...全文
1195
6
打赏
收藏
tcp当被告知接收窗口为0后的行为?
当被告知接收窗口为0后,发送方不能再发送了,它会定期的发送窗口探寻,但如果这时候接收方因为某种原因不再理会发送方,发送方岂不是一直发送窗口探寻,连接也一直不关闭?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xiaoyin_ok
2011-03-25
打赏
举报
回复
我本来想故意造成这种情况,使得链接不被关闭,看来不行啊
jwybobo2007
2011-03-24
打赏
举报
回复
[Quote=引用 4 楼 eke1945 的回复:]
引用 3 楼 jwybobo2007 的回复:
是会一直探测下去,一般为成倍形式上升,第一次探测是1秒,那第二次为2,三次为4,一直到60后,不会再增加
但是要是探测时始终没有ack返回,是会断开的连接的
那断开是因为定时器超时吗,是专门为这种情况设定的定时器吗?如果是一般是多久呢?
[/Quote]
这边所说的ack没收到是极端情况,正常的窗口探测你肯定是能得到应答的.这种窗口探测定时器称为 坚持定时器
xiaoyin_ok
2011-03-24
打赏
举报
回复
[Quote=引用 3 楼 jwybobo2007 的回复:]
是会一直探测下去,一般为成倍形式上升,第一次探测是1秒,那第二次为2,三次为4,一直到60后,不会再增加
但是要是探测时始终没有ack返回,是会断开的连接的
[/Quote]
那断开是因为定时器超时吗,是专门为这种情况设定的定时器吗?如果是一般是多久呢?
jwybobo2007
2011-03-24
打赏
举报
回复
是会一直探测下去,一般为成倍形式上升,第一次探测是1秒,那第二次为2,三次为4,一直到60后,不会再增加
但是要是探测时始终没有ack返回,是会断开的连接的
xiaoyin_ok
2011-03-24
打赏
举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
如果窗口尺寸是 “0”,发送端就将发出一个探测信号以搞清这个窗口什么时间再次打开。如果发送方从来没有收到ACK信息,它就一直不断地重试,直到定时器过期。
[/Quote]
你说的定时器过期,是指的哪个定时器? 是指的keep-alive定时器吗?如果是这个定时器,定期发送的探寻数据报不算是活动吗?
Eleven
2011-03-24
打赏
举报
回复
如果窗口尺寸是 “0”,发送端就将发出一个探测信号以搞清这个窗口什么时间再次打开。如果发送方从来没有收到ACK信息,它就一直不断地重试,直到定时器过期。
TCP
滑动
窗口
详解
TCP
TCP
缓存区与
窗口
的关系
TCP
缓存区与
窗口
关系网上大多错误的理解 滑动
窗口
大小=接受缓存区大小
接收
方通告
窗口
大小=发送方缓存区大小 注意:以上两个结论都是错误的我们在学习网络编程时,通常会参考两本很经典的书《UNIX网络编程 卷1》和《
TCP
/IP 卷1》。然而,我在看与缓存区与
窗口
相关模块知识点时,通常会犯迷糊。感觉这两本书对其的描述很少,描述得有点模糊。《
TCP
/IP详解 卷1》第1版的一句重要的描述,因为在小字处
TCP
/IP传输层协议实现 -
TCP
接收
窗口
/发送
窗口
/通告
窗口
(lwip)
1、
tcp
通告
窗口
/
接收
窗口
/发送
窗口
接收
端有一个
接收
窗口
大小,
接收
端只能
接收
这么多数据,
接收
窗口
的数据需要被上层
接收
后才释放更大
接收
空间,才可以
接收
更多数据;
接收
窗口
之前的数据已经被
接收
,再次
接收
到
接收
窗口
之前的数据可以认为是重复发送的,不处理,
接收
窗口
之后的数据不能
接收
,超出
接收
范围直接丢弃。
接收
端通过
tcp
首部通告
窗口
字段告诉对端本地可以可以
接收
多少数据,用于控制发送端的发送
窗口
大小。 发送端有一个发送
窗口
,发送
窗口
大小即为对端通告
窗口
的大小,只有发送
窗口
内的
tcp
报文才可以发送。发送
窗口
之
TCP
滑动
窗口
——发送
窗口
、
接收
窗口
图中的 ACK 600 确认应答报文丢失,也没关系,因为可以通过下一个确认应答进行确认,只要发送方收到了 ACK 700 确认应答,就意味着 700 之前的所有数据「
接收
方」都收到了。在下图,当发送方把数据「全部」都一下发送出去后,可用
窗口
的大小就为 0 了,表明可用
窗口
耗尽,在没收到 ACK 确认之前是无法继续发送数据了。):是一个绝对指针,它指向的是已发送但未收到确认的第一个字节的序列号,也就是 #2 的第一个字节。发送方发送的数据大小不能超过
接收
方的
窗口
大小,否则
接收
方就无法正常
接收
到数据。
TCP
接收
通告
窗口
一些
TCP
协议栈将
TCP
头部16bit的
窗口
字段解释为有符号的整数,为了兼容这些系统,Linux内核定义了在没有
窗口
扩展系数选项的情况下,最大的
窗口
值为宏MAX_
TCP
_WINDOW,其为最大的16bit的有符号数。但是默认情况下,内核未开启此功能。PROC文件
tcp
_workaround_signed_windows默认为0,用户可置1开启此兼容功能。如果
接收
到对端系统发送的
TCP
窗口
扩张系数选...
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章