为什么三次握手?
不采用2次: 避免服务端收到过时的请求。
这是为了防止超时重传的无效的连接请求报文到达B服务机。
1. 因为有可能A先发了一个连接请求报文,但是由于网络的1问题,迟迟没有到达B主机,这时候,A主机就超时重传了该报文,然后B主机响应了该请求报文,但是不妙了,第一个报文居然又到了B主机,那么B主机就会把它作为新的连接请求,
a. 如果只有两次握手,那么B主机对于该连接请求也会建立连接,
b. 但是如果是三次握手,B主机发出确认报文后,A主机不予理睬,这样就不会建立TCP连接了。
所以说只有当三次握手完成,也就是A主机发出确认报文的时候,双方主机才会进入ESTABLISHED状态。
四次放手?
为什么最后要等一个TIME_WAIT时间呢?
1. 一:为了保证最后一个ACK能够到达B,防止丢失了,B重传,A不能回复确认。
二是为了防止之前提到的“已经失效的连接请求报文段“出现在连接中”。A发送完最后一个ACK,再经过时间2MSL,可以使本连接产生的所有请求报文从网络中消失。
长连接
为什么要⻓连接?有些场景需要不断开,比如两人需要保持连接聊天、更常见的是消息推送。
因为移动⽹络并不在 Internet 中,⽽是在运营商的内网,并不具有真正的公网 IP,因此当某个 TCP 连接在一段时间不通信之后,⽹关会出于⽹络性能考虑⽽关闭这条 TCP 连接和公⽹的连接通道,导致这个TCP端⼝不再能收到外部通信消息,即 TCP 连接被动关闭。
⻓连接的实现方式?
心跳。即在一定间隔时间内,使用 TCP 连接发送超短无意义消息来让⽹关不能将⾃⼰定义为「空闲连接」,从而防止⽹关将⾃⼰的连接关闭。