.简述下TCP三次握手的过程,并解释采用3次握手建立连接的原因?
客户端发送连接请求: syn=1 seq=x
服务端发送响应请求 syn=1 ack=x+1 seq =y 表示服务端准备好了
客户端发送确认的请求 ack=y+1 seq=x+1 客户端确认是刚才自己发的消息,且消息有效
那为什么需要三次握手呢?其实就像客户端的第二次握手我描述的那样是为了判断消息有效。
试想这样一个场景:客户端在很久很久之前发送了一个请求,但是由于网络因素或者是其他因素,他没有及时被服务端收到,也没有消失,而是暂时发送不到服务端了,而此时客户端没有收到服务端的回信,又发了一次,这次网速快,三次握手成功了。
更巧的是,成功之后,滞留的之前的客户端发的消息发出去了,然后被服务端收到了,服务端又发了一个确认消息,但客户端这次没有确认。
服务端就会立马知道----啊啊! 这是滞留的消息。
这就是三次握手的作用。
四次挥手的过程是:
客户端发送一个FIN
报文告诉服务器,我要停止对你发送数据了
服务器端发送收到
服务器端发送一个FIN
报文,告诉客户端,我也要停止对你发送数据了。
客户端回答收到
为什么要四次挥手呢?因为客户端和服务端的连接是双向的,客户端向服务器端发送FIN
只是段龛客户端到服务器的连接,服务器还可以向客户端发送数据,此时只是单向断开,只有服务器再次发送FIN
报文的时候才是双向断开。