关于TCP连接三次握手的详细总结

三次握手的过程:

开始时客户端状态:CLOSED

开始时服务器状态:LISTEN

第一次握手

第二次握手

第三次握手

From A to B

客户端 → 服务器

服务器 → 客户端

客户端 → 服务器

状态

客户端:

CLOSED → SYN_SENT

服务器:

LISTEN→ SYN_RCVD

客户端:

SYN_SENT → ESTABLISHED

服务器收到ACK报文后:

SYN_RCVD → ESTABLISHED

报文名字

SYN连接请求报文

SYN-ACK连接确认报文

ACK报文

发的啥

(TCP标志位)

SYN = 1, ACK = 0

初始序号(ISN):seq = x

SYN = 1,ACK = 1

确认号=客户端初始序列号(ISN)+ 1:

ack = x + 1

seq = y

ACK = 1

确认号=服务器初始序列号(ISN)+ 1:ack = y + 1

seq = x + 1(客户端初始seq = x,发送一个SYN报文后消耗掉一个序号,所以这一次是第二个报文段,序号是x + 1)

消耗序号么?

消耗1个序号

不消耗

如果携带数据,则消耗。

如果不携带数据就不消耗。

表示啥

 

表示服务器已经收到了客户端的SYN

表示客户端已经收到服务器的SYN。

 

报文能否携带数据?

不能

不能

半连接队列和全连接队列

 

服务器端收到客户端的SYN-ACK连接确认报文后,此时服务器处于SYN_RCVD状态,双方还没有完全建连接,服务器将此状态下的连接请求放在半连接队列中。

如果 SYN 半连接队列已满,只能丢弃连接吗?

并不是这样。

开启 syncookies 功能就可以在不使用 SYN 队列的情况下成功建立连接。syncookies 是这么做的:服务器根据当前状态计算出一个值,放在己方发出的 SYN+ACK 报文中发出,当客户端返回 ACK 报文时,取出该值验证,如果合法,就认为连接建立成功。

服务器端收到客户端发送的ACK确认后,完成三次握手,TCP连接建立。建立的连接就放到全连接队列中。

当全连接队列满了就可能出现丢包现象。

握手失败怎么办?

客户端发送 SYN 开启了三次握手,之后客户端连接的状态是 SYN_SENT,然后等待服务器回复 ACK 报文。

正常情况下,服务器会在几毫秒内返回 ACK,但如果客户端迟迟没有收到 ACK 会怎么样呢?

客户端会重发 SYN,重试的次数由 tcp_syn_retries 参数控制,默认是 6 次。

当第三次握手失败时,服务器并不会重传ACK报文,而是直接发送RST报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。

 

为什么需要三次握手?(三次握手的目的是什么?能不能用两次握手达到同样的目的?

 

第一次握手

第二次握手

第三次握手

三次握手的目的:

1.确认双方的接收能力和发送能力是否正常

2.指定初始化序列号,为后面的可靠性传输做准备。

进行的操作

客户端发包,服务端收到包

服务器发包,客户端收到包

客户端发包,服务端收到包

谁,得出什么结论?

服务器知道,客户端的发送能力和服务器的接收能力正常。

客户端知道,客户端的接收发送ok

服务器的接收发送ok

服务器知道,客户端的接收能力和发送能力ok,服务器的接收和发送能力ok

 

因此需要三次握手才能确认双方的接收和发送能力是否正常。

三次握手过程中可以携带数据吗?

只有第三次握手的时候可以携带数据。

为什么这样?

如果第一次握手可以携带数据,会让服务器更加容易收到攻击。

如果第一次握手可以携带数据,如果有人恶意攻击服务器,可以在第一次握手中的 SYN连接请求报文 中放入大量数据。因为攻击者不关心服务器的发送和接收能力是否正常,当客户端疯狂重复发送 SYN连接请求报文,会让服务器花费很多时间空间来接收这些报文。

第三次握手,此时客户端已经处于 ESTABLISHED 状态。对于客户端来说,他已经建立起连接了,并且也已经知道服务器的接收、发送能力是正常的了,所以能携带数据也没啥毛病。

什么是SYN(同步序列号:Synchronize Sequence Numbers)攻击?

SYN攻击就是客户端在短时间内伪造大量不存在的IP地址,并向服务器不断发送  SYN连接请求报文  ,服务器回复确认包,并等待客户端确认。由于源地址不存在,因此服务器要不断重发 SYN-ACK连接确认报文 直至超时。这些伪造的SYN包将长时间占用 半连接队列 ,导致正常的SYN连接请求报文因为队列已满而被丢弃,从而因此网络拥塞甚至系统瘫痪。

如何检测SYN攻击?或者说SYN攻击的表现是什么?

当在服务器上看到大量的半连接状态,而且源IP地址是随机的,基本可断定这是一次SYN攻击。

常见的防御SYN攻击的方法有哪些?

(1)缩短超时时间(SYN Timeout)

(2)增加最大半连接数

(3)过滤网关防护

(4)SYN cookies技术

参考博文:https://yuanrengu.com/2020/77eef79f.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值