三次握手,就好比找对象
(第一次握手)男孩看上了一位心仪的女孩,然后就发了信息(主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器),女孩知道了有个男孩想追求她(主机B由SYN=1知道,A要求建立联机)。
(第二次握手)女孩收到男孩发来的信息之后,其实女孩也对男孩有意思,所以也回复了男孩信息(主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包)
(第三次握手)男孩收到了女孩发的信息好开心啊,于是心里有点确定女孩没有拒绝他,所以男孩再次发信息来建立感情(主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1),女孩收到信息,慢慢的他们在一起了(主机B收到后确认seq值与ack=1则连接建立成功)
完成3次握手,主机A与主机B开始传送数据。
四次挥手,好比分手
谁都可以提出分手要求(CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。)
第一次挥手:有天呢,有一个人想分手了,于是给对方发了一个信息说我们别联系了(客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送)
第二次挥手:对方收到信息呢,很伤心(服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。)
第三次挥手:就最后给提分手的那位发了个信息就把他拉黑了(服务器B关闭与客户端A的连接,发送一个FIN给客户端A)
第四次挥手:提分手的那个人呢收到了对方的确认,分手成功了(客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。)