三次握⼿
第⼀次握⼿:客户机⾸先向服务器的TCP发送⼀个连接请求报文段,这个特殊的报文段不含应⽤层数据, 其⾸部中同步位SYN被设置为1。另外,客户机会随机选择⼀个起始序号seq=x(连接请求报文不携带数 据,但要消耗⼀个序号).
第⼆次握⼿:服务器的TCP收到连接请求报文段后,如果同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被设置为1,确认号字段值为ack=x+1,并 且服务器随机产⽣起始序号seq=y. 确认包同样不包含应⽤层数据。
第三次握⼿:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变 量。这个报文段的确认为ACK被设置为1,序号段被设置为seq=x+1,确认号字段ack=y+1. 该报文段可以 携带数据,如果不携带数据则不消耗序号。 理想状态下,TCP连接⼀旦建立,在通信双⽅中的任何⼀⽅ 主动关闭连接之前,TCP 连接都将被⼀直保持下去。因为TCP提供全双⼯通信,因此双⽅任何时候都可以 发送数据。四次挥⼿第⼀次挥⼿:客户机打算关闭连接,就向其TCP发送⼀个连接释放报文,并停⽌再发送数据,主动关闭TCP连接。该报文段的FIN标志位被设置为1,seq=u,它等于前⾯已经发送过的数据的最后⼀个字节的序号 加1。第⼆次挥⼿:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,序号为v,等于它前⾯已经发 送过的数据的最后⼀个字节序号加1.此时客户机到服务器这个⽅向的连接就释放了,TCP处于半关闭状 态。ACK=1,seq=v,ack=u+1第三次挥⼿:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时发出FIN=1,确认号ack= u+1,序号seq =w,已经发送过的数据最后⼀个字节加1。确认为ACK=1. (FIN = 1, ACK=1,seq = w, ack
四次挥⼿
第⼀次挥⼿:客户机打算关闭连接,就向其TCP发送⼀个连接释放报文,并停⽌再发送数据,主动关闭TCP连接。该报文段的FIN标志位被设置为1,seq=u,它等于前⾯已经发送过的数据的最后⼀个字节的序号 加1。
第⼆次挥⼿:服务器收到连接释放报文段后即发出确认,确认号是ack=u+1,序号为v,等于它前⾯已经发 送过的数据的最后⼀个字节序号加1.此时客户机到服务器这个⽅向的连接就释放了,TCP处于半关闭状 态。ACK=1,seq=v,ack=u+1
第三次挥⼿:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时发出FIN=1,确认号ack= u+1,序号seq =w,已经发送过的数据最后⼀个字节加1。确认为ACK=1. (FIN = 1, ACK=1,seq = w, ack=u+1)
第四次挥⼿:客户机收到连接释放报文段后,必须发出确认。在确认报文段中,确认位ACK=1,序号seq=u+1,确认号ack=w+1. 此时连接还没有释放掉,必须经过实践等待计时器设置的时间2MSL(Max Segment Lifetime),后,客户机才进入连接关闭状态。 (ACK=1,seq=u+1,ack=w+1) 如下图所⽰: