3G와 같은 모바일 네트워크에서 iPhone 클라이언트가 사용하는 서비스에 대한 TCP 튜닝 팁은 무엇입니까?

3G와 같은 모바일 네트워크에서 iPhone 클라이언트가 사용하는 서비스에 대한 TCP 튜닝 팁은 무엇입니까?

저는 iPhone 클라이언트에게 큰 타격을 줄 네트워크 서비스를 설계하는 좋은 상황과 나쁜 상황을 동시에 겪고 있는 개발자입니다. iPhone 앱은 작년에 천만 건이 넘는 다운로드를 기록했으며 이제 사용자들이 서로 상호 작용할 수 있도록 온라인으로 연결하고 있습니다.

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를 고려해보세요혼잡 제어 알고리즘:

  • reno: 거의 모든 다른 OS에서 사용되는 기존 TCP
  • 큐빅: CUBIC-TCP
  • 빅: BIC-TCP
  • htcp: 해밀턴 TCP
  • 베가스: TCP 베가스
  • westwood: 손실이 많은 네트워크에 최적화됨

내 서버의 기본값은 다음과 같습니다."목표는 강력한 공정성, 안정성 및 TCP 친화성을 유지하면서 고속 장거리 네트워크를 통해 성능을 초당 수십 기가비트까지 확장할 수 있는 프로토콜을 설계하는 것입니다."

소소한 설명부터,웨스트우드이는 "전송이나 기타 오류(누수 파이프)로 인한 잠재적인 패킷 손실 및 동적 부하(동적 파이프)가 있는 대규모 대역폭 지연 제품 경로(대형 파이프)를 더 잘 처리하기 위한 것"이기 때문에 더 적절하게 들립니다.

내가 여기에 너무 깊이 들어가고 있는 걸까요, 아니면 이 과정이 적절한 걸까요?

일반적으로 어떤 유형의 작업에 TCP/IP를 조정하시나요? 어떻게? 어떤 경험 법칙을 알아야 합니까?

나의 특별한 경우에 대해 어떤 지혜로운 말씀이 있습니까?

정말 감사합니다!

답변1

따라서 아시다시피 TCP 혼잡 제어는 매우 복잡한 영역입니다.

이 특별한 경우에는 요청이 적기 때문에 연결을 최대한 열어두려고 할 것입니다. 요청당 하나의 연결은 각각 5개의 패킷을 사용하지만 평균은 다음과 같이 낮출 수 있습니다. 연결을 계속 유지한다면 패킷이 두 개 조금 더 많아집니다.

NODELAY는 게임 서버에 적합합니다. 256바이트가 즉시 전달되기를 원하지만 이는 전체 세그먼트가 아니므로 NODELAY를 사용하지 않으면 Nagle이 일시 중지됩니다.

서버에 메모리가 많은 경우 메모리 옵션은 큰 문제가 아니며 새 커널에 적합합니다.

혼잡 제어 알고리즘에 관해서는 Westwood를 발견하셨습니다. 다른 옵션은 CUBIC입니다. 하나만 가지고 가셔도 되고, 조사를 해서 벤치마킹하셔도 됩니다. 이는 상당한 작업이 될 수 있지만 천만 고객에게는 그만한 가치가 있습니다. 그래서 저는 Mac 또는 세 대(휴대폰과 동일한 TCP 구현을 가지고 있기 때문에)에서 트래픽 생성기를 사용하여 시뮬레이션을 실행하려고 합니다. Linux 상자는 라우터 역할을 하고(자세한 내용은 곧 설명하겠습니다) 귀하의 서버 중 하나를 방문하여 어떻게 진행되는지 확인하세요.

이제 중간 Linux 상자가 실행되어야 합니다.ns-3따라서 단순한 이더넷 스위치보다 더 복잡한 경로를 시뮬레이션할 수 있습니다. 그런 다음 TCP 연결의 송신 측에서 일부 패킷 추적을 캡처하고 다음을 사용하여 분석합니다.tcptrace또는 Wireshark의 tcptrace 그래프 모드. tcptrace 문서는 TCP 정체 동작 분석에 대한 좋은 소개입니다.

관련 정보