怎样理解TCP的三次握手与四次挥手

TCP:传输控制协议

TCP与UDP都工作在传输层,但与UDP不同的是TCP必须先建立连接,才可以进行传输。
在不可靠的基础上建立可靠的传输。

建立通信过程:
三次握手:

通俗来说,三次握手就是三次通信的过程,可以把这个通信过程看成是一次网购。
在挑选完商品后,第一次握手就是付款,只有付款后,商家才会发货;第二次握手就是商家发货,当快递收到后;第三次握手是签收快递,对所收到的快递进行检查并确认收货。

                   付款 –> 发货 –> 签收

     

  • 只有商家收到你付款的消息之后,商家才会向你所填写的收货地址发送快递;快递收到后,若未进行收货确认会导致商家无法确认你是否已经收到物品,所以需要进行收货确认告知商家我已经拿到快递。
这个过程只有完成上一步之后,才会继续进行下一步,当中任意一步缺失或者错位都会导致这次网购失败。
TCP报文:

  

TCP报文类型

标志位代表的就是TCP报文的类型,可以指定单个或多个标志,每个标志占1位。

  • URG:紧急指针;优先级最高,当URG置1时,该报文需要插在最前面,尽快发送。
  • SYN:同步序号,表示发起连接;当SYN置1,ACK置0,表示请求连接;当SYN置1,ACK置1,表示确认连接。
  • ACK:确认应答,表示确认应答,在TCP建立连接后的所有ACK都要置1。
  • RST:两种含义:重新连接;拒绝连接/释放连接。
  • FIN:结束连接,当FIN置1时,请求释放连接
  • RSH:表示希望对端能够优先处理;当RSH置1时,对端收到后该类型报文后会尽快处理
三次握手(建立连接)

5IX3yq.png

客户端

客户端未向服务端发起连接前,处在closed状态;在向服务端第一次握手后,状态转变为syn-send,等待服务端回应;收到服务端回应后,进行第三次握手,向服务端返回一个确认连接后,就会变成established状态,已经完成客户端的连接。

服务端

服务端未收到连接请求前,会一直处于listen状态;在收到客户端发送来的连接请求后,会从listen转变为syn-rcvd状态,并与客户端进行第二次握手,回应客户端一个响应报文和连接请求;当收到客户端回应后,状态会变为established状态,这时TCP的三次握手结束。

第一次握手:客户端 --> 服务端

TCP报文内标志位为SYN=1,ACK=0,并使用随机数生成器生成一个随机序列数seq,假设为x。

第二次握手:服务端 --> 客户端

TCP报文内标志位为ACK=1,SYN=1,ack=x+1,使用随机生成器生成一个随机序列数seq,假设为y。

第三次握手:客户端 --> 服务端

TCP报文内标志位为ACK=1,ack=y+1,为保证第一次握手与第三次握手仍是同一连接,则seq=x+1

四次挥手(释放连接)

5ok2As.png

客户端

当客户端决定进行释放连接时,进行第一次挥手向服务端发送释放连接请求将FIN置1;同时进入FIN-WAIT-1状态;当服务端确认后,从状态FIN-WAIT-1转变为FIN-WAIT-2,继续等待服务端请求释放连接;当收到服务端发送的请求释放连接后,进行第三次挥手,对服务端的请求进行确认应答。此时的状态并不是CLOSE,而是进入TIME-WAIT状态,再等待两个最长报文寿命后,才会进入CLOSE状态。这样做的目的是以保证服务端能够收到客户端的ACK确认应答。

服务端

当服务端收到客户端发送的释放连接的请求后,进行第二次挥手对发送端的请求确认,并进入CLOSE-WAIT状态;当服务端决定释放连接后,进行第三次挥手主动向客户端发送释放请求,并进入LAST-ACK状态;只有收到客户端的确认后,才会关闭此次连接。

第一次挥手:客户端 --> 服务端

TCP报文标志位为FIN=1,并随机生成一个随机序列数seq,假设为x。

第二次挥手:服务端 --> 客户端

TCP报文标志位为ACK=0,ack=x+1,随机生成一个随机序列数,假设为y。

第三次挥手:服务端 --> 客户端

TCP报文标志位为FIN=1,ACK=1,ack=x+1,随机生成一个随机序列数,假设为z。

第四次挥手:客户端 --> 服务端

TCP报文标志位为ACK=1,ack=z+1,为保证第一次挥手与第四次挥手是同一连接,则seq=x+1.

至此,关于TCP三次握手与四次挥手的内容就全部讲完了,如有错误,望指正。

个人博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值