关于Tcp/ip断开连接的4次握手(图文解释)

本文探讨了TCP连接中的TIME_WAIT状态,指出当客户端主动关闭连接时会进入该状态,并停留2MSL时间。在Nginx+后端服务架构中可能出现TIME_WAIT数量告警的问题,可以通过调整TCP_FIN_TIMEOUT值来缓解。此外,文章还介绍了TCP标志位和客户端、服务器TCP状态演进过程。
摘要由CSDN通过智能技术生成

图写的比较直白,一般都能看懂!如下图:

关于TIME_WAIT状态的出现,简单描述就是:

        通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。客户端主动关闭连接时,会发送最后一个ACK后,然后会进入TIME_WAIT状态,再停留2个MSL时间进入CLOSED状态。(至于为什么是2MSL,解释比较多,暂未确定具体原因!有知道的可以留言回复)

        架构设计上前端采用Nginx + 后线服务这种组合的时候,有时会碰到一个问题就是TIME_WAIT数量告警。(此解决方案查看这篇文章Nginx + 网关后线服务出现TIME_WAIT告警的解决办法

# 查看默认的MSL值(60s)
$ cat /proc/sys/net/ipv4/tcp_fin_timeout

# 修改默认60为240
$ echo 240 > /proc/sys/net/ipv4/tcp_fin_timeout

# 重新加载配置文件
$ sysctl -p /etc/sysctl.conf

# 查看是否已经生效
$ sysctl -a | grep tcp_fin_timeout
net.ipv4.tcp_fin_timeout = 240

MSL:(Maximum Segment Lifetime)

一个数据分片(报文)在网络中能够生存的最长时间。

TCP标志位:

SYN(synchronous建立联机)

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

Sequence number(顺序号码)

Acknowledge number(确认号码)

Client TCP状态演进过程:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
Server TCP状态演进过程:
CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED

状态含义如下:

LISTEN - 侦听来自远方TCP端口的连接请求; 
SYN-SENT -在发送连接请求后等待匹配的连接请求; 
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 
FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2 - 从远程TCP等待连接中断请求; 
CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 
CLOSING -等待远程TCP对连接中断的确认; 
LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 
TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 
CLOSED - 没有任何连接状态;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Bai.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值