此图是从别的地方引用过来的,比较直观
这里主要用到如下几个tag:
1.SYN:建立连接,说明发送方向另一方发送建立连接的请求
2.FIN:结束位,说明发送一方告知另外一方,要请求中断连接
3.ACK:说明这个包中带有回复信息
TCP传输数据之前需要进行三次握手
1.首先客户端发送syn(建立连接请求)到服务端——第一次握手
2.服务端收到syn后,然后发送ACK+SYN, ACK是用来告诉客户端收到信息了,同时也带了个自己的syn(请求建立双向连接)——第二次握手
3.客户端收到ACK+SYN后,然后发送个ACK给服务端,这是双方连接就建立了——第三次握手,第三次握手就可以发送数据包了
为什么需要三次握手,大致就是为了确认下双方的机器是否正常,网络是否通畅,是否支持相关协议。
以上三次握手中,当第一次握手后,服务器端就会建立一个半连接状态,放在池子里进行维护,当三次握手完成后,就变成已连接状态;后面发送数据就是基于这个已连接进行通信了
四次挥手
场景:当不需要从服务器端获取信息时候,客户端会主动发送断开请求(这里只是举一个这个场景例子,方便理解,这个一般是浏览器和服务器私下做的事情,不需要人为的干预的)
1.客户端发送FIN给服务端,告诉服务端我要断开请求——第一次挥手
2.服务端收到断开请求后,发送一个ACK给客户端告诉已收到请求——第二次挥手(服务端发送的)
3.服务器发送个FIN请求给客户端,请求断开连接——第三次挥手(服务端发送的)
4.客户端收到断开请求后,发送一个ACK给服务端并断开连接——第四次挥手
以上便是我们熟知的三次握手和四次挥手的过程主要用到三个tag(SYN,ACK,FIN)
在四次挥手中可以理解为三次握手中的第二次握手发送的ack+syn请求被单独拆解成了两次挥手ACK、FIN
syn_flood攻击
在三次挥手的第一次挥手完成的时候,服务器端会建立一个半连接状态放到池子里,这个地方就成了客户端可以进行攻击的点了,客户端可以伪造大量的发送端,这些发送端根本不存在,这样接收端(服务器端)收到请求后,会建立一个半连接的池子,然后第二次握手时发送ack给客户端的时候,客户端由于不存在会迟迟没有响应,同时伪造的其他源头的客户端继续发送大量的请求到接收端,由于半连接的池子放不下了,造成了堵塞,从而无法提供服务了,导致服务器端报错,所以这就是syn_flood的攻击方式。
TCP三次握手和四次挥手
最新推荐文章于 2021-05-10 14:07:30 发布