7.TCP的十一种状态集

TCP的十一种状态

      • TCP三次握手过程中的五种状态
      • TCP四次挥手过程中的六种状态

TCP三次握手过程中的五种状态

7.TCP的十一种状态集_第1张图片
三次握手过程 (5种状态)

客户端 和 服务端 初始状态: closed

第一个历程: 服务端状态发生变化
closed --> listen 创建网络socket
第二个历程: 客户端状态发生变化
closed --> syn_sent 完成了第一次握手过程 发送了syn
第三个历程: 服务端状态发生变化
listen --> syn_rcvd 接收第一次握手请求, 并做出回复 发送 syn ack
第四个历程: 客户端状态发生变化
syn_sent --> established 接收第二次握手回复的信息, 并发送最后确认信息 ack
第五个历程: 服务端状态发生变化
syn_rcvd --> established 接收第三次握手回复的确认信息

syn泛洪攻击:
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,
而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,
如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
就是让服务端的状态一直处于syn_rcvd的状态,消耗服务端的资源

TCP四次挥手过程中的六种状态

正常情况是以下五种状态:
7.TCP的十一种状态集_第2张图片

特殊情况:
7.TCP的十一种状态集_第3张图片

四次挥手过程 (6种状态)
客户端 和 服务端 初始状态为: established
第一个历程: 服务端状态发生变化
established --> fin_wait1 完成第一次挥手过程 发送 fin ack
第二个历程: 客户端状态发生变化
established --> close_wait 接收第一次挥手信息 并发送 ack信息
第三个历程: 服务端状态发生变化
fin_wait1 --> fin_wait2 接收第二次挥手信息
====================================================
补充: 特殊情况
服务端直接接收到了 fin 和 ack 第三次挥手信息 ,直接由closing 状态替换fin_wait2状态,过渡到time_wait 状态
fin_wait1 --> closing
====================================================
第四个历程: 客户端状态发生变化
close_wait --> last_ack 完成第三次挥手过程 发送 fin ack
第五个历程: 服务端状态发生变化
fin_wait2 --> time_wait 完成第四次挥手过程 发送 ack
第六个历程: 客户端状态发生变化
last_ack --> closed 接收第四次挥手信息
第七个历程: 服务端状态发生变化
time_wait --> closed 等待一段时间(60s 90s 120s)

补充:优化可以针对系统的time_wait进行优化,防止time_wait状态的连接过多,新的连接进不来。

你可能感兴趣的:(Linux基础一,tcp/ip,网络,服务器)