단방향 네트워크 대기 시간 측정


20

이것은 내가 만든 네트워크 대기 시간 측정에 관한 퍼즐입니다. 해결책은 불가능하지만 친구들은 동의하지 않는다고 생각합니다. 어느 쪽이든 설득력있는 설명을 찾고 있습니다. (이 퍼즐은 NTP는 말할 것도없고 온라인 게임과 같은 통신 프로토콜의 디자인과 경험에 적용 할 수 있기 때문에이 웹 사이트에 적합하다고 생각합니다.)

아래 그림과 같이 단방향 대기 시간이 다른 네트워크로 연결된 두 개의 로봇이 두 개의 방에 있다고 가정합니다. 로봇 A가 로봇 B에 메시지를 보내면 로봇이 도착하는 데 3 초가 걸리지 만 로봇 B가 로봇 A에 메시지를 보내면 도착하는 데 1 초가 걸립니다. 지연 시간은 변하지 않습니다.

로봇은 동일하며 공유 시계가 없지만 시간의 경과를 측정 할 수 있습니다 (예 : 스톱워치). 그들은 로봇 A (메시지가 3 초 지연됨)이고 로봇 B (메시지가 1 초 지연됨)인지 알 수 없습니다.

왕복 시간을 발견하는 프로토콜은 다음과 같습니다.

whenReceive(TICK).then(send TOCK)

// Wait for other other robot to wake up
send READY
await READY
send READY

// Measure RTT
t0 = startStopWatch()
send TICK
await TOCK
t1 = stopStopWatch()
rtt = t1 - t0  //ends up equalling 4 seconds

편도 여행 지연을 결정하는 프로토콜이 있습니까? 메시지 전송 지연이 더 긴 로봇을 로봇이 발견 할 수 있습니까?

두 대의 로봇 하나의 비대칭 네트워크


5
참조 비대칭 지연과 네트워크에서 클럭 동기화를 (일반 인터넷 인프라와 무언가를 행할 요청). 나는 우리가 그 질문에 대한 잘못된 답변을 논의 할 때 본 것에서 당신의 질문에 대한 대답은 불가능하다는 것을 생각합니다.
Gilles 'SO- 악마 그만해라'

질문을 합쳐야합니까, 아니면 별개로 유지할만큼 목표가 달라야합니까?
Craig Gidney

아니요, 다른 질문입니다. 귀하의 질문은 메시지 전달만으로 2 대의 시스템에서 불가능하다는 것을 입증합니다. 클라이언트와 서버 간 경로의 일부 중간 링크에 사용 가능한 대기 시간 정보를 기반으로 한 솔루션을 원하며이 정보를 클라이언트에 전파 할 수있는 방법을 찾고 있습니다.
Gilles 'SO- 악마 그만'

3
이를 수행 할 방법이 있다면, 아인슈타인의 상대성 이론은 효과가 없을 것입니다. 왜냐하면 공간과 분리되어 있고 일방적 인 대기 시간을 알 수없는 두 관측자가 적절한 시간에 동의 할 수 없기 때문입니다.
피터 쇼어

NTP는 참으로 질 질문에 대답을 참조하십시오 자신의 시간 및 단지 송신 / 수신 자신의 MSG를 시간뿐만 아니라 MSG 내용을 통해 다른 서버를 추적하지 서로를 보내는 기계에 따라이 차동 지연을 측정 구현할 / 수 있습니까
vzn

답변:


14

내가 작성한 블로그 게시물 의 다음 다이어그램 은 불가능하다는 시각적 증거입니다.

대기 시간 비대칭에 의해 클록 왜곡을 정확하게 오프셋

단방향 대기 시간이 변경 되어도 음수가되는 경우에도 각 측의 패킷 도착 시간이 동일하게 유지됩니다. 첫 번째 패킷은 항상 서버 시계에서 1.5 초에 서버에 도달하고, 두 번째 패킷은 항상 클라이언트 시계에서 2 초에 클라이언트에 도달합니다. 패킷 내용과 로컬 도착 시간은 프로토콜의 기반이 될 수있는 유일한 것입니다 . 초기 클록 스큐를 변화시킴으로써 비대칭 성이 변하기 때문에 내용 및 도착 시간은 일정하게 유지 될 수있다.

기본적으로 단방향 대기 시간의 비대칭은 클럭 스큐와 정확히 같습니다. 문제는 초기 클럭 스큐 또는 단방향 레이턴시 비대칭성에 대해 알기 시작하지 않기 때문에 변화하는 것들은 다른 것을 변화시키는 것처럼 보이기 때문에 그 효과를 구별 할 수 없으므로 우리는 해결하기 위해 기여를 분리 할 수 ​​없습니다 단방향 대기 시간 비대칭. 그것은 불가능.

n1n1

해병

시각적으로 기울어지지 않았다면 또 다른 직관적 인 주장이 있습니다. 앞으로 백 년의 시간 포털을 상상해보십시오. 상대방과 대화를 나눌 때, 일방 지연으로 수백년의 비대칭에도 불구하고 대화가 완전히 정상임을 알 수 있습니다. 그 규모에서 관찰 가능한 모든 효과가 분명했을 것입니다!


이것에 대한 당신의 의견은 무엇입니까? software.internet2.edu/owamp
CMCDragonkai

@CMCDragonkai 퍼즐 문장은 현실보다 더 제한적이라는 것을 명심하십시오. 실제로 광섬유 라인의 길이 측정, 중간 지점에서의 로깅, 네트워크 토폴로지의 지식을 사용하여 한 장소에서 다른 장소로 천천히 시계를 운반하는 등의 옵션이 있습니다. 예를 들어 GPS 위성은 알려진 궤도에서 움직입니다. 풀 때이를 사용하여 자유도를 제거 할 수 있습니다. 따라서 표면에 단방향 핑 도구에 대한 문제는 없습니다. 단지 핑 도구 또는 의존하는 시계가 달콤한 달콤한 3 차 정보 중 일부를 악용하는 한.
Craig Gidney

이 경우 가능한 해결 방법으로 답변을 업데이트 할 수 있습니까?
CMCDragonkai

@CMCDragonkai 의견에 충분합니다. 그들은 퍼즐의 범위를 벗어납니다.
Craig Gidney

예를 들어 게임 네트워킹의 경우 단방향 대기 시간이 중요합니다. 또한 모두가 불가능하다고 말하지만 종이에 퍼즐을 쉽게 풀 수 있습니다. 클럭을 동기화하면 A의 시간을 B로 보내고 A-> B 지연을 같게하여 A에서 B로 지연을 측정하면됩니다 B's time - A's sent time. B-> A는latency - A->B delay
Llamageddon

1

나는 스톱워치를 비교하는 것만으로 단방향 대기 시간을 파악하는 것이 불가능하다고 생각합니다.

ABCA1
BCB1=1
ACA2=9
BCB2=5
AB

어쩌면 당신이 현상금 질문을하면 누군가가 그것을 금할 것입니다. 그때까지, kudos.


0

나는 어느 노드가 누구인지 (즉, 더 긴 메시지 지연을 가진) 노드를 발견하고 단방향 트립 지연을 추정하는 방법을 발견했습니다. 다른 답변은 정확하지만 직접 클럭 측정에 접근하는 것은 고려할 수 없습니다. 그러나 내가 여기에서 증명하는 것처럼 이것은 위의 작업 알고리즘과 마찬가지로 이야기의 일부 일뿐입니다.

실제 생활에서와 같이 가정하십시오.

  • 유한 대역폭 링크 b

  • 각 노드에는 고유 한 주소가 있습니다 (예 : A 및 B)

  • 대역폭 * 지연 시간 제품보다 훨씬 작은 패킷 크기 p

  • 노드 A와 B는 채널을 채울 수 있습니다

  • 노드에는 random () 함수가 있습니다

각 노드는 자체 패킷으로 채널을 채우거나 (각각 A 또는 B로 표시) 다음과 같이 다른 노드에서 수신 한 패킷을 전달합니다.

Always fill the channel with my own packets except:
if I receive a packet from another node then
   Randomly choose to 
          either forward that packet from the other node
          or discard that packet and forward my own packet

직관적 인 설명 A의 대역폭 * 지연 시간 제품이 높기 때문에 (지연 시간이 길기 때문에) A는 B보다 더 많은 패킷을 수신하게되므로 각 노드가 다이어그램에있는 사람을 알 수 있습니다 .

또한, 상기 알고리즘을 실행 하기에 충분한 수렴 시간 을 갖는 경우, A 대 B의 패킷의 비율은 A 대 B 의 RTT 지연의 실제 비율 및 따라서 원하는 OTT를 나타낼 것이다 .

시뮬레이션 결과 추적 위의 내용을 입증하고 A가 3 초 지연으로 수렴하고 B가 약 1 초 지연으로 수렴하는 방법을 보여주는 시뮬레이션이 있습니다.

시뮬레이션의 첫 번째 초

그 후 몇 초의 시뮬레이션

도면의 설명 : 각 라인은 1 초의 시간을 나타낸다 (명확성을 위해 1 초의 전송 시간을 갖도록 패킷 크기가 선택됨). 각 노드는 특정 순서 나 시간이 아닌 언제든지 알고리즘을 시작할 수 있습니다. 열은 다음과 같습니다.

  • NODE A 수신 : 노드 A가 수신 측에서 보는 것 (이것은 아래 P4이기도 함)

  • 노드 A가 주입 : 노드 A가 보내는 것 (이것은 A이거나 무작위로 A 또는 B입니다)

  • P1, P2, P3 : A와 B 사이에서 순서대로 전송되는 3 개의 패킷 (1 초 전송 수단은 3 개의 대기 시간 동안 3 개의 패킷이 전송됨을 의미)

  • NODE B 수신 : B가 수신 측에서 보는 것 (이것은 P3 임)

  • NODE B 주입 : B가 보내는 것 (이것은 B 또는 알고 당 무작위로 A 또는 B입니다)

  • P4 : B에서 A로 전송되는 패킷 (P1, P2, P3 참조)

  • A 카운트 A : A 패킷이 본 A 패킷의 개수

  • A 카운트 B : 본 A 패킷에 대해 어떤 A 카운트

  • B counts A : 본 A 패킷에 대한 B 계수

  • B counts B : 본 B 패킷에 대한 B 카운트

  • A-> B : A가 B에 대해 추정 한 대기 시간 (표시된 패킷을 기준으로 4 초의 RTT 비율)

  • B-> A : B가 A에 대해 추정 한 대기 시간 (표시된 패킷을 기준으로 4 초의 RTT 비율)

우리는 두 노드가 수렴하고 실제 대기 시간을 유지하는 것을 볼 수 있습니다 (실제로 우리는 수렴하는 데 더 많은 초가 필요하기 때문에 A에 대해서는 보이지 않지만 B와 동일한 동작을 수렴합니다)

더 나은 필터는 더 빨리 수렴 할 수 있지만 지연에 대한 올바른 값을 중심으로 어떻게 수렴되는지 명확하게 알 수 있으므로 지연을 정확히 알 수 있습니다 (심지어 그림에 대해서만 추정값을 표시하더라도).

또한 링크 간의 대역폭이 다른 경우에도 패킷 쌍을 사용하여 대역폭 추정치를 파악한 다음 위의 비례 방정식에 적용하여 위의 방법을 계속 유지할 수 있습니다 (더 확실하게 생각해야하지만).

결론 A와 B 모두 네트워크에서의 위치를 ​​알고 위 다이어그램의 다른 노드에 대한 대기 시간을 알 수있는 알고리즘을 제공했습니다. 우리는 재귀 클록 동기화 문제로 인해 실제로 솔루션을 이끌어 낼 수없는 클록 기반 접근 방식보다는 네트워크 측정 추정 방법을 사용했습니다.

참고 첫 번째 주석에서 볼 수있는 한 아무도 그것을 해결했다고 생각하지 않기 때문에 모든 시뮬레이션을 제공하는이 답변을 편집했습니다. 이 결과로 누군가가이 네트워크 측정 퍼즐에서 적어도 하나의 오류나 정확성을 찾도록 도와 줄 수있는 사람을 더 확신하고 승인 할 수 있기를 바랍니다.


3
나는 이것이 효과가 있다고 생각하지 않습니다. 대역폭이 동일하기 때문에 A와 B가 볼 수있는 유일한 차이점은 동시에 시작한 경우 B는 데이터를 수신하기 전에 3 초 동안 대기하고 A는 1 초 동안 대기한다는 것입니다. 그러나 그들은 공유 시계가 없으므로 동시에 시작했는지 알지 못합니다. 아마도 A는 프로토콜을 먼저 실행하기 시작했기 때문에 10 초 동안 아무 소리도 들리지 않을 것입니다.
David Richerby 2014

누구나 언제라도 시작할 수있는 동시에 시작할 필요는 없으며 둘 다 얼마 동안 만 실행하면됩니다. 시간을내어 검토해 주셔서 감사하지만 다시 읽어 보시기 바랍니다. 이것은 통계적 방법이며 수렴과 관련이 있습니다. 나는 100 %라고 말하지는 않지만 시뮬레이션하지 않았기 때문에 절대적으로 정확하지만 의견은 실제로 내 의견에 적용되지 않습니다. 어쩌면이 더 일반적으로 아이디어를 설명 : 당신이 다음 하나 개의 링크는 실제로 더 많은 패킷을 포함 대역폭 * 지연 제품은 두 개의 링크에 대한 다른 동의 경우 - 그 위 너 한테에 의해 감지 할 수있다 ...
user3134164

나는 내가 잘못 이해했다고 생각하지 않지만 가능합니다. 대역폭이 동일하므로 A와 B가 모두 동일한 속도로 데이터를 수신한다는 데 동의하십니까? 그렇다면 둘 다 정확히 같은 것으로 수렴하지 않습니까?
David Richerby

예, 물론 그들은 같은 속도로받습니다. 그렇다고해서 같은 것으로 수렴한다는 의미는 아닙니다. 네트워크에 A와 B 패킷이 있는데, 문제는 A와 B 패킷의 비율이 무엇인지입니다. 나는 지금 간단한 시뮬레이션을 실행했고 항상 편견을 얻습니다. 내가 여기에 모든 것을 게시 할 수 없다고 생각하기 때문에 아이디어를 얻으려면 b는 1 패킷이 1 초 전송하는 것으로 가정합니다. 그런 다음 항상 4 개의 패킷이 전송됩니다. 통계적 수렴 방법으로는 작동하지 않는 동기화 된 시계 / 이벤트 방법을 피함으로써 우리가 관리 한 알고리즘 및 붐을 적용하십시오!
user3134164

“A와 B의 패킷 비율”은 무엇입니까?
Gilles 'SO- 악의를 멈춰라'

0

이것은 @ user3134164에 대한 답변이지만 댓글에 비해 너무 큽니다.

PxxRxx

  • R1=(1R2)×(1P2)R2=(1R1)×(1P1)1R21P2
  • R1R2R11R1R21R2

이것이 내가 당신을 아무데도 이끌 수 없다고 믿는 이유입니다. 이 추론 중에 내가 저지른 실수를 지적하십시오.


컴퓨터 과학에 오신 것을 환영합니다 ! 귀하의 답변은 훌륭해 보이지만 실제로는 @ user3134164의 발언에 대한 깊이있는 주석입니다. 난 당신이 다음과 같은 방법으로 1)이되도록 답변 확장하는 시도에서이 문제를 해결할 수 있다고 생각 또한 실제 질문에 대한 답변을. 또는 2) 본질적으로 user3134164의 의견과 이와 유사한 답변으로 자기 답에서 핵심적인 오해를 나타내는 새로운 질문 을 만듭니다 . 어느 것이 적합한지는 당신에게 달려 있습니다. 아마도 새로운 질문을하는 것이 좋은 생각이라고 생각하지만 생각보다 더 확장 할 수있을 것입니다. 추가 질문이 있는지 물어보십시오.
이산 도마뱀

물론 @ user3134164는 의견을 질문에 자유롭게 홍보 할 수도있다.
Discrete lizard

"Px 로봇 x가 다른 로봇의 패킷 중 하나를 수신 할 때 자체 패킷을 선택할 확률"은 가정에서와 같이 컴퓨터 random () 함수에서 비롯됩니다. 예를 들어 두 종류의 패킷의 경우 항상 0.5입니다. random () 함수가 충분히 균일하면 "A 대 B의 RTT 지연의 실제 비율"을 계산할 수 있습니다. R 정의에 따르면 R1 = (1-R2) * 0.5라고 생각하므로 비율을 알 수 있습니다. 그래서 나는 여전히 내 대답이 잘 작동한다고 생각합니다. 시간을내어 조사해 주셔서 감사합니다.
user3134164
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.