TCP协议设计的目的
TCP是一种传输控制协议,目的是使数据的传输变得可靠。
那么要如何设计一个能可靠传输数据的协议?
TCP使用的方法是简单地“尝试重新发送”,直到信息最终被接收。这种方法,称为自动重复请求(Automatic Repeat Request,ARQ)。
ARQ构成了许多通信协议的基础,包括TCP在内。
一个直接处理分组丢失的方法是重发分组 直到它被正确接收。
这需要一种方法来判断2点:
1.接收方是否已收到分组
2.接收方接收到的分组是否与之前发送方发送的一样。
接收方 给 发送方 发送信号 ,确定自己已经收到一个分组,这种方法称为确认(acknowledgment),或ACK。
最基本的形式是,发送方 发送 一个分组,然后等待一个ACK。当接收方接收到这个分组时,它发送对应的ACK。
也就是说发送方是使用ACK来判断接收方是否接收正确接收到分组。
目前为止的信息是ARQ+ACK,即重传和确认两种方法,来保证分组被接收方正确接收。
但是使用这种重发机制的情况下,会导致接收方可能接收到重复的分组,因此TCP中引入了序列号sequence number来处理这个问题。如果序列号重复了,即接收方已经见过了某一序列号,那么接收方就丢弃分组。
三次握手的目的不仅在于让通信双方了解一个连接正在建立,还在于利用数据包的选项来承载特殊的信息,交换初始序列号(Initial Sequence Number, ISN)。
这句话非常关键,3次握手的目的是交换初始序列号。

当A向B发送包含初始序列号x的SYN报文段后,B回应一个ack值为x+1的报文段。这2步完成了A向B发送初始序列号x的功能。

然后接下来需要B向A发送初始序列号y。

③和④完成了B向A发送初始序列号y的功能。这四步,完成了A和B交换初始序列号x和y的功能。
②和③合起来一起发送,就变成了
SYN,ACK,seq = y,ack = x +1
当然这里不考虑握手过程中丢包的情况,那个更复杂,还要重传。
因此关于为什么TCP的连接是3次握手,我觉得这个回答总结的很好,表达也十分清晰。当然前提是对ACK,seq等概念有一定的了解。
出处:作者:苏小乐
链接:https://www.zhihu.com/question/24853633/answer/632071336
TCP 的可靠连接是靠 seq( sequence numbers 序列号)来达成的。
所以说,建立可靠连接,需要对客户端和服务器的起始序列号达成共识。
TCP建立链接的过程如下:
image.png
为什么不能两次握手?| 两次握手演绎
第一步:客户端发送一个起始序列号seq = x的 报文段给服务器。
第二步:服务器端返回向客户端发送确认号 ack = x+1,表示对客户端的起始序列号x 表示确认,并告诉客户端,他的起始序列号是 seq = y.所以,为什么不能两次握手?因为这种情况下,只有服务器对客户端的起始序列号做了确认,但客户端却没有对服务器的起始序列号做确认,不能保证传输的可靠性。
为什么不是四次握手?| 四次握手演绎
第一步:客户端A 发送同步信号SYN + A的初始序列号 seq = x
第二步:服务器端B 确认收到A的同步信号,并记录A的初试序列号到本地,并向A发送确认信息 ack =x+1。第三步:B发送同步信号SYN + B的初始序列号 seq 给客户端A。
第四步:A确认收到B的同步信号,并记录 B'的初试序列号到本地,并向B发送确认信息 ack = y + 1.很显然,第二,三步可以合并,只需要三次握手,可以提高连接的速度与效率。
TCP链接之所以可靠,是因为其链接是面向字节的。在通信的过程中,协议会给每个字节一个序分配一个序号。三步握手的过程,主要是为了互相确认双方的起始序列号。如果只进行两次握手,客户端发送链接请求及起始序列号seq = x, 收到 服务器端的起始序列号seq = y及对客户端序列号seq= x 的确认。此时,双方就 客户端的起始序列号达成了共识。此时,并没有对服务器的起始序列号达成共识,所以就需要进行第三次握手。对B的起始序列号达成共识,不能保证通信的可靠。 如果进行四次握手,在四次握手的过程中,可以把第二、三步合并,这样可以提高连接的速度与效率。
其实到这里我又有了一个新的问题,TCP是如何通过管理序列号来实现接收分组的呢?先放一放这个问题,下一步来看为什么TCP断开是4次挥手。
参考链接:
《TCP IP详解卷1》
TCP 为什么是三次握手,而不是两次或四次? - 山尽的回答 - 知乎
TCP 为什么是三次握手,而不是两次或四次? - 苏小乐的回答 - 知乎
分布式系统里的时序
互联网一致性架构设计 -- 消息时序一致性
第八章:分布式系统的麻烦
什么是TCP的混合型自时钟
TCP协议疑难杂症全景解析
rfc793
“三次握手,四次挥手”你真的懂吗?
TCP的快速重传机制
30张图解: TCP 重传、滑动窗口、流量控制、拥塞控制
网友评论