面试题:讲一下三次握手的过程?
我的回答:
1.客户端发送报文段到服务器,主动建立连接。这个报文段中SYN标志位表示:这个报文段是用于连接的,此时SYN标志位设置为1。其中初始序列号字段包含了客户端的初始序列号。
2.服务器收到客户端的报文段之后,发送SYN-ACK报文段,这个报文段中主要包含两个信息:①ACK表示对客户端SYN报文段收到的确认②SYN表示将自己的初始序列号也发给客户端。此时SYN标识设置为1,ACK标识设置为1
3.客户端收到服务器的SYN-ACK之后,回复ACK进行确认。此时SYN置为0,ACK置为1。
这样三次握手之后,客户端和服务器就建立了连接!
为什么不是四次握手呢?
我的回答:
因为三次握手就可以保证客户端和服务器之间的可靠传输了,四次握手的话,会更加浪费资源,效率比较低。
为什么不是两次握手呢?
我的回答:
因为两次握手有很多弊端:
1.无法保证客户端和服务器都有传输数据和接收数据的能力。因为客户端没有发送ACK确认。
2.可能导致重复连接的问题。两次握手的话,如果之前有客户端发送的SYN在通信链路上延迟发送了,等到这个SYN到达服务器端的时候,可能会建立了重复连接。可能会造成资源浪费和一些安全问题。
3.可能导致假死现象。客户端发送了一个SYN,但是他在通信中延迟在链路上了,等到这个SYN可以到达服务器端了,但是客户端已经放弃这次连接了。两次握手的话,这样可能导致建立不需要的连接。
两次握手不可靠,而且有很多问题,所以得使用三次进行握手。