三握四挥

三次握手四次挥手

1.三次握手的状态

  • LISTEN:表示服务器的某个socket进入监听状态了,可以接受连接
  • SYN_SENT:表示客户端已经发送过了SYN报文
  • SYN_RCVD:表示接受到了SYN报文
  • ESTABLISHED:表示已经建立连接

2.四次握手的状态

  • FIN_WAIT_1:当socket在ESTSABLISHED状态时,想要主动的关闭连接,向对方发送了FIN报文,socket进入FIN_WAIT_1状态
  • FIN_WAIT_2:收到对方的ACK应答后进入FIN_WAIT_2状态,FIN_WAIT_2状态下的socket其实是半连接状态,一方要求close连接,另一方要检查自己的数据是否已经传送完毕。
  • TIME_WAIT:表示对方收到了FIN报文,并发出了ACK报文,等2ms后回到CLOSED状态。
  • CLOSING:表示双方同时关闭连接,双方几乎同时调用close函数,同时发送FIN报文,CLOSING状态也就是在你发出FIN后想要收到对方的ACK结果收到的是对方发送的FIN报文。
  • CLOSE_WAIT:表示等待关闭,当收到对方的FIN报文后,给对方返回ACK,检查自己的数据是否传送完毕。
  • LASK_ACK:被关闭的一方发送完FIN后进入 LASK_ACK收到,等收到ACK后进入CLOSED状态
  • CLOSED:表示连接中断

3.三握四挥的过程:

三次握手(建立连接)

  • 客户端发送SYN请求,进入SYN_SEND状态
  • 服务端收到SYN请求,并返回一个ACK应答,并发送一个SYN其请求,服务器进入SYN_RECV状态
    ⚠️⚠️⚠️
    第二个SYN的作用:服务端检查客户端是否有效。
  • 客户端收到服务端的SYN请求和ACK应答,发送ACK应答,客户端进入ESTABLISH状态,服务端收到应答后进入ESTABLISH
  • 如果没有收到应答,数据包都会根据TCP的重传机制进行重传

四次挥手:(断开连接)

  • 客户端发送FIN包,请求断开连接,客户端进入FIN_WAIT1状态
  • 服务端收到FIN包后返回应答,进入CLOSE_WAIT状态
  • 客户端收到FIN的应答后进入FIN_WAIT2状态
  • 服务端发送FIN请求包,进入LAST_ACK状态
  • 客户端收到FIN请求包后,发送应答进入TIME_WAIT状态
  • 服务器收到ACK应答后,进入close状态
    ⚠️⚠️⚠️
    中断连接可以是客户端也可以是服务端
    在这里插入图片描述

4.为什么需要三次握手?

防止失效的连接请求报文段突然传送到服务端,第一次握手的时候发送的SYN报文因为某些原因在网络节点滞留了,这时候就成了一个早已失效的报文段,因为客户端如果没有收到应答,数据包根据TCP的重传机制进行重传,当服务端接收到这个失效的SYN报文段是以为要重新建立连接,于是就同意建立连接,新的连接就被建立了,但是这个连接是占着茅坑不拉屎,服务端一直在等客户端发送数据,客户端又没有数据传送,资源就白白浪费了。

5.为什么需要四次挥手

确保数据能够完成传输
TCP是全双工模式,当收到对方FIN报文后,只能说对方数据传输完了,这时候并不会关闭socket,“别急,你的请求我收到了,我先看看我的数据传输完了没”,等检查完发送完后,给对方一个FIN报文和ACK,等到对方的ACK应答后就可关闭连接了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值