了解 TCP 握手后 ACK 消息的作用
Understanding the role of ACK messages after TCP Handshaking
TCP 握手需要 ACK 消息。但是,我读过一些文章,解释了实际数据传输时ACK消息的另一种形式;发送方需要等待来自接收方的 ACK 消息指示要发送的后续字节。那是对的吗?有人能解释一下为什么我们也称它为 ACK 消息吗?
TCP 是基于无连接网络 IP 的面向连接的协议。因此,要有连接的概念,每一端都必须确认从另一端接收到的数据。这是通过 ACK 消息(或确认消息)实现的。为了使 TCP 正常工作,每个传输的字节都需要得到确认(只有这样它才是面向连接的协议)。但是,请注意,这并不意味着发送的每个数据包都需要使用确认消息进行回复。需要的是 'eventually' 所有发送的数据都得到确认。回复每个已发送的数据包会严重影响吞吐量,因此通常发送方可以继续发送消息,同时保留一定数量的数据未被确认。这称为 TCP Window。除了这个简单的解释之外还有更多的东西,而且 TCP 的大部分复杂性都来自 - 试图保持 window 以使吞吐量(在 bytes/sec 中最大化)。网上可能有很多资源。我强烈建议阅读 'TCP/IP Illustrated - Volume 1' 以更好地理解 IP 网络和 TCP。
TCP 握手需要 ACK 消息。但是,我读过一些文章,解释了实际数据传输时ACK消息的另一种形式;发送方需要等待来自接收方的 ACK 消息指示要发送的后续字节。那是对的吗?有人能解释一下为什么我们也称它为 ACK 消息吗?
TCP 是基于无连接网络 IP 的面向连接的协议。因此,要有连接的概念,每一端都必须确认从另一端接收到的数据。这是通过 ACK 消息(或确认消息)实现的。为了使 TCP 正常工作,每个传输的字节都需要得到确认(只有这样它才是面向连接的协议)。但是,请注意,这并不意味着发送的每个数据包都需要使用确认消息进行回复。需要的是 'eventually' 所有发送的数据都得到确认。回复每个已发送的数据包会严重影响吞吐量,因此通常发送方可以继续发送消息,同时保留一定数量的数据未被确认。这称为 TCP Window。除了这个简单的解释之外还有更多的东西,而且 TCP 的大部分复杂性都来自 - 试图保持 window 以使吞吐量(在 bytes/sec 中最大化)。网上可能有很多资源。我强烈建议阅读 'TCP/IP Illustrated - Volume 1' 以更好地理解 IP 网络和 TCP。