-
建立TCP连接需要三次握手:首先Client端发送连接请求报文,Server端接收连接后回复ACK报文,并为这次连接分配资源。Client端接收到 ACK报文后也向Server端发发送ACK报文,并分配资源,这样TCP连接就建立了。
-
第一步:客户端的TCP先向服务器的TCP发送一个连接请求报文。这个特殊的报文中不含应用层数据,其首部中的SYN标志位被置1。另外, 客户端会随机选择一个起始序号seq=x(连接请求报文不携带数据,但要消耗掉一个序号)。
-
第二步:服务器端的TCP收到连接请求报文后,若同意建立连接,就向客户端发送请求,并为该TCP连接分配TCP缓存和变量。在确认报文中,SYN和ACK位都被置为1, 确认好字段的值为x+1,并且服务器随机产生起始序号seq=y(确认报文不携带数据, 但也要消耗掉一个序号)。确认报文同样不包含应用层数据。
-
第三步:当客户端收到确认报文后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。这个报文的ACK标志位被置为1,序号字段为x+1,确认号字段为y+1。
-
-
四次挥手
-
第一步:客户端打算关闭连接,就向其TCP发送一个连接释放报文,并停止再发送数据,主动关闭TCP连接,该报文的FIN标志位被置1,seq=u,它等于前面已经传送过的数据的最后一个字节的序号加1(FIN报文即使不携带数据,也要消耗掉一个序号)。
-
第二步:服务器接收连接释放报文后即发出确认,确认号是ack=u+1,这个报文自己的序号是v,等于它前面已传送过的数据的最后一个自己的序号加1。此时,从客户端到服务器这个方向的连接就释放了,TCP连接处于半关闭状态。但服务器若发送数据,客户端仍要接收,即从服务器到客户机的连接仍未关闭。
-
第三步:若服务器已经没有了要向客户端发送的数据,就通知TCP释放连接,此时其发出FIN=1的连接释放报文。
-
第四步: 客户端收到连接释放报文后,必须发出确认。在确认报文中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1。此时,TCP连接还没有释放掉,必须经过等待计时器设置的时间2MSL后, A才进入到连接关闭状态。
-
来源:原创
发布时间:2021-06-19 21:30:34