AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 105421
Accepted
z8000
z8000
Asked: 2010-01-23 09:11:48 +0800 CST2010-01-23 09:11:48 +0800 CST 2010-01-23 09:11:48 +0800 CST

对于 iPhone 客户端在 3G 等移动网络上命中的服务,有哪些 TCP 调整技巧?

  • 772

我是一名开发人员,在设计网络服务方面有好有坏,这将受到 iPhone 客户端的严重打击。iPhone 应用程序在过去一年的下载量超过了 10MM,现在我让用户在线进行互动。

我想为将托管我的基于 TCP 的网络服务的服务器调整 TCP 实现。发送的每个请求大小将是“小”(例如 < 256 字节)。好吧,你明白了,它是一个游戏服务器(令人震惊!)。

仅供参考,我对这个特定服务的 UDP(或在 ENet 和 RakNet 中看到的 UDP 上的可靠层)不感兴趣,因为游戏不像 Quake;必须可靠地接收所有数据包,这就是 TCP 的设计目的。因此,iPhone 客户端和服务之间的连接将是“长期存在的”(尽可能多地——该死的隧道和电梯!)。

仅供参考,我在运行 Linux 2.6.18-164.9.1.el5 的服务器上以 100Mbps 上行链路运行该服务。

我的目标是同时:

  • 保持尽可能低的延迟;和
  • 最小化每个连接的客户端使用的内存量。

有大量与 TCP 相关的旋钮需要调整!经过一些基础研究后,似乎大多数人建议保持原样。但是,有许多设置似乎应该针对特定情况进行调整。我知道这有点模糊,这就是我寻求帮助的原因。

考虑调整片状网络上的小请求/响应同时尽可能减少内存的事情可能是:

  • TCP/IP 实现可用的内存
  • 设置“nodelay”选项(禁用 Nagle 算法,因为这是一个半实时游戏服务器)
  • 拥塞控制算法
  • 等等(还有什么?)

考虑 TCP拥塞控制算法:

  • reno:几乎所有其他操作系统都使用的传统 TCP
  • 立方:CUBIC-TCP
  • bic:BIC-TCP
  • htcp:汉密尔顿 TCP
  • 维加斯:TCP 维加斯
  • westwood:针对有损网络进行了优化

我的服务器默认使用bic,其“目标是设计一种协议,该协议可以在高速长距离网络上将其性能扩展到每秒数十吉比特,同时保持强大的公平性、稳定性和 TCP 友好性。”

仅从微小的描述来看,Westwood听起来更贴切,因为它“旨在更好地处理大带宽延迟产品路径(大管道),由于传输或其他错误(泄漏管道)而导致潜在的数据包丢失,以及动态负载(动态管道)”。

我是不是太深入了,还是这门课程的标准杆?

你们通常为哪些类型的东西调整 TCP/IP?如何?有哪些经验法则需要了解?

对于我的具体情况,你有什么智慧之言?

非常感谢!

linux networking iphone tcpip performance-tuning
  • 1 1 个回答
  • 2078 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew McGregor
    2010-01-24T03:21:03+08:002010-01-24T03:21:03+08:00

    所以,正如您所发现的,TCP 拥塞控制是一个相当复杂的领域。

    对于这种特殊情况,由于请求很小,您将希望尽可能保持连接打开,因为每个请求的一个连接每个请求将占用五个数据包,而您可以将平均值降至如果您保持连接,则多于两个数据包。

    NODELAY 是游戏服务器的正确选择;您希望立即交付 256 字节,这不是一个完整的段,因此除非您使用 NODELAY,否则 Nagle 将暂停。

    如果您的服务器有大量内存,那么内存选项没什么大不了的,新内核就可以了。

    至于拥塞控制算法,您发现了 Westwood。另一种选择是立方。您可以只选择一个,也可以进行一些研究并对其进行基准测试。这可能是一项相当大的工作,但对于 1000 万客户来说,这是值得的。因此,我正在考虑在 Mac 或三台 Mac 上使用流量生成器运行模拟(因为它们具有与手机相同的 TCP 实现),中间的 Linux 机器充当路由器(稍后会详细介绍)和你的一台服务器,看看它是怎么回事。

    现在,中间的 Linux 机器应该运行ns-3,这样您就可以模拟一个比以太网交换机更复杂的路径。然后,您在 TCP 连接的发送端捕获一些数据包跟踪,并使用tcptrace或wireshark 的 tcptrace 图形模式对其进行分析。tcptrace 文档很好地介绍了分析 TCP 拥塞行为。

    • 3

相关问题

  • 更改 PHP 的默认配置设置?

  • 有什么软件可以模拟局域网?

  • 保护新的 Ubuntu 服务器 [关闭]

  • 带宽利用工具?[关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve