(面试常见问题)TCP的握手和挥手过程

本文详细介绍了TCP协议中的三次握手和四次挥手的过程及其原因。三次握手用于建立连接,确保连接请求有效并避免服务器资源浪费。四次挥手则用于终止连接,确保所有数据正确传输并且允许连接双方有序关闭。

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

TCP握手挥手

TCP 三次握手

在这里插入图片描述

  • 首先服务器处于LISTEN(监听)状态,客户端向服务器发送请求,其中SYN=1,初始化一个seq为x
  • 服务器接收连接请求报文后,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,seq=y,ack=x+1
  • A接收到B发出的连接确认报文后还需要向B发送确认报文。ACK=1,seq=x+1,ack=y+1
  • B收到A的确认后,连接建立
三次握手的原因
  • 防止失效的连接请求到达服务器。
  • 避免因延迟造成的服务器资源浪费。如果没有第三次握手,服务器的确认连接请求延迟或者超时,客户端会重新发送请求连接,但是服务器已经为客户端打开一个连接,会造成服务器为一个客户端打开多个连接的现象。如果有第三次握手,客户端不对延迟的或者超时的确认连接发送确认(第三次握手),服务器就不会创建连接。知道完整的三次握手完成。
TCP 的四次挥手

在这里插入图片描述

  • A发送挥手报文,FIN=1, 初始化一个seq=u
  • B接收到挥手报文后进入CLOSE-WAIT状态,通知应用进程。并向A发出确认。此时TCP处于半连接状态,即B能向A发送数据而A不能向B发送数据。ACK=1,seq=v,ack=u+1
  • 当B不再需要连接时,向A发送第三次挥手报文,FIN=1,ACK=1,ack=u+1
  • A接收到第三次挥手报文后向B发送确认,并且等待2MSL的时间再关闭。
  • B接收到确认后直接关闭连接。
四次挥手的原因
  • Close wait
    • 等待服务器将未完成传输的数据传完。
  • time-wait
    • 设置2MSL的等待区间是以防服务器没有接收到连接确认重发,但是客户端已经释放连接不再发送确认导致服务器无法释放连接。
    • 让本次连接产生的所有报文在网络中消失,使得新的连接不会出现旧连接的报文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值