经典面试题 为什么TCP连接需要三次握手,两次不可以吗?四次呢?
TCP连接 三次握手一、为什么需要三次握手?
主要是为了防止已失效的连接请求报文段在某些特殊请款下传送到了服务端,占用服务器资源,却一直不进行有益操作。
二、三次握手的具体逻辑
1.假设逻辑
假设主机A为客户端,主机B为服务器端
现假定出现一种异常情况,即A发出的一个已失效的报文段,但是B无法知道是否该连接请求报文段已失效,可能是网络异常或者服务器宕机等等各种问题,B就是没收到。
可以B现在收到了这个失效的连接请求报文段后,却无法判断这个是否是失效请求,就误认为是A再次发出一次新的连接请求。于是就直接向A发出确认报文段,表示同意建立连接。
此时若不采用三次握手进行二次确认,连接在B发出确认时已经建立,那么此时这个连接便是无效连接,没有任何客户端依靠此连接进行通信,偷偷占用服务器资源。
我们假设A和B是通信的双方。假设握手实际上是朋友之间进行短信聊天,发一次信息就是进行一次握手。
- 第一次握手: A给B发短信说:“B,你现在有空吗?”
- 第二次握手: B此时收到了A的信息,然后对A说: “ 我有空,你呢?有空吗? ”
- 第三次握手: A此时收到了B的确认信息,然后说:“我也有空,那我跟你说个事。”
在三次握手之后,A和B都能确定这么一件事: 双方的通信可以流畅的进行。 这样,双方就可以开始进行正常的对话了。
三次握手的作用
采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。
2.两次不可以吗?四次呢?
两次:
例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。
四次:
如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。
总结
TCP连接的连接问题,是最突出且适用范围最广的面试题目,无论你的未来期望做什么,这都是你必知必会的常识。
希望这个博客能对你有所益处。我是轻王,我为自己代言。