TCP的三次握手四次挥手

TCP协议是一种面向连接,面向字节流,可靠的传输控制协议。在TCP协议可靠的背后,是许多人的努力,其中最重要的一点就是TCP的三次握手四次挥手。

  

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

第一步:客户端进程向服务器端发送将控制位SYN=1的“连接建立请求报文”;此时客户端进程的状态从CLOSE转换为SYN_SEND;

第二步:服务器接到来自客户端的SYN请求,同意建立连接并向客户端发送SYN=1+ACK=1的“连接建立请求确认报文”;此时服务器端的状态从LISTEN转换为SYN_RCVD。

第三步:客户端收到服务器端的“连接建立请求确认报文”后发送ACK=1的“连接建立请求确认报文”,表示客户端认为连接已经建立完成。此时客户端状态从SYN_SEND转换为ESTABLISHED。服务器端收到ACK后,服务器认为连接建立完成,将状态从SYN_RCVD转换为ESTABLISHED。

2. 连接释放阶段(四次挥手)

当客户端想与服务器端断开连接时,连接释放阶段就要开始了。

第一步:客户端进程向服务器发送将控制位FIN=1的“连接释放请求报文”,表示想要断开连接;此时,客户端状态由ESTABLISHED转换为FIN_WAIT_1;

第二步:服务器端向客户端发送FIN=1+ACK=1的“连接释放请求确认报文”,表示同意断开连接;此时,服务器端状态由ESTABLISHED转换为CLOSE-WAIT。客户端状态由FIN_WAIT_1转换为FIN_WAIT_2,表示客户端已经断开连接。

第三步:服务器端向客户端发送FIN=1的“连接释放请求报文”,表示想要断开连接;此时,服务器状态由CLOSE-WAIT转换为LAST_ACK。

第四步:客户端向服务器端发送FIN=1+ACK=1的“连接释放请求确认报文”,表示同意断开连接;此时客户端进入TIME_WAIT状态,等待2MSL的时间。

注:(1)在第二步中,虽然客户端要求断开连接,但是当服务器端的数据没有发送完毕时,服务器端可先将数据发送完成,在回复ACK=1的确认报文。

  (2)客户端在最后进入TIME_WAIT状态,等待2MSL的时间的目的是确认服务器端是否会重新发送FIN=1的请求断开连接信息,确保和服务器端双方都断开连接。

3. 为什么建立连接不是两次握手呢?

如果是两次握手,客户端首先发送SYN请求,服务器端回复ACK确认连接报文,但是报文却丢失,那么客户端收不到回复报文,认为连接请求失败,而在服务器端则认为连接已经建立完成,并为此次连接建立管理和维护,而维护连接是需要资源和成本的。这时,如果大量的客户都发生这样的情况,并且都重新建立连接,那么,服务器端会有大量的闲置连接,并且在管理和维护,一直占用资源,造成服务器的负载太重,效率降低。再者,如果是大量的恶意连接,会对服务器的安全造成威胁,造成”洪水攻击“!

4. 为什么建立连接是三次握手呢?

(1)如果是三次连接,客户端首先发送SYN报文,服务器回复”连接请求确认报文“,客户在收到回复后,准备建立连接,发送”连接建立请求确认报文“但是发送的报文丢失。此时,客户端认为连接已经建立,但服务器认为连接没有建立成功,就不会对这个连接管理和维护。如果发生大量类似情况,只需客户端重新建立连接即可,对服务器的影响不大,并且不会占用服务器资源,保证了服务器的安全。

(2)三次握手是经过大量的实验验证的,它的正确率是非常高的。




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值