TCP连接的三个阶段
TCP连接采取服务器客户端的方式,主动发起连接的叫做客户端,被动等待接受连接的叫做服务器。
连接建立(三次握手)
首先请求方 也就是客户想要和一台主机(服务器) 建立连接,客户方进程首先通知客户TCP,他想要建立一个和服务器上某个进程的连接,客户中的TCP会用以下的步骤与服务器中的TCP建立一个链接:
ROUND 1:客户端发送请求报文段 无应用层数据。
SYN = 1(同步位 表示是一个连接发送报文)
seq = x (发送的本报文段的第一个字节的序号 4个字节 主机随机产生)
确认号ack无效 且确认位ACK为0
ROUND 2:服务端收到客户端的连接请求报文段
如果服务器端有条件与客户端建立连接,那么服务器端就会为这次TCP连接分配缓存和资源,并向客户端返回请求确认报文段,允许连接,无应用层数据。
SYN = 1(同步位 表示是一个连接发送确认报文)
ACK = 1 (确认位为1)
seq = y
ack(确认号) = x + 1 (期待对方发送来的报文段的第一个字节)
**ROUND 3:**客户端为该TCP连接分配缓存和变量,并且向服务器端返回确认的确认,可以携带数据。
SYN = 0 (不是连接请求或是去连接确认请求)
ACK = 1
seq = x + 1
ack = y + 1
三次握手的大概过程可以这么理解:1 你好 我能亲你吗 2 好的 亲吧 3 然后我亲了他
洪泛攻击
洪泛攻击发生在传输层,这种方式利用了TCP协议的特性,也就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手的第一个数据包,当服务器返回ACK后,该攻击者就不对其进行确认,那么这个TCP连接诶就处于被挂起的的状态,也就是所谓的半连接状态,服务器接收不到再确认的化吗,还会重复的发送ACK给被攻击者。这样就会浪费服务器的资源。攻击者就读服务器发怂大量的这种TCP连接,由于每一个都无法完成三次握手,所以在服务器上,这些TCP连接一直处于被挂起的状态,消耗了服务器的CPU和内存,最后服务器可能死机,无法为正常用户提供服务。
TCP连接释放(四次挥手)
参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的资源(缓存和变量)将会得到释放。
**ROUND 1:**客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。
FIN = 1 (结束位为1)
seq = u
**ROUND 2:**服务器端接收到释放请求 然后回送一个确认报文段,客户到服务器端的这个连接就释放了。
—半关闭状态
ACK = 1 (确认位为1)
seq = w
ack = u + 1
**ROUND 3:**服务器端发送完数据,就会发出连接释放报文段,主动关闭TCP连接
FIN = 1(结束位)
ACK = 1
seq = v
ack = u + 1
ROUND 4:客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,彻底关闭
ACK = 1;
seq = u +1
ack = v + 1
**四次挥手的大概过程可以这么理解:
1 我们分手吧 我要把你的好友删了(连接)
2 删吧 然后删掉了(我对她的连接关闭)
3 她同意删好友之后 觉得你删我我也要删你(连接)说我把你也删了
4 然后我说删就删 然后等了一会儿(2MSL) 彻底断了联系 **
2MSL的由来
客户端发送的第四次挥手报文段,没有发送到服务器
这时候服务器端会再次发送第三次挥手的内容,请求关闭
这时候客户端收到请求,再次发送4次挥手,服务器收到,双方关闭
如果没有2MSL的话,客户端直接关闭,这时候服务端就会重复的发送第三次挥手,服务器无法进入关闭状态
转载:https://blog.csdn.net/NuanShuTT/article/details/108585942