TCP 协议是我们几乎每天都会接触到的网络协议,绝大多数网络连接的建立都是基于 TCP 协议的,学过计算机网络或者对 TCP 协议稍有了解的人都知道 —— 使用 TCP 协议建立连接需要经过三次握手(three-way handshake)。
如果让我们简单说说 TCP 建立连接的过程,相信很多准备过面试的人都会非常了解,但是一旦想要深究"为什么 TCP 建立连接需要三次握手?",作者相信大多数人都没有办法回答这个问题或者会给出错误的答案,这边文章就会讨论究竟为什么我们需要三次握手才能建立 TCP 连接?
概述
首先我们都知道握手是为了建立连接,那么为什么必须得三次握手,两次握手行不行?
Client ------SYN-----> Server
Client <---ACK/SYN---- Server
Client ------ACK-----> Server
为什么不只是这个?
Client ------SYN-----> Server
Client <-----ACK------ Server
所以我们需要将握手分解为它真正在做什么。
TCP 是一种双向通信协议,这意味着任何一端都应该能够可靠地发送数据。双方都需要建立一个序列号,双方都需要确认对方的序列号。
那么client要与server建立TCP连接,需要通过握手确认这四件事情
1.server需要确认它可以从client接收数据包;
2.client需要确认它可以从server接收数据包;
3.client需要确认一件事:server可以从client接收数据包;
4.server需要确认一件事