美文网首页
TCP状态转移总结

TCP状态转移总结

作者: Jayzee | 来源:发表于2018-09-21 09:20 被阅读19次

简单总结几个个人觉得较为重要的TCP状态。

20170120191710076.png

名词定义:

  • 客户端:发起connect操作的端
  • 服务端:发起bind操作的端
  • 主动关闭端:主动发起四次挥手端
  • 被动关闭端:被动接收四次挥手FIN报文端

CLOSED

  • 客户端发送SYN后进入SYN_SENT,若超时未收到ACK,则进入CLOSED
  • 被动关闭端接收到FIN后,发送ACK后进入CLOSE_WAIT,等待应用可进入CLOSED状态后,发送FIN后进入LAST_ACK状态,等待并接收到主动关闭端的ACK后进入CLOSED状态
  • 主动关闭端接收到FIN后,进入TIME_WAIT,等待2MSL时间后,进入CLOSED状态
  • 通过设置SO_LINGER可干预内核对于socket close动作的静默处理

CLOSE_WAIT

若程序有大量socket进入此状态,则意味着被动关闭端大量的连接在收到FIN后,程序没有主动将socket close掉。对应到Java的Mina或Netty框架,应该在IDLE或者EXCEPTION_CAUGHT时,主动将socket进行close。

FIN_WAIT

  • FIN_WAIT-1是主动关闭端发送FIN后进入的状态
  • 主动关闭端若收到被动关闭端ACK,则进入FIN_WAIT-2
image.png

服务端的SYN_RCVD与ESTABLISHED

  • 服务端处于SYN_RCVD的Socket存在于服务端的半连接队列中,队列数量配置内核参数tcp_max_syn_backlog。臭名昭著的SYN Flood攻击便是利用TCP服务端的SYN_RCVD状态进行攻击的(服务端静默重发ACK五次),半连接队列满了之后,静默处理是拒绝接受新的SYN,攻击者由此达到了拒绝服务攻击的目的,可通过Linux的SYNcookie防范此攻击(此时tcp_max_syn_backlog值无效)
  • 服务端处于ESTABLISHED的Socket存在于服务端的全连接队列,队列数量配置内核参数backlog,队列满了将拒绝接受accept新连接,可配置内核参数设置队列满之后静默丢弃客户端的ACK还是发送回一个RST
image.png

相关文章

  • TCP状态转移总结

    简单总结几个个人觉得较为重要的TCP状态。 名词定义: 客户端:发起connect操作的端 服务端:发起bind操...

  • TCP状态转移

    TIME_WAIT为什么持续两个MSL(报文段最大生存时间) TIME_WAIT 为主动关闭的一方所出现的状态,上...

  • TCP那些事儿

    目录: TCP是什么TCP报文结构TCP连接过程TCP状态转移TCP流量控制 —— 滑动窗口TCP拥塞控制TCP可...

  • linux服务器性能调优之tcp/ip性能调优

    TCP状态转移图 一、TCP状态介绍: 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连...

  • TCP三次握手和四次挥手深入实践

    TCP连接状态 图1是TCP三次握手、数据传输、四次挥手三个阶段的状态转移图,状态说明如下: LISTEN:侦听来...

  • tcp详解 netstat理解

    为了深入理解TCP协议, 我们需要了解TCP客户端/服务端的状态转移和正确性保持. 建议阅读Unix网络编程卷1第...

  • tcp三次握手四次挥手

    tcp三次握手四次挥手 TCP状态图 TCP状态时序图 tcp三次握手 流程图: TCP握手状态说明: TCP_S...

  • TCP状态装换图知识详解(图)

    TCP状态装换图 [TOC] 状态图 状态解释 tcp连接的建立3次握手 tcp断开连接4次挥手 TCP正常连接建...

  • TCP连接的状态详解以及故障排查

    1、TCP状态linux查看tcp的状态命令:1)、netstat -nat 查看TCP各个状态的数量2)、lso...

  • TCP状态

    LISTEN: 侦听来自远方的TCP端口的连接请求 SYN-SENT: 再发送连接请求后等待匹配的连接请求 SYN...

网友评论

      本文标题:TCP状态转移总结

      本文链接:https://www.haomeiwen.com/subject/qatanftx.html