tcp为什么要三次握手?
为了防止已失效的连接请求报文突然又传送到了服务端,因为产生错误。
具体解释: “已失效的连接请求报文段”产生情况:
client 发出的第一个连接请求报文段并没有丢失,而是在某个网络节点长时间滞留,因此导致延误到连接释放以后的某个时间才到达 service。如果没有三次握手,那么此时server收到此失效的连接请求报文段,就误认为是 client再次发出的一个新的连接请求,于是向 client 发出确认报文段,同意建立连接,而此时 client 并没有发出建立连接的情况,因此并不会理会服务端的响应,而service将会一直等待client发送数据,因此就会导致这条连接线路白白浪费。
如果此时变成两次挥手行不行?
这个时候需要明白全双工与半双工,再进行回答。比如:
第一次握手: a给b打电话说,你可以听到我说话吗?
第二次握手: b收到了a的信息,然后对a说: 我可以听得到你说话啊,你能听得到我说话吗?
第三次握手: a收到了b的信息,然后说可以的,我要给你发信息啦!
在三次握手之后,a和b都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。如果是两次,那将无法确定