停止并等待 TCP 是否发送带有 ACK 的数据?
Does Stop and Wait for TCP send data with an ACK?
假设我有一个带有客户端和服务器的简单 TCP 连接。客户端向服务器发送一些数据,服务器在对原始数据进行一些处理后将一些数据返回给客户端。
我不是 100% 了解数据包流在这种情况下如何使用停止和等待协议工作。 client向server发送原始数据时,server是同时发送ACK和新数据(同一个包?),还是分开发送?
根据我在网上看到的示例,我无法完全理解服务器何时将数据发送回客户端与何时发送 ACK 相关。
谢谢!
如果服务器已经排队等待发送回客户端的一些数据,它可以使用TCP piggybacking以便(服务器对客户端数据包的确认)和(服务器的一些回复数据)共享单个数据包。这使得协议更加高效,因为必须将更少的数据包发送回客户端。
如果服务器在它想要发送 ACK 数据包时没有任何自己的应用程序级数据要发回,那么 ACK 数据包将作为独立数据包返回给客户端. (在停止等待协议中,服务器可能还没有准备好发送回任何应用程序级数据,因为一旦收到客户端的数据包,ACK 就应该返回给客户端,并且在在这种情况下,服务器应用程序在完成对接收到的客户端数据的处理之前不会生成任何数据)
假设我有一个带有客户端和服务器的简单 TCP 连接。客户端向服务器发送一些数据,服务器在对原始数据进行一些处理后将一些数据返回给客户端。
我不是 100% 了解数据包流在这种情况下如何使用停止和等待协议工作。 client向server发送原始数据时,server是同时发送ACK和新数据(同一个包?),还是分开发送?
根据我在网上看到的示例,我无法完全理解服务器何时将数据发送回客户端与何时发送 ACK 相关。
谢谢!
如果服务器已经排队等待发送回客户端的一些数据,它可以使用TCP piggybacking以便(服务器对客户端数据包的确认)和(服务器的一些回复数据)共享单个数据包。这使得协议更加高效,因为必须将更少的数据包发送回客户端。
如果服务器在它想要发送 ACK 数据包时没有任何自己的应用程序级数据要发回,那么 ACK 数据包将作为独立数据包返回给客户端. (在停止等待协议中,服务器可能还没有准备好发送回任何应用程序级数据,因为一旦收到客户端的数据包,ACK 就应该返回给客户端,并且在在这种情况下,服务器应用程序在完成对接收到的客户端数据的处理之前不会生成任何数据)