三次握手的过程?为什么是三次?

参考视频:【面试官居然把TCP三次握手问得这么详细,我直接被问懵币了😂】https://www.bilibili.com/video/BV1iN4y1L7wF?vd_source=77bab8f46de2b84d605769e73f8f90c4

TCP(传输控制协议)的三次握⼿是建⽴⽹络连接的过程,确保通信双⽅能够正确地进⾏数据传输。

1. 第⼀次握⼿(SYN):

客户端(Client)向服务器(Server)发送⼀个带有 SYN(同步)标志位的包,进入SYN_Send状态,表示客户端希望建⽴连接。该包同时指定客户端的初始序列号(Client Sequence Number)。

2. 第⼆次握⼿(SYN + ACK):

服务器收到客户端的 SYN 包后,会回复⼀个带有 SYN 和 ACK(确认)标志位的包,表示服务器接受了客户端的请求,进入SYN_REVD状态,并希望建⽴连接。服务器也会指定⾃⼰的初始序列号,以及对客户端序列号的确认。

3. 第三次握⼿(ACK):

客户端收到服务器的 SYN+ACK 包后,会发送⼀个带有 ACK 标志位的包作为确认回复。这个包的序列号会加⼀,表示客户端已经准备好与服务器进⾏数据传输。

此时,TCP 连接已经建⽴起来,通信双⽅可以开始进⾏数据传输。

两次握手可以吗?

1.确认双方的接发能力

TCP建立连接之前,需要确认客户端和服务器双方收包和发包的能力,首先一次握手,客户端发包服务端收到了,那么服务器就可以判断出客户端的发包能力和服务端的收包能力是正常的,然后第二次握手,服务端发包客户端收到了,那么客户端就能判断出双方的接收发送能力是正常的,但此时服务器还是不能确认服务端的接受能力是否正常。那么第三次握手,服务端收包,这时服务器端就能判断出两端的接收发送能力都是正常的。所以只有三次握手才能确认双方的接发能力都是正常的。

2.序列号可靠同步

如果是两次握手,服务端无法确认客户端是否已经接收到了自己发送的初始序列号,如果第二次握手报文丢失,那么客户端就无法知道服务端的初始序列号,那TCP的可靠性就无从谈起了

3.阻止重复历史连接的初始化(首要原因)

客户端由于某种原因发送了两个不同序号的syn包,网络环境是复杂的,那么旧的数据包有可能先到达服务器,如果是两次握手,服务器收到旧的syn包就会立即建立连接,那么就会造成网络的异常。如果是三次握手,服务器需要回复syn加ack包,客户端通过对比应答序号,如果发现是旧的报文,就会给服务器发送rst报文,直到正常的syn到达服务器后才正常建立连接,所以三次握手才有足够的上下文信息来判断当前连接是否为历史连接

4.安全问题

TCP建立连接时,内核会为连接分配一系列内存资源,如果采用两次握手就建立连接,那么就会放大DDOS攻击。

TCP作为一种可靠的传输控制协议,其核心思想是既要保证数据可靠传输,又要提高传输的效率,而三次握手恰好可以满足以上两方面的需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值