Tcp为什么需要三次握手而不是两次四次?

本文解析了TCP三次握手的原理及目的,包括防止已失效的连接请求报文段造成错误连接,确保双通道通信通畅,以及如何通过三次握手确认全双工通信等。

找了一下资料发现还是有点门道的

只要还是来源于知户上:传送门

首先从Tcp通信是全双工通信分析,全双工也就是我可以给你发信息你也可以给我发信息(可以同时发)

三次握手也是确认这个全双工通信的过程

确认客户端可以给服务端发消息 第一次握手的客户端发送的syn包以及第二握手服务端发送的ack

确认服务端可以给客户端发消息 第二次握手服务端发送的syn包以及第三次握手客户端发送的ack

知户上有个很有趣的答案描述了这个过程

我比较偏向于上述原因

还看到两种比较有趣的回答

摘自知户用户:小宫呀

一种是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

另外一种是 如果想确定双通道通畅,必须使用三个包的发送接收,也就是三次握手

“这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.”

另外Tcp的可靠传输更多的是靠重传机制来保证的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值