合集 – 浏览器(2)
1.从输入URL到页面展示到底发生了什么?–02 握手的故事:三次握手详解07-212.为什么必须使用三次握手?07-21
收起
在这个数字化时代,网络通讯就像人类之间的交流,需要一种方式来确保彼此能够顺利对话。在计算机网络中,TCP三次握手就是这样一种确保双方通信顺畅的机制。今天,我们将通过一个生动有趣的故事来讲解这个重要的过程。
引子:约会前的准备
想象一下,你要和朋友约个饭,但由于时间久了彼此不太确定对方的电话号码是否还在用。因此,你们需要确认彼此能联系上。这就像TCP三次握手的前奏。
第一握:SYN(Synchronize)
某天,小明想约小红吃饭。小明拿起电话,拨通了小红的号码,这是第一次尝试联系。对于TCP协议来说,这个过程就是客户端发送一个SYN包。
sequenceDiagram participant Client as 小明 (Client) participant Server as 小红 (Server) Client->>Server: 发送SYN包 (小明拨号)
在技术层面上,小明发送的这个SYN包包含了一个序列号,用来标记接下来的通信序列。
第二握:SYN-ACK(Synchronize-Acknowledge)
小红接到了电话,她想确认对方是小明,并且同意和他见面。于是,她给小明回了个电话,这个电话里说:“嘿,小明,是你吗?我这边是小红,可以通话。” 这相当于服务器接收到SYN包后,发送一个SYN-ACK包。
sequenceDiagram Server-->>Client: 发送SYN-ACK包 (小红回拨电话)
在技术上,小红的SYN-ACK包不仅确认了小明的请求,还附带了自己的序列号,表示她也准备好了通信。
第三握:ACK(Acknowledge)
小明接到了小红的回拨电话,现在他确认了对方是小红。于是,他对小红说:“好的,那我们见面吧!” 这就是客户端发送的ACK包,确认了整个通信过程。
sequenceDiagram Client->>Server: 发送ACK包 (小明确认)
在技术上,这个ACK包告诉小红,小明已经收到了她的回应,一切就绪,正式通信可以开始了。
握手后的正式通信
现在,小明和小红已经确认了彼此的身份,并且都准备好进行对话。他们可以畅所欲言,分享彼此的生活趣事,畅聊一顿愉快的午餐。
sequenceDiagram Client->>Server: 正式通信开始 (小明和小红聊天) Server-->>Client: 正式通信开始 (小明和小红聊天)
三次握手的技术细节
回到技术角度,TCP三次握手确保了数据传输的可靠性和顺序性:
第一次握手(SYN):客户端向服务器发送一个SYN包,请求建立连接,并带有一个初始序列号。
第二次握手(SYN-ACK):服务器接收到SYN包后,回应一个SYN-ACK包,确认收到请求并发送自己的初始序列号。
第三次握手(ACK):客户端接收到SYN-ACK包后,发送一个ACK包,确认连接建立。
为什么需要三次握手?
三次握手的主要目的是防止重复的连接初始化。如果没有三次握手,那么可能会出现服务器误以为客户端要重新建立连接的情况,从而导致资源浪费和错误的数据传输。
握手资源不要浪费