TCP的3次握手
标志位
SYN: 表示连接请求 ACK: 表示确认 FIN: 表示关闭连接 seq:表示报文序号 ack: 表示确认序号
图解流程如下:
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
通俗的讲:
第一次握手:男人和女人说你好漂亮啊,做我女朋友吧
第二次握手:女人和男人说,你也很帅,可以啊
第三次握手:男人和女人说,那我们周末去游乐园玩吧
TCP的4次挥手
图解流程如下:
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送。
第四次挥手:Client收到FIN后,接着发送一个ACK给Server,确认序号为收到序号+1。
通俗的讲
第一次挥手:男人和女人说,你没以前漂亮了,我们分手吧
第二次挥手:女人和男人说,好,你个渣男,得我收拾东西马上走
第三次挥手:女人和男人说,我收拾完东西了,我走了,你就等着后悔吧
第四次挥手:男人和女人说,好走不送
为什么要三次握手
客户端给服务端发消息,服务端和客户端各自确认一次就完成连接了
为什么要四次挥手
因为客户端和服务端需要相互给对方发确认消息,不然怕客户端或者服务端还在给对发消息,但对方却已经和对方断开连接了