关于三次握手,以及其中的ACK机制的解释。

本文详细解释了TCP/IP协议中的ACK机制,包括其在确保数据正确传输中的作用,以及在三次握手过程中如何保证连接的建立。通过ACK,接收方确认接收到的数据并指示发送方发送下一序列号的数据。若发生数据丢失、乱序或错误,TCP协议会通过重传或调整顺序来纠正。三次握手涉及的ACK确认,确保了连接的可靠建立。

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

ACK机制。

ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。

比如:发送方发送的数据序号是seq,那么接收方会发送seq + 1作为ACK,这样发送方就知道接下来要发送序号为seq + 1的数据给接收方了。

在这里插入图片描述

其格式取决于采取的网络协议。当发送方接收到ACK信号时,就可以发送下一个数据。如果发送方没有收到信号,那么发送方可能会重发当前的数据包,也可能停止传送数据。具体情况取决于所采用的网络协议。

1、TCP报文格式中的控制位由6个标志比特构成,其中一个就是ACK,ACK为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段。
2、ACK也可用于AT24cxx这一系列的EEPROM中。
3、在USB传输中,ACK事务包用来向主机/设备报告包正确的传输。

数据丢失或延迟。

发送方发送数据seq时会起一个定时器,如果在指定时间内没有接收到ACK seq + 1,就把数据seq再发一次。

数据乱序。

接收方上一个收到的正确数据是seq + 4,它返回seq + 5作为ACK。
这时候它收到了seq + 7,因为顺序错了,所以接收方会再次返回seq + 5给发送方。

数据错误。

每一个TCP数据都会带着数据的校验和。接收方收到数据seq + 3以后会先对校验和进行验证。如果结果不对,则发送ACK seq + 3,让发送方重新发送数据。

数据重复。

接收方直接丢弃重复的数据即可。


ACK在三次握手中用到,三次握手的过程(如图1:三次握手图)所示。

在这里插入图片描述

第一次
第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 [3]
完成三次握手,客户端与服务器开始传送数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员不懂浪漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值