tcp的三次握手和四次挥手

三次握手

第一次握手:客户端向服务器发一个 SYN报文,并指明客户端的序列号是ISN,此时客户端处于SYN_Send状态

第二次握手:服务器接收到了SYN报文之后,会以自己的SYN报文作为回答,并且也是指定也是指定了自己的序列号ISN,同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD状态

第三次握手:客户端收到SYN报文之后,同样会发送一个ACK报文,当然,也是一样把服务器的ISN+1作为ACK的值,表示已经收到了服务端的SYN的报文,此时客户端处于Established状态

服务端收到ACK报文之后,也处于Established状态,此时双方建立连接

明确几个概念

  • SYN synchronous建立连接
  • ACK acknowledgement 确认
  • ISN Initial sequence number 初始化序列号
  • FIN finish结束

关于三次握手的作用

  • 确认双方的接收,发送能力是否正常
  • 指定自己的指定序列号,为后面可靠的传送做准备
  • 如果是HTTPS的话,三次握手需要进行证书的验证以及加密秘钥的生成

四次挥手

第一次挥手:客户端发送一个FIN报文,报文中会指定一个序列号,此时客户端处于CLOSED_WAIT1状态

第二次挥手:服务端接收到FIN之后,会发送ACK报文,并且把客户端的序列号+1作为ACK报文的序列号的值,表明收到客户端的额报文,此时服务端的状态是CLOSED_WAIT2状态

第三次挥手:如果服务端也想断开连接,和客户端第一次握手一样。发送一个FIN报文,并且指定一个序列号,此时的服务端处于LAST_WAIT状态

第四次挥手:客户端接收到FIN之后,一样发送一个ACK报文作为应答,并且把服务端的序列号+1作为自己的ACk报文的序列号值,此时客户端处于TIME_WAIT状态。需要过一阵子以确保服务端收到了自己的ACK报文之后才会进入CLOSED状态

服务端收到ACK报文之后,就处于关闭连接,处于CLOSED状态

time_wait状态解释:等待一段时间确保服务端接收到了客户端发送的ACK报文,如果说服务端接收失败,服务端会重新发送一个FIN报文,客户端再次接收到ACK报文,就知道之前的报文丢失了。然后再次发送ACK报文,time_wait的等待时间至少是一个报文的来回时间,一般设置为一个计时,如果超过时间仍然没有再次收到FIN报文,则代表对方成功的接收了ACK报文,此时客户端处于CLOSED状态


贴个流程图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值