免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5241 | 回复: 16

[网络子系统] tcp在clsoe后,如果缓冲区有数据,何时发送fin包? [复制链接]

论坛徽章:
0
发表于 2016-09-08 00:41 |显示全部楼层
现有一个客户端和一个服务器,客户端一直往服务器发送数据,服务器不read数据,此时服务器的接受缓冲区已满,客户端的发送缓冲区也已满,客户端进入阻塞。如果此时直接退出进程,客户端会发给服务器发送一个rst包,客户端发送缓冲区的数据也丢掉了。如果是先close fd后再退出进程,客户端不会马上发送fin包,也不会发送rst包。客户端要等到服务器read data, 接受缓冲区有空间后,会把留在发送缓冲区的发送出去以后才会发送fin的包。那么问题来了,如果服务器一直不read data,那么客户端已close的这个socket什么时候才会给服务器发送fin包,释放资源呢?

论坛徽章:
0
发表于 2016-09-08 20:15 |显示全部楼层
没人回答一下吗?

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-09-08 20:47 |显示全部楼层
关掉客户端

论坛徽章:
0
发表于 2016-09-08 21:44 |显示全部楼层
回复 3# _nosay

客户端进程已退出

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-09-09 09:46 |显示全部楼层
回复 4# bljswpu


那你说的这种情况是不是和DDOS攻击类似,客户端伪造源地址发个SYN包,服务端回SYNACK,但始终收不到第三次握手,就一直有个半连接在那,要等好长时间的超时才释放。
只不过它是处心积虑的,你说的这种情况是正常情况下就会出现的,你是担心好多客户端关闭,造成服务端的压力是吧?

论坛徽章:
0
发表于 2016-09-09 13:45 |显示全部楼层
回复 5# _nosay

我就是想知道  如果客户端发送缓冲器还有数据,而且服务器一直不读取对应socket的数据,客户端的的数据就一直不会发出去,因为对端的接受窗口为0. 此时 如果客户单关闭socket,从抓包的数据上看,此时客户端是不会发fin的包给服务器的。等5分之后,服务器读取了该socket中的数据。接受窗口不为0,客户端会把缓冲区的数据发送出去才会发送fin的包。如果服务器一直不读取该socket的数据,那么接受窗口一直是0,客户端就一直不会把缓冲区的数据和fin的包发送出。那么这个客户端对应的socket资源什么时候释放呢。

论坛徽章:
0
发表于 2016-09-09 13:47 |显示全部楼层
回复 5# _nosay

和服务器压力无关啊 只是客户端资源释放的问题

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2016-09-09 14:54 |显示全部楼层
回复 7# bljswpu


噢,不懂了,等会的人回答吧。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-20 06:20:00
发表于 2016-09-09 18:35 |显示全部楼层
你不知道有timer吗?如果是tcp的话,长时间不接受,那么就不会收到ack,不会受到ack,timer超时,这时会重传,根据拥塞算法进行拥塞控制,具体的窗口变化要看算法,然后最终发送窗口会变为0,停止发送。然后长时间没有活动,保活定时器会启动,如果仍然没有反应,会自动断开连接。
个人理解

论坛徽章:
0
发表于 2016-09-10 12:31 |显示全部楼层
回复 9# goingstudy

我知道保鲜定时器啊,我现在诱惑的是我没有close直接退出进程,客户端会直接丢掉发送缓冲器的数据,直接发给服务器rst包,但是我close再退出进程,客户端为什么不能丢掉发送缓冲器的数据,发送fin包呢。难道rst包优先级太高。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP