三次握手:
第一次:客户端给服务器发请求说,我要和你建立连接 SYN=1
第二次:服务器给客户端说,我知道了,那咱两建立连接把 ACK=1 SYN=1
第三次:客户端对服务器说,好的,我知道你知道 我要和你建立连接了 ACK=1
为什么不是两次握手呢?
第一次:客户端给服务器发请求说,我要和你建立连接
第二次:服务器给客户端说,我知道了,那咱两建立连接把
客户端给服务发消息,服务器由于网络阻塞或者别的原因没有收到,就不会回应,客户端一段时间没有收到服务器给他回的消息,他就会重新发送一个请求,现在在他重新发送请求后,服务器且回应了,建立连接后,且服务器收到前段时间的失效报文,服务器就建立了连接,准备接受数据。但是他已经失效了,客户端就对那个失效的消息不感冒,就不传数据,然后服务器就一直等啊等啊等着他传数据,就浪费了服务器资源。
如果是三次握手的话,客户端再给他回一句,我知道了,我等哈就给你发数据,然后这样他两才链接上,
如果客户端没给他回消息,服务器就不会和他建立连接,就不会一直等啊等啊。
所以避免浪费服务器资源。
四次挥手:
链接时是个全双工的过程,一般都是浏览器给服务器说,很少服务器给浏览器说,
第一次:浏览器给服务器说,我现在要断开tcp链接了啊,
第二次:服务器给浏览器说,知道了,那就断吧,但是这个时候服务器的资源还没有发完,他还会继续给浏览器发消息,
第三次:当他发完了之后,他就跟浏览器说,我现在发完了,咱两可以断开了。(客户端在之前还是接收数据的,只是他不在给服务器发东西了)
第四次:客户端给浏览器说,好的我知道了,那就真正的断开吧。(在第四挥手的时候,有一个等待时间,在这个等待时间里,服务器不再给给客户端发消息的话,过了这段时间,客户端就默认,服务器已经收到 客户端同意和他断开的消息了。
为什么是四次挥手呢?
关闭连接的时候,当接收到FIN通知时,只是说他没啥给你发的了,你不一定没东西给他发啊,你再次给他发FIN时,代表你没东西给他发了,双方都没东西发了,就可以完全关闭了。
就比如说,我要和你分手了,但是你对我还有感情,当你没感情的时候,也就是咱两都没感情的时候,就可以分手了,不能说我没感情就分手,不公平啊!!
补充:
四次挥手的时候,第一次浏览器发送FIN
第二次,服务器发送ACK
第三次,服务器发送FIN,
第四次,浏览器发送ACK
-------------------------------------------------------------------------------------------------------------------------------
天哪!!!刚开始的题目竟然错了!!已改正,tcp的三握四挥,不是http的,http是一个无状态协议!!!!!’