TCP三次握手和四次挥手

1.建立连接(三次握手)

TCP是传输层控制协议,提供可靠服务的连接服务,通过三次握手机制来建立一个可靠的连接。

SYN攻击
在三次握手过程中,服务器发送SYN_ACK之后,收到客户端ACK之前的TCP连接称为半连接。此时服务器处于SYN_RECV状态。当收到ACK之后,服务器进入ESTABLISHED状态。
SYN 攻击就是客户端在短时间内伪造大量不存在的IP地址,向服务器不断的发送syn包,服务器回复确认包并等待客户端的确认,由于源地址不存在,服务器需要不断的重发直到超时,这些伪造的syn包将长时间占用未连接队列,正常的syn请求被丢弃。
SYN攻击是一个典型的DDos攻击。检测SYN攻击非常简单,当你在服务器上看到大量的半连接状态时,特别是源IP地址市随机的,基本可以断定这是一次SYN攻击。
防范(一种解决方式):
网关超时设置:防火墙设置SYN转发超时参数,该参数远小于服务器的timeout时间,当客户端发完syn包时,服务器发送确认后(SYN+ACK),防火墙如果在计数器到期还未收到客户端的确认包(ack),则向服务器发送RST包,以便服务器从队列中删去该半连接。

2.拆除连接(四次挥手)



FIN_WAIT1与FIN_WAIT2:某一方想主动关闭连接,向对方发送fin包,此时SOCKET进入FIN_WAIT1状态,收到对方回应的ack包时进入FIN_WAIT2状态。实际情况下,一般都会立马回复ack包,所以FIN_WAIT1比较难见到,而FIN_WAIT2还有时常常可以用netstat看到
TIME_WAIT:表示收到对方fin包,同时发出ack包,等待2MSL后即可回到CLOSED可用状态
CLOSING:一般比较少见,你发送fin包之后,并没有收到对方的ack包,而是收到对方的fin包。结论是双方同时试图关闭这个SOCKET连接
CLOSED_WAIT:当对方发送一个fin,自己又回复了一个ack,此时进入CLOSED_WAIT。接下来要考虑的事情是是否还有数据要传输给对方,没有则对SOCKET进行关闭
LAST_ACK:被动关闭一方在发送fin包之后,最后等待对方的状态
CLOSED:SOCKET正式关闭

附:
为什么建立连接是三次握手,拆除连接是四次挥手?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一 个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未 必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文 和FIN报文多数情况下都是分开发送的。  

为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED 状态(就好比从SYN_SENT 状态到ESTABLISH 状态那样),但是我们必须假想网络是不可靠的,你无法保证你(客户端)最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK 状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT 状态的作用就是用来重发可能丢失的ACK报文。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值