tcp三次握手的通俗理解 三次握手

TCP需要经过三次握手才能建立连接 , 而像SCTP一样 , 需要四次握手才能建立连接 。我们不禁要问 , TCP为什么不是两次握手或者四次握手来建立连接呢?
TCP是一种可靠的传输控制协议 。它必须做两件事 , 一是保证数据的可靠传输 , 二是尽可能提高传输效率 。三次握手就是为了做这两件事才应运而生的 。
可靠性的实现假设甲乙双方都想建立TCP连接 。
首先 , 操作系统随机选择一个32位的序列号 , 假设A的初始序列号为1000 , 然后对要发送的数据进行编号 , 1001、1002、1003 。...
a会告诉B初始序列号ISN , 让B知道什么样的序列号数据是合法的 , 什么样的序列号数据是非法的 。例如 , 接收序列号999是非法的 。
b也会对a的每个编号数据进行确认 , 如果收到编号2001和1001-2000 , 说明1000字节已经安全到达 。
同样 , B也会做同样的事情 。如果B的初始序列号ISN是2000 , B也将开始编号2001、2002和2003 。...
然后B告诉A初始序列号ISN , A也可以确认B发送了多少字节 , 这些数据是否合法 。
通过以上步骤 , 不难发现TCP握手的本质是双方数据来源的序列号 , 从而实现可靠性 。
传输效率要实现可靠的数据传输 , 为什么只需要三次握手?握两次手怎么样?
两次握手:
【tcp三次握手的通俗理解 三次握手】1.a发送同步信号syn+a的初始序列号
2.B发送同步信号的初始序列号SYN+B+B的ACK序列号
两次握手会引起问题 。b无法知道A是否收到了自己的同步信号 。一旦这个同步信号丢失 , A和B就无法对B的初始序列号达成一致 。
显然 , 握手两次是不可取的 。
四次握手呢?
1.a发送同步信号syn+a的初始序列号
2.b确认收到A的同步信号 , 将A的ISN记录到本地 , 并命名b的ACK序列号 。
3.b发送同步信号SYN+B的初始序列号
4.A确认收到B的同步信号 , 将B的ISN记录到本地 , 并命名A的ACK序列号 。
显然不需要四个步骤 , 2和3可以合并 , 提高连接的速度和效率 。
TCP需要考虑可靠性和传输效率 。知道了这些 , 我们就能理解为什么只能是三次握手 , 而不是两次四次 。

    推荐阅读