2015-02-02 5 views
0

큰 사용자 기반의 네트워킹 서비스를 좀 더 잘 이해하고있어 내가 바쁜 프로젝트에 접근하는 방법을 알고 싶습니다. 내가 잘못 될 수 있도록하지만 그들은 아직도 내가 물어보고 싶은 질문으로 이어질서버에 대한 영구 연결이 너무 많습니다. 그게 옳은가?

다음 문 ...

스카이프와 TeamViewer를 클라이언트를 고려하시기 바랍니다. 두 가지 모두 영구적 인 네트워크 연결을 각각의 서버에 개방 된 상태로 유지하는 것으로 보입니다. 그들은이 지속적인 연결을 사용하여 추가 연결을 시작합니다. 이러한 연결 중 일부는 클라이언트가 NAT 뒤에있는 경우 구멍 펀칭을 통해 만들어집니다. 그런 다음 직접 피어 - 투 - 피어 통신에 사용됩니다.

이제 http://expandedramblings.com/index.php/skype-statistics/에 따르면 Skype를 사용하는 사용자는 3 억 명이며 일일 활성 사용자는 490 만 명입니다. 나는 그 4.9 백만명의 사용자의 대부분은 대부분의 클라이언트 응용 프로그램을 대부분의 시간을 실행해야한다고 가정합니다. 이는 특정 시점에 열려있는 Skype 서버에 대한 많은 연결입니다.

내 질문에; 가능한가 아니면 적어도 받아 들일 수 있는가? 즉 유휴 상태에서 네트워크 연결을 열지 않는 것이 좋으며, 특히 서버에 많은 연결이 동시에 열려있는 경우에는 더 좋지 않습니까? 내가 생각할 수있는 유일한 이유는 홀 펀칭을 제대로하는 유일한 방법 일 뿐이라는 것입니다. 기술적으로 이것은 서버 측에서 어떻게 이루어 집니까?

+1

Skype는 수백만 개의 연결을 가진 * 하나의 서버라고 생각하는 것 같습니다. Skype * 서비스 *는 많은 * 서버에서 호스팅됩니다. 영구 연결은 NAT 뒤의 클라이언트에서 작동 할 수있는 유일한 방법입니다. –

+0

@ricky. :) 아니, 나는하지 않는다. 다행히도. 어둠 속에서도 얼마나 많은 서버를 사용할지 모르지만 설치 과정의 복잡성을 이해하기가 더 쉽습니다. 수백 또는 그 이상의 서버를 사용하는 경우 열린 커넥션은 모두 의미가 있지만 수십 (<100)이면 열려있는 많은 연결을 처리하기 위해 서버에 부담이됩니다. 적어도 그것이 내가 생각할 것입니다. –

+0

* @ * * 교차 게시 –

답변

1

실현 가능합니까 아니면 수용 할만합니까?

실현 가능합니다. 이미 인기있는 앱 두 가지를 언급 ​​했으므로 실제로는 매우 실용적입니다.

허용 가능한 한, 인터넷 권한 (예 : IETF)을 시작하지 않으면 트래픽이 적음에도 오래 지속되는 연결을 유지하는 것이 용납 될 수 없다고 말한 적이 있습니다.

또한 중요한 것은 연결/흐름 상태를 유지하는 네트워크 요소뿐입니다. 이는 엔드 포인트와 NAT 및 방화벽과 같은 중간 박스라고 할 수 있습니다. 클라이언트의 경우 이것은 하나의 연결 일 뿐이므로 서버는 일반적으로 응용 프로그램 개발자 (이 선택을 한 사람)가 직접 조정하므로 일반적으로 허용됩니다. 중간 상자의 경우 간단합니다. 선택의 여지가 없습니다. 수명이 긴 영구 연결을 포함하여 모든 종류의 흐름으로 작동하도록 설계되었습니다.

유휴 상태에서 네트워크 연결을 열지 않는 것이 좋으며 특히 서버에 많은 연결이 동시에 열려있는 경우에는 더 좋지 않습니까?

전혀 아닙니다. 우선, 각 제어 평면 호출 전에 전체 연결을 설정해야하므로 '많이'느려질 수 있습니다. RTT가 크거나 부하 분산/지역화를 위해 서버가 복잡한 연결 프록 싱/리다이렉션을 수행하는 경우 특히 그렇습니다.

다음으로 이것은 거대한 양의 사용자에게 걸려온 전화를 역사적으로 어렵게 만듭니다. 많은 ISP가 방화벽을 통해 인터넷에서 알 수없는 들어오는 연결을 차단/차단합니다. 마찬가지로, UPnP 나 PCP를 지원하지 않는 NAT 장치 뒤에 있다면 공용 IP 주소를 수신 대기 할 포트를 열 수 없습니다. 따라서 구멍 펀칭과는 별도로 필요합니다.

제가 생각할 수있는 유일한 이유는 홀 펀칭을 제대로 수행 할 수있는 유일한 방법 일 것입니다.기술적으로이 방법은 서버 측의 에서 어떻게 이루어 집니까? 는 NAT 장치가 경기 흐름 전체 <src-ip,src-port,dest-ip,dest-port,protocol> (고전 5 튜플)을 유지으로

기술적으로 당신은 즉시 적절한 펀칭을 할 수 없습니다. 그런 다음 '구멍 펀치'로 할 수있는 최선의 방법은 동료 간의 프록시 설정입니다.

구멍 펀칭은 NAT 흐름 조회가 업스트림이 <src-ip,src-port,protocol>이고 업스트림이 <dest-ip,dest-port,protocol> 일 뿐이므로 번역을 수행해야합니다. 이 경우 두 클라이언트가 서버에 연결하기 만하면 IP 및 포트가 변환되고 서버는이를 다른 클라이언트에 전달합니다. 이제 다른 클라이언트는 NAT가 서버의 IP/포트를 무시하기 때문에 작동해야하는 변환 된 <ip,port> 조합으로 패킷 전송을 시작할 수 있습니다. 그러나 특정 NAT가 이와 같이 작동하더라도 일부 보안 장치 (예 : 상태 보존 형 방화벽)가 세션 하이킹을 감지하여이를 중단시킬 수 있습니다.

요즘에는 UPnP를 사용하여 공개 IP에서 수신 대기하는 포트를 열어 지원하기가 훨씬 쉽습니다.

+0

좋은 설명 주셔서 감사합니다. 매우 감사 –

관련 문제