#每天一个知识点# TCP 建立为什么需要三次握手,为什么不是两次?
TCP协议使用三次握手来建立一个可靠的、双向通信的连接。具体来说,三次握手的过程如下:
客户端向服务器发送一个SYN(同步)报文,表示客户端请求建立连接,并选择一个随机的初始序列号(ISN)。
服务器接收到SYN报文后,向客户端发送一个SYN-ACK(同步-确认)报文,表示服务器已收到请求,并确认客户端的ISN。同时,服务器也选择了一个随机的ISN。
客户端接收到SYN-ACK报文后,向服务器发送一个ACK(确认)报文,表示客户端已经收到了服务器的确认,并向服务器发送了一个确认序列号(ACK number),该序列号是服务器ISN加1。服务器接收到ACK报文后,连接就建立成功了。
这个三次握手的过程,是为了保证建立的连接是可靠的、双向的,确保数据能够在客户端和服务器之间可靠地传递。具体来说,三次握手的目的是:

确保双方都能够接收到对方的数据。在第一次握手中,客户端向服务器发送了一个SYN报文,但此时客户端并不知道服务器是否能够接收到该报文。在第二次握手中,服务器向客户端发送了一个SYN-ACK报文,确认了客户端的请求,并告诉客户端自己能够接收到数据。在第三次握手中,客户端向服务器发送了一个ACK报文,确认了服务器的能力。这样就确保了双方都能够接收到对方的数据。
防止因为网络延迟而导致连接建立失败。在第一次握手中,客户端向服务器发送了一个SYN报文,但该报文可能因为网络延迟而没有到达服务器。如果没有第二次握手,服务器就认为客户端并没有请求建立连接,这样就会导致连接建立失败。通过第二次握手,服务器向客户端发送了一个SYN-ACK报文,告诉客户端已经接收到了请求,如果客户端没有收到该报文,就会重新发送SYN报文。这样就能够防止因为网络延迟而导致连接建立失败。
防止因为重复的请求而导致连接建立失败。如果没有第三次握手,客户端可能会误认为连接已经建立成功,向服务器发送数据。但是,如果第二次握手的SYN-ACK报文在传输过程中遇到了网络延迟,可能会导致服务器重发SYN-ACK报文,此时客户端就可能会误认为这是一个新的请求,重新发送SYN报文。通过第三次握手,客户端向服务器发送了一个ACK报文,告诉服务器已经确认了连接,这样就能够防止因为重复的请求而导致连接建立失败。
展开
评论