自我学习36:TCP三次握手和四次挥手

TCP三次握手

  • 第一次握手🤝:
    建立连接时,客户端发送syn(同步序列编号)包到服务器,并进入SYN_SENT状态,等待服务器确认。
  • 第二次握手🤝:
    服务器收到syn包,必须确认客户端的SYN,同时自己也发送一个SYN包,即SYN+ACK,服务器进入SYN_RECV状态。
  • 第三次握手🤝:
    客户端收到服务器的SYN+ACK包,向服务端发送确认包ACK,发送完毕后客户端和服务器进入TCP连接成功状态,完成握手。

TCP四次挥手

  • 第一次挥手👋:
    客户端发送一个FIN段,并包含一个接收者看到当前自己的序列号K,同时还包含一个ACK表示确认对方最近一次发过来的数据。
  • 第二次挥手👋:
    服务端将K值加1作为ACK序号值,表明收到了上一个包,上层的应用程序会被告知另一端发起了关闭操作。
  • 第三次挥手👋:
    服务端发起自己的FIN段,ACK=K+1
  • 第四次挥手👋:
    客户端确认

常见面试题

  • 为什么连接的时候是三次握手,关闭的时候是四次挥手?
    答:因为服务端收到客户端SYN连接请求报文后,可直接发送SYN+ACK报文。ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文,并不会立即关闭,只能先回复一个ACK报文给客户端,只有等服务端所有的报文都发送完了,服务端才发送FIN报文,因此不能一起发送。
    **
  • 为什么不能用两次握手进行连接?
    答:三次握手改成两次握手,可能会发生死锁的情况,例如:服务端认为连接已经成功建立,客户端认为连接还未建立成功,将忽略客户端发来的任何数据,只等待连接确认应答分租,而服务端发出的分组超时后,重复发送相同的分组,就形成了死锁。
    **
  • 如果已经建立了连接,但是客户端突然出现故障了怎么办?
    答:若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值