3

我正在编写一个协议来使用 TCP 通过网络传输千兆字节的数据,以尝试自学一些关于协议编程的知识。我不确定如何设计这个传输协议,以便以最快和最有效的方式传输数据。

我在 Windows 上使用 Qt。

目前,我的应用程序协议(传输数据的部分)的设计如下:

  1. 首先拍摄登录详细信息。
  2. 写入第一个 4 KB 的数据包(到套接字中),然后等待服务器确认它已收到数据包。
  3. 当服务器确认接收到数据包时(通过写入 int "1"),写入接下来的 4 KB。
  4. 传输完所有数据后,将传输的数据的 md5sum 发送到服务器。
  5. 如果服务器再次以 int 8 确认,则数据传输完成。

目前,当传输超过 127.0.0.1 时,我无法在同一台计算机上获得高于 166KB/秒的速度。我一直在尝试阅读其他协议设计,但几乎没有任何关于数据传输协议的文档可以为他们的应用程序编写。

我发布的协议设计是错误的还是存在一些严重问题?协议应该等待每个数据包被服务器确认还是我应该连续编写它?

4

1 回答 1

0

首先,我建议花一些时间阅读TCPSliding Window Protocol

我认为您的实现如此缓慢有两个原因:首先,您等待每个数据包的确认 - 非常慢,您应该使用滑动窗口。其次,您使用 MD5 校验和。这并没有错,但是 TCP 已经实现了一些基本的校验和,而您使用的 MD5 实现可能会非常慢。

最后,找出为什么某些东西运行得很慢的典型方法是使用分析。

于 2012-12-28T08:33:34.900 回答