tcp的三次握手和四次挥手

TCP与UDP是两种网络传输协议,TCP基于连接,UDP基于非连接。TCP通过三次握手确保连接可靠性,防止重复连接。四次挥手用于可靠地关闭连接,避免服务端因未收到ACK包而陷入等待状态。挥手过程中,客户端会进入超时等待以确认服务端已关闭连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tcp的三次握手和四次挥手

TCP与UDP的区别

他们两个的作用都是在程序中传输数据(文件、图片、视频等)
区别在于:

  • TCP:基于连接
  • UDP:基于非连接

举例理解:如果被人与人的通信比喻为进程与进程的通信,那么有两种方式,写信打电话,写信就算非连接的,打电话就是连接的。
在这里插入图片描述
TCP是如何保证以上过程的?通过三次握手,确定传输、四次挥手

TCP三次握手

三次握手是建立连接的过程

第一次握手:当客户端向服务端发起连接时,会先发一包连接请求数据,询问下能否与你(服务端)建立连接,这个包称为syn包

第二次握手:如果服务端同意连接,会给客户端回复一包syn+ack包

第三次握手:客户端收到后在回复一包ack包,连接建立

由于建立连接过程中一共发送是三次包,所以叫三次握手
在这里插入图片描述

为什么是三次握手而不是两次握手?

三次握手本质上来说就是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立可靠的的连接。

服务端回复完syn+ack包就建立连接,那么如果第一次发起请求连接的syn包失效,丢失或延迟的话,服务端没有及时收到并回复,客户端为了建立连接会再次发送一个syn包再次请求连接,这次发送的syn包服务端正常接收并回复syn+ack包,但第一次发送的syn包,此时服务端才收到,依然会给客户端返回一个syn+ack包,这时就会出现,服务端认为这是两个请求连接,而客户端认为这是一个请求连接,造成状态不一致。

如果是三次握手的情况下就不会出现这种问题,服务端只要没有收到ack包,就不会认为建立连接成功

四次挥手

经过三次握手后,客户端和服务端就进入了数据传输状态,他们都可以发起关闭连接请求

假如客户端发起关闭请求,

  • (第一次挥手)他需要向服务端发起一个FIN包表示要关闭连接,自己进入终止等待1状态,
  • (第二次挥手)服务端收到FIN包回复一个ACK包,表示自己进入关闭等待状态,客户端接收到ACK包,进入终止2等待状态,【这个阶段服务端还是能发送未发送完的数据的,客户端也可以接收数据】,
  • (第三次挥手)等服务端发送完数据后,服务端再次发送一包FIN包,进入最后确认状态,
  • (第四次挥手)客户端收到fin包后,向服务端发送ack包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ack包后立即关闭连接。

为什么客户端需要进入超时等待连接?

这时因为防止服务端无法收到ack包,如果服务端未收到ack包(ack包丢失了),客户端就释放了连接,服务端将一直停留在等待关闭状态,

如果服务端没收到ack包,等待一段时间后会再次向客户端重发FIN包,客户端会响应这个fin包并重新刷新超时时间

四次挥手的目的:在不可靠的的网络信道中进行可靠的连接断开
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值