为什么TCP需要三次握手才建立连接?

名词解释:
SYN: synchronize 同步
ACK: acknowledge 确认
ISN: initial sequence number 初始序号(有顺序的号码)

在TCP中,连接的双方用一个序号来追踪自己发送的信息,序号动态变化的大小由发送信息的字节长短来决定,接收方根据发送方的序号来确认所接收到的内容。序号的起始不是数字0,它由一个随机的数字初始化。TCP是一个双向通信的协议,连接的双方都可以主动发送信息,所以两边都需要从一个随机数字生成一个序号,同时两边都要注意核对确认对方的序号。
下面用小明和小红的例子来表示下这个过程

小明 ---> 小红    同步生成的序号X SYNchronize with my Initial Sequence Number of X
小明 <--- 小红    告诉对方接收到序号,并且开始准备接收序号+1开始的信息 I received your syn, I ACKnowledge that I am ready for [X+1]
小明 <--- 小红   同步生成序号Y  SYNchronize with my Initial Sequence Number of Y
小明 ---> 小红   告诉对方接收到序号,并且开始准备接收序号+1开始的信息 I received your syn, I ACKnowledge that I am ready for [Y+1]

上面是TCP对话初始化过程中做的事情,在实际应用当中,第二步和第三步是同时发生,并把数据生成在同一个包内。在每一个TCP头信息里,用二进制的0和1来表示同步和确认动作的标记,所以在同一个包里,可以同时表示和存储同步和确认信息。上面的步骤就可以简化为

小红 <--- 小明         SYN 同步序号
小红 ---> 小明     SYN ACK  确认对方,同步自己的序号
小红 <--- 小明     ACK    确认对方

所以回到标题的问题,为什么TCP需要三次握手才建立连接?简短的回答是两次握手只会让一方初始化序号,让对方确认,这样只能有一方来发送信息。
但TCP协议是一个双向通信协议,每一方都可以发送和接收数据,每一方都需要生成发送序号和确认接收对方的序号。所以两次握手只能建立单向通信,双向通信需要四次握手,因为第二步和第三步可以在一次握手中完成,所以TCP连接实际需要三次握手实现双向沟通,三次握手过程中需要的数据包在TCP初始化连接时生成。

参考链接:https://networkengineering.stackexchange.com/questions/24068/why-do-we-need-a-3-way-handshake-why-not-just-2-way

完。

你可能感兴趣的:(为什么TCP需要三次握手才建立连接?)