您的位置:首页 > 理论基础 > 计算机网络

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

2018-01-14 13:50 405 查看
找了一下资料发现还是有点门道的

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

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

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

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

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

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

我比较偏向于上述原因

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

摘自知户用户:小宫呀

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

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

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

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

另外Tcp的可靠传输更多的是靠重传机制来保证的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: