netty 客户端主动关闭连接_Netty里配置的SO_LINGER参数作用是啥,应该如何调优?...

本文深入解析TCP四次挥手过程及两种关闭方式,探讨Netty中配置SO_LINGER参数对TCP连接关闭的影响。通过Jedis的实现,解释为何在某些场景下选择暴力关闭(RST)而非优雅关闭(FIN)。
摘要由CSDN通过智能技术生成
d243eeb37aea8f61be391f1acd09698f.png

点击上方蓝字关注我吧!

本篇文章大概3000字,阅读时间大约8分钟

本文重点总结了TCP连接的四次挥手过程,包括状态迁移以及序号的变化,然后引出了TCP连接的两种关闭方式,以及它们所对应的行为。并且总结了如何控制这些行为的方法,最后结合Jedis的实现,来总结服务器优雅关闭的一些思路。

803e7f3028604bc05f579c0eb83778a0.gif

文章Netty里配置的backlog参数作用是啥,应该如何调优?里梳理了TCP协议三次握手的序号变化规律和状态迁移图,下面总结TCP正常关闭即四次挥手的过程。关闭TCP连接的方式有两种:

1、发送FIN包给对方,标识自己这端所有数据都已发出,后面不会再发数据,该方式是优雅关闭

2、发送RST包给对方,即强制废掉这个连接,该方式无法做出任何安全性和稳定性的保证。

假设客户端调用Socket的close方法关闭连接(无所谓谁先关谁,道理都一样),这是正常的关闭流程,操作系统的TCP协议栈会等TCP发送缓冲区的数据发送完,发一个【FIN】报文段主动关闭到服务端的连接,因为TCP是全双工连接,所以只能一次关闭一个方向的连接,总共需要关两次,最少4个报文段交互。

4d603d2989f3e6c9c9779246a6c9aba1.png

此时客户端状态从ESTABLISHED迁移到FIN-WAIT-1态。以后客户端就不能在该条链路上继续给服务端发数据,但是还能接收服务端返回的数据,该条链路处于半关闭状态。为了节省网络资源,主动发送的【FIN】报文段同时也是【ACK】报文段,它可以携带数据,简单说,客户端可将最后发送的数据段设置为【FIN】报文段,当然也可以不携带数据,只发送一个【FIN】,但是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值