JavaScript篇:“三次握手和四次挥手:TCP 连接的‘恋爱仪式’全解析!“

 大家好,我是江城开朗的豌豆,一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术,并深入掌握Vue、React、Uniapp、Flutter等主流框架,能够高效解决各类前端开发问题。在我的技术栈中,除了常见的前端开发技术,我还擅长3D开发,熟练使用Three.js进行3D图形绘制,并在虚拟现实与数字孪生技术上积累了丰富的经验,特别是在虚幻引擎开发方面,有着深入的理解和实践。

        我一直认为技术的不断探索和实践是进步的源泉,近年来,我深入研究大数据算法的应用与发展,尤其在数据可视化和交互体验方面,取得了显著的成果。我也注重与团队的合作,能够有效地推动项目的进展和优化开发流程。现在,我担任全栈工程师,拥有CSDN博客专家认证及阿里云专家博主称号,希望通过分享我的技术心得与经验,帮助更多人提升自己的技术水平,成为更优秀的开发者。

目录

1. TCP 连接:像谈恋爱一样严谨

🌰 举个栗子:我和服务器谈恋爱

2. 三次握手:TCP 的“确认眼神”

流程:

为什么是三次?两次不行吗?

3. 四次挥手:TCP 的“和平分手”

流程:

为什么是四次?三次不行吗?

4. 常见面试题

Q1:为什么 TIME_WAIT 要等 2MSL?

Q2:握手能变成两次吗?挥手能变成三次吗?

5. 总结


大家好,我是前端开发工程师小杨。今天咱们来聊聊 TCP 连接的建立和断开,也就是传说中的三次握手(Three-way Handshake)四次挥手(Four-way Handshake)

你可能觉得这是后端的事情,但前端也得懂点网络知识,尤其是调试接口慢、连接异常时,知道底层原理才能更快定位问题!


1. TCP 连接:像谈恋爱一样严谨

TCP(传输控制协议)是一种可靠的传输协议,就像两个人谈恋爱,得先确认彼此心意(三次握手),分手时也要好好告别(四次挥手)。

🌰 举个栗子:我和服务器谈恋爱

  • 三次握手:我和服务器互相确认,建立稳定连接

  • 四次挥手:我和服务器和平分手,确保数据不丢失


2. 三次握手:TCP 的“确认眼神”

三次握手的目标是确保客户端和服务器都能正常收发数据

流程:

  1. 第一次握手(SYN)

    •  → 服务器:SYN=1, seq=x(“嗨,能听到我吗?”)

    • 进入 SYN_SENT 状态

  2. 第二次握手(SYN+ACK)

    • 服务器 → 我:SYN=1, ACK=1, seq=y, ack=x+1(“听到了!你也能听到我吗?”)

    • 服务器进入 SYN_RCVD 状态

  3. 第三次握手(ACK)

    •  → 服务器:ACK=1, seq=x+1, ack=y+1(“听到了!咱们开始聊天吧!”)

    • 双方进入 ESTABLISHED 状态,连接建立!

为什么是三次?两次不行吗?

  • 两次握手:服务器无法确认我是否能收到它的回复(可能我早就断开了)

  • 三次握手:确保双方都能正常收发数据,避免资源浪费


3. 四次挥手:TCP 的“和平分手”

TCP 连接断开时,需要确保数据全部传输完毕,不能突然“拉黑”。

流程:

  1. 第一次挥手(FIN)

    •  → 服务器:FIN=1, seq=u(“我要走了,拜拜!”)

    • 进入 FIN_WAIT_1 状态

  2. 第二次挥手(ACK)

    • 服务器 → 我:ACK=1, ack=u+1(“好的,等我处理完最后的数据”)

    • 服务器进入 CLOSE_WAIT 状态

    • 进入 FIN_WAIT_2 状态

  3. 第三次挥手(FIN)

    • 服务器 → 我:FIN=1, ACK=1, seq=v, ack=u+1(“我也准备好了,再见!”)

    • 服务器进入 LAST_ACK 状态

  4. 第四次挥手(ACK)

    •  → 服务器:ACK=1, ack=v+1(“好的,正式断开!”)

    • 进入 TIME_WAIT 状态(等待 2MSL 后彻底关闭)

为什么是四次?三次不行吗?

  • 服务器可能还有数据要发送,不能直接断开

  • 四次挥手确保双方都完成数据收发,避免数据丢失


4. 常见面试题

Q1:为什么 TIME_WAIT 要等 2MSL?

  • MSL(Maximum Segment Lifetime) 是数据包在网络中的最大存活时间

  • 等待 2MSL 是为了:

    • 确保最后一个 ACK 到达服务器(如果丢失,服务器会重发 FIN)

    • 让旧连接的数据包彻底消失,避免影响新连接

Q2:握手能变成两次吗?挥手能变成三次吗?

  • 握手不能两次(无法确认客户端能收到服务器的回复)

  • 挥手有时能三次(如果服务器没有数据要发,FIN 和 ACK 可以合并)


5. 总结

  • 三次握手:建立连接,确保双方都能通信

  • 四次挥手:断开连接,确保数据不丢失

  • TIME_WAIT:防止旧连接干扰新连接

🚀 前端也要懂点网络知识! 下次遇到接口慢、连接异常时,想想是不是 TCP 的“恋爱仪式”出了问题~

你有遇到过 TCP 相关的问题吗?欢迎评论区交流! 👇

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江城开朗的豌豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值