TCP连接的三次握手和四次挥手

参考文章

简单理解TCP连接的三次握手和四次挥手

三次握手

第一次握手:客户端往服务端发送一个数据包,服务端收到了;证明客户端的发送能力和服务端的接受能力是正常的
第二次握手:服务端接收到请求之后,服务端向客户端发送一个数据包;此时证明服务端的发送能力和客户端的接受能力是正常的

此时客户端知道服务端的发送和接收能力是正常的,但是服务端并不知道客户端的发送和接受能力正常

第三次握手:客户端向服务端发送一个数据包;此时服务端知道客户端的接收和发送能力也是正常的
因此:需要三次握手才能知道确认双方的接收和发送能力是否正常。

为什么需要三次握手,两次不行吗?
如果只有两次握手会出现,客户端第一次发送连接请求之后,但因网络原因或某种原因未收到确认,客户端会第二次发送连接请求;第一个请求在延迟之后到达服务端,服务端误以为客户端发送了一个新的请求,回应确认连接,但是此时客户端已经连接上了客户端,忽略了这个确认请求,也不发送数据,此时服务端一直在等待中,浪费资源

第一次第二次握手可以携带数据?
第一第二次握手不可以携带数据,第三次握手可以,因为假如第一次握手可以携带数据的话,如果有人要恶意攻击服务器,那他每次都在第一次握手中的 SYN 报文中放入大量的数据。因为攻击者根本就不理服务器的接收、发送能力是否正常,然后疯狂着重复发 SYN 报文的话,这会让服务器花费很多时间、内存空间来接收这些报文。

SYN攻击是什么?
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

四次挥手

打开一个连接需要三次握手,而断开连接需要四次挥手,是因为TCP的半关闭造成,所谓的半关闭是指TCP连接的一端在结束发送后还可以接受来自另一端的能力。关闭连接时的四次挥手,客户端和服务端均可主动发起请求

第一次挥手:客户端发起断开连接请求,停止数据发送,客户端进入FIN_WAIT1(终止等待1)状态,等待服务端确认
第二次挥手:服务端接收到客户端发送的断开请求之后,此时服务端处于 CLOSE_WAIT 状态,此时的TCP处于半关闭状态,客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态
第三次挥手:服务端在确认没有数据发送之后,和第一次挥手一样,给客户端发送FIN报文,此时服务端处于 LAST_ACK 的状态。
第四次挥手:客户端在接受到服务端的报文之后,此时客户端处于 TIME_WAIT 状态。给服务端发送一个一个应答报文。服务端在接收到客户端的应答之后就进入CLOSED状态。而客户端需要在确认服务端接收到自己的请求之后才会进入CLOSED状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值