网络世界的“握手”与“告别”:揭秘TCP的三次握手与四次挥手

在网络世界中,数据的传输就像是一场精心编排的舞蹈,而TCP(Transmission Control Protocol,传输控制协议)则是这场舞蹈的指挥家。它确保数据在网络中的传输既稳定又可靠。那么,在这背后,TCP是如何通过"三次握手"和"四次挥手"来确保数据的稳定传输和优雅告别的呢?让我们用比喻的方式,一起揭开这个秘密。

一、三次握手:建立连接的舞蹈

想象你和一个朋友想要进行一次对话,但你们需要先确保双方都已经做好了准备,才能确保对话的顺利进行。这就是TCP三次握手的作用。

  1. 第一次握手:你向朋友挥挥手,说:"我准备好了,可以开始对话吗?" 在TCP中,这相当于客户端向服务器发送一个SYN(同步)包,并附带一个序列号seq=x,表示客户端的初始序列号。
  2. 第二次握手:朋友看到你挥手后,也向你挥挥手,回应说:"我也准备好了,我的初始序列号是y,请确认。" 在TCP中,这相当于服务器收到SYN包后,返回一个SYN+ACK(同步确认)包,ack=x+1表示对客户端的SYN包进行确认,同时自己也发送一个SYN包,序列号seq=y。
  3. 第三次握手:你收到朋友的回应后,再次挥手确认:"好的,我确认我们都准备好了,可以开始对话了。" 在TCP中,这相当于客户端收到服务器的SYN+ACK包后,向服务器发送一个确认包ACK(ack=y+1),表示对服务器的SYN包进行确认。

通过这三次握手,客户端与服务器之间就建立了一个可靠的连接,可以开始传输数据了。

什么?看完上面讲的还是没懂?没关系,(拿起水杯喝一口润润嗓)那我就再换种方式讲一次,客户端和服务单为什么要三次握手?

  1. **第一次握手:**客户端给服务端发送消息后进入等待状态,这个时候客户端并不知道自己的发送和接收是否正常,需要服务端收到消息以后再告诉客户端我收到你发的消息啦,才能确认自己的发送和接收都是正常的。
  2. **第二次握手:**服务端收到客户端发来的消息后给客户端回复消息,这个时候服务端知道自己的接收是正常的,但是不知道发送是否正常,需要客户端收到消息以后再告诉服务端我收到你发的消息啦,才能确认自己的发送也是正常的。
  3. **第三次握手:**客户端收到服务端发来的消息后,最终确认了自己的发送和接收都是正常的。接着最后一次回复服务端告诉他我们的接收和发送都是正常的,可以开始传输数据了。

别着急,文字不想看,有办法,我再画个图:

二、四次挥手:优雅告别的仪式

当你们的对话结束后,你们需要以一种优雅的方式告别,确保双方都已经知道对话已经结束。这就是TCP四次挥手的作用。

  1. 第一次挥手:你向朋友表示:"我数据说完了,准备关闭连接了。" 在TCP中,这相当于客户端发送一个FIN(结束)包,序列号seq=u,表示客户端已经发送完所有数据。
  2. 第二次挥手:朋友收到你的告别后,回应说:"我收到了你的告别,但我可能还有一些数据要发送给你。" 在TCP中,这相当于服务器收到FIN包后,返回一个ACK包,ack=u+1,表示对客户端的FIN包进行确认。
  3. 第三次挥手:当服务器也发送完所有数据后,它再次向客户端表示:"我也发送完所有数据了,准备关闭连接了。" 在TCP中,这相当于服务器发送一个FIN包,序列号seq=v。
  4. 第四次挥手:你收到服务器的告别后,回应说:"我收到了你的告别,现在我们可以正式告别了。" 在TCP中,这相当于客户端收到FIN包后,返回一个ACK包,ack=v+1,表示对服务器的FIN包进行确认。

通过这四次挥手,客户端与服务器之间就优雅地结束了连接,确保双方都已经知道连接已经关闭。

三次握手懂了,但是四次挥手还是没懂?没关系,(再次拿起水杯喝一口润润嗓)那我就再换种方式讲一次,客户端和服务单为什么要四次挥手?

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

  1. **第一次握手:**客户端在和服务端建立连接后,开始传输数据,但是客户端很快就结束了,然后告诉服务端我已经结束了,你完事没?然后进入等待状态。
  2. **第二次握手:**服务端要比客户端持久,收到客户端的结束信号以后,告诉客户端你再等会,我还没完事呢。
  3. **第三次握手:**过了一会儿,服务端也完事了,然后通知客户端可以关闭了,然后等待客户端响应。
  4. **第四次握手:**客户端收到后,给服务端抛一个媚眼表示收到。服务端收到后立马关闭了连接,而客户端等了一会儿也关闭了连接。

上面这个流程就不用画图表示了,其实TCP的三次握手和四次挥手很好理解,这些动作最终都是为了保证数据在传输过程中的安全性,它们通过精确的序列号和确认机制,确保了数据在传输过程中的稳定性和安全性。这种机制不仅保证了数据传输的可靠性,也为我们在网络世界中提供了更好的通信体验。

相关推荐
愚戏师11 小时前
Python3 Socket 网络编程复习笔记
网络·笔记
降临-max11 小时前
JavaSE---网络编程
java·开发语言·网络·笔记·学习
1560820721911 小时前
基于7VX690T FPGA实现万兆TCP/IP资源和性能测试
网络协议·tcp/ip·fpga开发
赖small强12 小时前
【Linux 网络基础】libwebsockets HTTPS 服务端实现机制详解
linux·网络·https·tls·libwebsockets
大白的编程日记.12 小时前
【计算网络学习笔记】MySql的多版本控制MVCC和Read View
网络·笔记·学习·mysql
踏浪无痕14 小时前
线上偶发 502 排查:用 Netty 成功复现 KeepAlive 时间窗口案例实战(附完整源码)
运维·网络协议
shmexon14 小时前
上海兆越亮相无锡新能源盛会,以硬核通信科技赋能“能碳未来”
网络·人工智能
北京耐用通信14 小时前
告别“牵一发而动全身”:耐达讯自动化Profibus PA分线器为石化流量计网络构筑安全屏障
人工智能·网络协议·安全·自动化·信息与通信
Sinowintop14 小时前
易连EDI-EasyLink无缝集成之消息队列Kafka
分布式·网络协议·kafka·集成·国产化·as2·国产edi
Lay_鑫辰15 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化