TCP的三次握手与四次挥手

客户端与服务器建立连接之前要经过TCP三次握手,关闭连接之前要经过TCP四次挥手,下面分别进行介绍:

三次握手过程理解

图解:
在这里插入图片描述
第一次握手:建立连接时,客户端首先向服务器发送一段TCP报文。其中,标志位为SYN,表示“请求建立新连接”,将序列号设为x。随后客户端进入SYN-SENT阶段。
第二次握手:服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文。其中,标志位为SYN和ACK,序列号为y,确认号为x+1,表示”客户端的报文序列号有效,服务器能正常接收客户端发送的数据,并同意创建新连接“。随后服务器端进入SYN-RCVD阶段。
第三次握手:客户端接收到来自服务器端的确认收到数据的TCP报文之后,结束SYN-SENT阶段,并返回最后一段TCP报文。其中,标志位为ACK,序列号为x+1,确认号为y+1,表示”确认收到服务器端同意连接的信号“。随后客户端进入ESTABLISHED阶段,当服务器收到来自客户端的最后一段TCP报文之后,也进入ESTABLISHED阶段,完成三次握手。

四次挥手过程理解

图解:
在这里插入图片描述
第一次挥手:客户端想要释放连接,首先向服务器端发送一段TCP报文,标志位为FIN,表示”请求释放连接“,序列号设为u。随后客户端进入终止等待1阶段。并且停止在客户端到服务器端方向上发送数据(确认报文除外),但是客户端仍然能接收从服务器端传输过来的数据。
第二次挥手:服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后进入半关闭状态并返回一段TCP报文。其中,标志位为ACK,序列号为v,确认号为u+1。表示”接收到客户端发送的释放连接的请求“。客户端收到该报文之后进入终止等待2阶段。
第三次挥手:服务器将最后的数据发送完毕后(经过CLOSED-WAIT),就向客户端发送连接释放报文。其中,标志位为FIN,ACK,序列号为w,确认号为u+1,表示”已经准备好释放连接了“。随后服务器进入最后确认阶段。
第四次挥手:客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束终止等待2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文。其中,标志位为ACK,序列号为u+1,确认号为w+1。随后客户端开始在TIME-WAIT阶段等待2MSL。服务器端收到从客户端发出的TCP报文之后结束最后确认阶段,进入CLOSED阶段。客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成四次挥手。

相关的常见问题有:

  • 为什么要进行第三次握手?两次不行吗?
  • 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

其实你只要想明白一件事以上类似的问题都可以迎刃而解,那就是,考虑网络状况不可靠的情况,你发送的报文对方有可能接收不到。以上机制所作的看似多余的操作其实都是为了防止报文丢失,从而减小服务器开销。

通过对TCP握手挥手的观察可以发现,在建立连接时是客户端先准备好之后等待服务器端,释放连接时是客户端先等服务器端关闭之后自己再关闭。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值