TCP三次握手真的如教程里面那么简单吗?
上两周在心理医生的建议下调理了下生活和工作,耽误了,把拖更的补上,抱歉。
本片文章篇幅有点短,但是也丝毫不会影响它成为一篇高质量的文章。
引子:
记得最长听到的一个面试一问一答是这样的;
问:为什么tcp不用两次握手?
答:防止已失效的连接请求又传送到服务器端,因而产生错误
问:为什么不用四次握手?
答:因为三次就已经能够保证可靠性了。
如果我问你,tcp三次握手以后tcp连接就一定建立了吗?
按照上面这些人提供的思路,答案必然是一定是。
其实上面这样的回答是非常片面的,而且很大程度上是不正确的,不幸的是很多所谓技术牛人出的面试视频都是用这样的例子,而且市面上几乎没有任何人提出质疑。再工作时,利用闲余时间在公司内网中搜了一下相关的资料,才找到了佐证我观点的东西。
TCP三次握手的过程:
我们知道TCP通过三次握手建立通信。过程是这样的:
请求端发送第一个syn报文头给服务端;
服务端接收后,返回一个ack报文头给请求端;
请求端接收到ack报文头后再发送一个ack报文给服务端,一小段时延后请求段默认TCP连接已建立。
服务端接收到最后一个ack后立即进入已连接的状态,如果没有收到就不认为建立了TCP连接。
提问:
那么问题日来啦!如果最后一个ack报文头从请求端出发,在去往服务端