linux – 在3G等移动网络上,iPhone客户端的服务有哪些TCP调优技巧?

我是一个开发人员,他的设计网络服务很糟糕,iPhone客户端会非常努力. iPhone应用程序在过去一年的下载量超过了10MM,现在我将用户带到网上互相交流.

我想调整将承载基于TCP的网络服务的服务器的TCP实现.发送的每请求大小将是“小”(例如< 256字节).好吧,你明白了,这是一个游戏服务器(震惊!). 仅供参考,因为游戏不像quake一样,我对这个特定服务的UDP(或者在ENet和RakNet上看到的UDP上的可靠层)不感兴趣;必须可靠地接收所有数据包,这就是TCP的设计目标.因此,iPhone客户端和服务之间的连接将是“长期存在的”(尽可能地 – 隧道和电梯被诅咒!). 仅供参考,我在运行Linux 2.6.18-164.9.1.el5的服务器上以100Mbps的上行链路运行该服务.

我的目标是同时:

>尽可能降低延迟;和
>最小化每个连接客户端使用的内存量.

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

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

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

考虑TCP congestion control algorithms

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

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

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

在这里过得太深还是这个课程的标准?

您通常会调整哪些类型的TCP / IP?怎么样?有什么经验法则可以知道?

你对我的具体案例有什么智慧之言?

非常感谢!

解决方法

因此,正如您所知,TCP拥塞控制是一个非常复杂的领域.

对于这种特殊情况,由于请求较小,您将希望尝试尽可能地保持连接打开,因为每个请求一个连接将分别获取五个数据包,而您可以将平均值降低到如果你保持联系,那么两个以上的数据包.

NODELAY是游戏服务器的正确选择;你想要立即传送256个字节,而这不是一个整段,所以除非你使用NODELAY,否则Nagle会暂停.

如果您的服务器有大量内存,那么内存选项没什么大不了的,新内核就是正确的.

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

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

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...