今天刚看了TCP建立连接三次握手的过程,然后查了查为什么不能两次握手,是为了防止已失效的报文段又传到了服务器端,这样服务器可能会回复客户端两次,但客户端只回复一次,因此浪费了服务器的资源。
失效有两种情况:一种是请求连接报文丢失,这时是可以两次握手的。第二种是请求报文在某些网络结点滞留太久,在这种情况下,有没有办法让这种超时的失效报文无法到达服务器端,这样服务器端就只会回复一次了,那么两次握手就够了啊。。
纯小白,,大神请原谅我的无知。
今天刚看了TCP建立连接三次握手的过程,然后查了查为什么不能两次握手,是为了防止已失效的报文段又传到了服务器端,这样服务器可能会回复客户端两次,但客户端只回复一次,因此浪费了服务器的资源。
失效有两种情况:一种是请求连接报文丢失,这时是可以两次握手的。第二种是请求报文在某些网络结点滞留太久,在这种情况下,有没有办法让这种超时的失效报文无法到达服务器端,这样服务器端就只会回复一次了,那么两次握手就够了啊。。
纯小白,,大神请原谅我的无知。
三次握手分别的功能
其实第三次握手是用来保护服务端的,逻辑上没有也是可行的。
因为网络通道本身是不稳定的,所以服务端设计的时候,有一个比较重要的错误控制方式——超时。
如果只是两次握手,那两次握手后,就要进入实际的通信模式,这个情况下的超时和业务是有关系的。一般都比较长。
有了三次握手之后,那么服务端其实就可以在等待第三次握手时,使用较短的超时。等实际过了第三次握手,才使用业务上较长的超时。
网络上会出现很多情况,三次握手能尽量把网络上的问题(如你问题中提到的情况),扼杀在等第三次握手的时候,这样比二次握手方案对服务端系统造成更小的影响。
补充下楼上的,客户端相比服务端要不稳定的多,TCP本身是个双向链接,需要对服务端进行资源保护,只有3次握手才能形成一个完整可靠的闭环,对于服务端来说:3次:客户出--》服务入---》服务出--》客户入--》客户出---》服务入,客户端的初入/服务端的出入都覆盖了,而2次:客户出--》服务入--》服务出,缺少客户端是否能正确接收