TCP 为什么三次握手而不是两次握手(面试浅显口述版本)

按照我的理解说一下TCP 为什么三次握手而不是两次握手。
一步一步来。

1. TCP是可靠的

TCP是可靠的传输,握手指的是TCP建立链接,怎么才可以可靠的建立链接呢?

2. 最简单的建立一个可靠发送通道

A-------->B
A要发送数据给B,如果没有建立链接就直接发送,大概率石沉大海。所以至少要建立链接。
A先发一个建立链接的请求,B收到后告诉A:“我收到了”。所以需要A发送一次 B发送一次来确保A发送给B是通的。
(这样真的可靠吗?也有可能B告诉A“我收到了”后,这个通道不通了,接下来发送数据给B,B收不到,但是这种情况极少,TCP 有其他机制来得知这种情况)

3.AB互相建立链接需要发送多少个包

A-------->B
B-------->A
从2得知,A到B建立链接需要A给B发一次 B给A发一次两个包,那么AB互相建立链接需要4次,但是,B告诉A它收到了和B请求跟A建立链接这两个包可以合成一个,所以需要3次即可

4.AB互相建立链接2个包可以吗?

从2和3知道,两个包,两次握手只能确保单通道是可靠的,TCP是双工的,需要互相确认都可以发包和收包,所以不能两次握手。

5.正式的过程

  1. A向B请求建立链接,SYN标志位标记,seq填充为x。
  2. B收到A的建立请求,然后发送SYN标志位标记,ACK标记,ack=x+1,seq=y 给A
  3. A收到B的收到包和建立请求包,然后发送ACK标记表示接收到SYN包,ack=y+1,seq=x+1

个人简介:高级开发工程师,兴趣和领域(Unity、Unreal、cocos creator、安卓终端开发、ios终端开发、音视频开发、图形学),欢迎加W:wlxklyh 探讨问题。(欢迎star:https://github.com/wlxklyh/SoftRenderer)

posted @ 2020-12-15 20:33  wlxklyh  阅读(1496)  评论(0编辑  收藏  举报