Tcp三次握手和四次挥手状态图

本文详细介绍了TCP协议中的三次握手与四次挥手过程,解释了SYN攻击原理及如何检测,阐述了TIME_WAIT状态的作用及其对于确保连接正确关闭的重要性。
三次握手

这里写图片描述

四次挥手
  • 正常情况下
    这里写图片描述

  • 同时挥手
    这里写图片描述

SYN攻击:

在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行: #netstat -nap | grep SYN_RECV

TIME_WAIT状态是什么?

下文转载自 TIME_WAIT是什么?

在TCP断开的过程中会有四个状态变化过程,如下图所示:
这里写图片描述
在连接撤销过程中,有如下过程:

  • HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
  • HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
  • 一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
  • HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态.
为什么需要TIME_WAIT?
  • 因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.
    如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方HOST2的FIN消息了.

  • TIME_WAIT为连接中”离群的段”提供从网络中消失的时间。
    考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。

TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。为了确保数据的可靠传输,TCP使用三次握手建立连接,使用四次挥手断开连接。下面是TCP三次握手四次挥手的流量及其解释: ### 三次握手 1. **第一握手**:客户端发送一个SYN(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认。 2. **第二握手**:服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。 3. **第三次握手**:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端服务器进入ESTABLISHED(已建立)状态,完成三次握手。 ``` 客户端 服务器 | | |--- SYN ---> | | | |<-- SYN+ACK --| | | | |--- ACK ---> | | | ``` ### 四次挥手 1. **第一挥手**:客户端发送一个FIN(结束)包到服务器,进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务器了。 2. **第二挥手**:服务器收到FIN包后,发送一个ACK包给客户端,进入CLOSE_WAIT状态,表示服务器已经知道客户端没有数据要发送了。 3. **第三次挥手**:服务器发送一个FIN包给客户端,表示服务器也没有数据要发送给客户端了,进入LAST_ACK状态。 4. **第四次挥手**:客户端收到服务器的FIN包后,发送一个ACK包给服务器,进入TIME_WAIT状态,等待可能出现时间(2MSL)后,客户端进入CLOSED状态。服务器收到ACK包后,也进入CLOSED状态。 ``` 客户端 服务器 | | |--- FIN ---> | | | |<-- ACK ----| | | | |<---> | | | ``` 通过三次握手四次挥手TCP确保了连接的可靠建立断开,从而保证了数据的可靠传输。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值