TCP的三次握手与四次挥手

一、TCP的连接与断开

  • TCP是面向连接的,每次发送数据之前都要和对方建立一条可靠的连接,这个建立连接的过程分为三个步骤,因此称为三次握手

  • 连接的完成必然会有断开,因此断开被称之为四次挥手

1、TCP的三次握手

在这里插入图片描述

第一次:当客户端向服务器发送请求连接的报文时

  • seq序列号=x(x为随机)
  • SYN=1(表示发送连接请求)

第二次:服务器端收到客户端发来的请求报文后,同意建立连接,则向客户端发送确认报文

  • seq序列号=y(这时服务器也会产生一个序列号y,和客户端的序号不相关)
  • Ack确认号=x+1 (seq序列号x+1,表示确认收到了客户端的请求)
  • ACK=1(表示这是条确认请求)
  • SYN=1 (同时也发送一个建立连接的请求)

第三次:客户端进程收到服务端进程的确认后,还要向服务端给出确认,然后连接成功建立

  • seq序列号=x+1(这时客户端的序号为1)
  • Ack确认号=y+1(表示确认收到了服务器的连接请求)
  • ACK=1(表示这是确认报文)

简版

pc1向pc2建立连接

  1. pc1申请向pc2发送建立连接请求
  2. pc2同意pc1的连接请求,并向pc1请求连接(因为连接是双向的)
  3. pc1收到,回复pc2同意连接

2、TCP的四次挥手

在这里插入图片描述

第一次:当客户端向服务器发送断开连接请求时

  • FIN=1(表示发送断开请求)

  • ACK=1(表示确认断开)

第二次:服务器收到客户端的请求时回复确认消息

  • ACK=1(表示确认断开)

第三次:服务器再次向客户端发送断开连接请求

  • FIN=1(表示发送断开请求)

  • ACK=1(表示确认断开)

第四次:客户端收到请求后回复确认消息

  • ACK=1(表示确认断开)

简版

pc1向pc2申请断开连接请求

  • pc1向pc2发送断开请求
  • pc2同意pc1的请求,并回复确认消息(这时pc1单方面断开连接,为了防止有些数据未完成pc2会继续保持与pc1的连接)
  • pc2再次向pc1发送断开请求
  • pc1同意并回复确认消息(pc2与pc1断开连接)

二、TCP的一些问题

1、为什么是三次握手而不是两次呢

  • 主要是为了防止已经失效的连接请求报文突然又传送到了服务器,从而导致不必要的错误和资源的浪费。

  • 两次握手只能保证单向连接是畅通的。因为TCP是一个双向传输协议,只有经过第三次握手,才能确保双向都可以接收到对方的发送的数据。

参考来源:TCP协议为什么是三次握手而不是两次呢?

2、为什么是四次挥手而不是三次

  • TCP是双向通讯协议,客户端发送FIN到服务端,告诉服务端,客户端不会再发送数据了,但是服务端还有消息未发送完毕,为防⽌客户端消息等待,服务端会⾸先发送ACK确认字符到客户端,并关闭消息接收服务。但是服务端会将剩余消息发送完毕,然后发送FIN到客户端,告诉客户端不会再发送消息,然后客户端会回复ACK表⽰收到,并关闭服务,当服务端收到ACK后,验证正常则会关闭所有的服务,TCP连接中断完毕。

    参考来源链接:TCP的四次挥手为什么不是三次

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值