什么是三次握手和四次挥手(清晰易懂)

  很多小伙伴在刚开始学习网络课程的时候不明白TCP是如何进行可靠的传输的(也包括我哈哈),现在我就来把它讲明白,这也是一道经常会问到的面试题,相信你们看了之后会有更清晰的认识。

  下文几个英文缩写的意思先解答一下:SYN(同步)、ACK(确认)、FIN(finish完成)。

   三次握手:

      这是建立客户端和服务端连接的过程:当客户端向服务端发起连接时,会先发一包连接请求数据过去询问一下,能否与你建立连接呀,这个数据包我们称为SYN包,如果服务端同意连接,则回复一个SYN+ACK包,客户端收到之后回复一个ACK包,连接建立。因为这个过程发了三包数据,我们称之为三次握手。

面试一:为什么是三次握手而不是两次、四次呢?

   这是为了防止已经失效的请求报文,突然有传到了服务器引起错误。

   假设采用两次握手建立连接,客户端发送一个SYN包来请求连接,因为某些未知的原因,并没有到达服务器,在中某个网络节点产生了滞留,为了建立连接客户端会重发一个SYN包,这次的数据包正常送达,服务端回复SYN+ACK建立了连接,但第一次数据阻塞的网络节点突然恢复,第一个SYN包又送到服务器,这是服务端会误认为是客户端又发起了一个新的连接,从而在两次握手之后,进入等待数据状态;服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致。如果在三次握手对的情况下,服务端收不到最后的ACK包,自然不会认为连接建立成功,所以三次握手才能保证网络信道可靠。三次已经够了,就不需要浪费资源,进行第四次握手了。

面试二:为什么需要三次握手?

  1.因为三次握手才能保证双方具有接收和发送的能力。

  2.避免历史连接。

  3.同步双方序列号。

  4.避免资源浪费。

四次挥手:

   这是发起关闭连接的请求,客户端和服务端都能主动发起关闭请求,假设这里是客户端主动发起关闭请求,这个时候客户端会在报文中开启FIN和ACK两个控制位,FIN就是finish结束的意思,这里也就是要确认要结束会话,此时服务器会先发送ACK来进行确认,此时客户端并没有正式关闭通道,因为服务器那边可能还需要发送其他数据,等服务器端发送完数据之后会再发送一个FIN+ACK来进行最后的确认,最后客户端得到最终的结束确认后会发送一个ACK来进行确认。如果客户端发送最后一个ACK包之后,等待一段时间,如果在这段时间服务端没有接收到最后的ACK包会重发FIN包,客户端也会重新响应这个FIN包,并重发ACK包并刷新超时等待时间。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值