TCP三次握手能改成两次吗?
原文链接: TCP三次握手能改成两次吗?TCP三次握手三次握手优化
如果碰上这个面试题,可以通过以下三个答案来回答,别说改成两次了,0次都可以哦。
答案1:TCP三次握手能从三次变成两次吗?
这个问题,我们在之前的内容中讨论中,面试碰到此问题,我们回答不可以
。这或许是大部分同学的答案,原因有三个点:
- 避免一接收到SYN包,服务端就分配资源,建立连接而造成资源浪费
- 防止旧的重复连接初始化造成混乱
- 同步双方的初始序列号
详细解析参见:
字节面试真题--TCP建立连接为什么要三次握手?为什么不是两次或者四次?
今天小编给你们一个不一样回答,拒绝千篇一律
答案2:TCP握手两次也是可以的?
如上图,在客户端发送SYN包之后,服务端发送SYN+ACK后进入SYN_RECV状态之后,客户端实际上在RFC 793中规定了在最后一个ACK是可以携带数据的,或者说可以在传输数据的保重携带控制信息。
最后一次握手的ACK数据包,是可以同数据一同发送给服务端,服务端在SYN_RECV状态时,只要接收到带有ACK标记的数据,就会进入ESTABLISHED状态。
详细信息可以参见:TCP三次握手最后一个ACK数据包丢失会发生什么?
因为在第三次握手包中,就已经发送了数据了,相当于最后一个单纯的ACK握手包就不再需要了。也就相当于只有两次握手。
答案3:TCP握手优化之TFO,SYN包直接带数据,就跟0次一样
总结
TCP的三次握手是否可以改成两次,在面试过程中,按照答案1回答也算是标准答案,但是每个同学都这样回答,是不是就没有特点了,那可以尝试一下按照答案2,答案3,再补充回答,或许能给面试官留下不一样的印象。
#25届找工作求助阵地##运维工程师##找工作中的意难平#