【无标题】

三次握手、四次挥手的流程

三次握手建立连接:【流程:初始双端为双端关闭状态;服务端先开始监听客户端;客户端向服务端发送序列号seq=client_seq并建立连接申请SYN;服务端接收后向 客户端发送同意申请,发送自己的序列号seq=server_seq和申请链接请求SYN, 回复客户端应答ack=client_seq+1,并且返回自己的确认应答ACK;客户端收到后变为可连接状态established,向服务端发送 确认应答ACK,和收到服务端信息后的确认应答ACK=server_seq+1;服务端收到ACK,变成可连接状态established。】

四次挥手断开连接:【流程:先断开连接的称为主动方,另一个为被动方。主动方发送数据和结 束标志FIN;被动方收到后先返回一次 ACK,再等待其他数据包处理完成 后,再次发送ACK和FIN结束传输;主动方收到FIN后,进入等待状态,并发送ACK;被动方接受到消息后,变成关闭状态;2MSL时间后,主动方变成关闭状态。】

为什么是三次握手?两次、四次行不行?

  1. 问题1:最快发送数据时间 :在三次握手的第三次发送时可以附带数据。因为第二次时客户端已经连接成功,可以发送消息了。

  2. 问题2:为什么是三次?不是两次也不是四次?
    【TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。
    不使用「两次握手」和「四次握手」的原因:
    • 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
    • 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。】

  3. 问题3: 主动方发送完最后一个信息后,为什么等待2MSL时间再关闭?
    原因:MSL是一个报文存活的最大时间;等2MSL是为了保证被动方一定能收到最后一个ACK。;
    具体解释是:若期间主动方收到了FIN,说明被动方没收到最后一个 ACK,从而发生了超时重传给主动方 再发送了一遍ACK和FIN,将上一次的FIN发回了主动方;主动方没收到FIN就说明没有丢失数据包,则主动方关闭。假设客户端(主动方)不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

  4. 问题4:被动方第一次收到FIN后,为什么没有 直接返回FIN,而是要等一次?
    原因: 需要处理一些之前发送到缓存区的消 息,等消息处理完(向主动方发送这 些消息的回复消息)后再发送FIN消 息,结束数据传输;或者是前面的包 还没有全到,只到了FIN。返回ACK的 原因是:ACK的作用是告诉客户端, 服务端收到了消息,以此防止客户端 超时重传。;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值