TCP三次握手

打印 上一主题 下一主题

主题 968|帖子 968|积分 2906

 TCP三次握手
  
  1. 两个核心概念
  2. ​SYN包:SYN=1,表示请求建立连接​(相当于说“我要和你通话!”)。
  3. ​ACK包:ACK=1,表示确认收到数据​(相当于说“我收到了!”)。
  4. 三次握手
  5. 第一次握手:客户端发一个 SYN=1 的包给服务端
  6. 目的:“我要和你建立连接!”
  7. 第二次握手:​服务端发送SYN+ACK包给客户端
  8. 目的:
  9. ACK=1:“我收到你的请求了!”
  10. SYN=1:“我也要和你建立连接!”
  11. 第三次握手:客户端发一个 ACK=1 的包给服务端
  12. ​目的:“我收到你的回应了,连接正式建立!”
  13. 一句话总结流程
  14. 客户端:SYN(我要连接) → ​服务端:ACK+SYN(同意+我也要连接) → ​客户端:ACK(同意) → ​开始传数据!​
复制代码
为什么TCP要三次握手,两次却不可以
   

  • 两次握手时,服务端发送完SYN-ACK后,无法确认客户端是否真的收到了。如果这个包丢失,服务端会以为连接已创建(开始浪费资源),但客户端现实没收到,导致服务端空等。三次握手的最后一次ACK就是让服务端明白知道:“客户端已准备好,双方可以可靠通信了。
  1. 核心问题​(两次握手的致命缺陷):
  2. ​无法验证客户端的接收能力
  3. 服务端发送 SYN+ACK 后,若客户端未返回 ACK,服务端无法确定客户端是否能正常接收数据,可能建立“半开连接”(服务端以为连接成功,客户端实际未建立)。
  4. ​无法抵抗网络丢包和延迟干扰
  5. 若服务端的 SYN+ACK 丢失,客户端不会发送数据,但服务端会一直等待,导致资源被长期占用。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表