본문으로 건너뛰기

네트워크 장애 ​

네트워크 장애 화면은 클라이언트와 그것이 통신하는 대상 사이에 앉는 릴레이를 실행하여, 양방향으로 지나가는 것을 열화합니다: 나쁜 Wi-Fi, 모바일 링크, 위성 홉, 끊기는 링크입니다. 손에 없는 네트워크에서 클라이언트와 장치가 어떻게 동작하는지 보려면 사용하십시오.

클라이언트를 실제 대상 대신 릴레이로 향하게 합니다. 릴레이는 각 데이터그램이나 스트림에 프로필이 말하는 것을 한 뒤, 모든 것을 대상으로, 답을 다시 클라이언트로 전달합니다. 실행 중에도 포트를 끊지 않고 프로필을 바꿀 수 있습니다.

릴레이 시작하기 ​

  1. 프로토콜을 고릅니다: 데이터그램에는 UDP(OSC, 대부분의 쇼 제어와 센서 트래픽), 스트림에는 TCP(HTTP, MQTT, TCP 장치)입니다.
  2. 수신 주소을 설정합니다: 릴레이가 수신하는 IP:port입니다. 0.0.0.0:9010은 네트워크의 트래픽을 받고, 127.0.0.1:9010은 이 컴퓨터에서 오는 것만 받습니다.
  3. 대상을 설정합니다: 실제 목적지의 IP:port, 또는 device.local:9000 같은 호스트 이름과 포트입니다.
  4. 프리셋을 고르거나 프로필의 값을 설정합니다.
  5. 릴레이 시작를 누릅니다.
  6. 클라이언트를 대상 대신 릴레이의 포트로 향하게 합니다 — 예를 들어 127.0.0.1:9000 대신 127.0.0.1:9010입니다.

릴레이 중지는 릴레이를 닫습니다. 아직 붙잡고 있던 것은 그 뒤로 나가지 않습니다.

기본값: UDP, 수신 0.0.0.0:9010, 대상 127.0.0.1:9000, 지연 40 ms, 지터 15 ms, 손실 2 %.

수신 주소은 바인딩할 주소이며 항상 IP:port입니다. 대상의 호스트 이름은 OSC 대상처럼, 릴레이 시작를 누를 때 한 번 조회됩니다. 찾을 수 없는 이름은 거부되고 릴레이도 시작하지 않습니다. 프로토콜, 수신 주소, 대상은 릴레이가 실행 중일 때 고정됩니다. 바꾸려면 멈추십시오.

text
client ──► relay (0.0.0.0:9010) ──► target (127.0.0.1:9000)
client ◄── relay ◄───────────────── target

UDP ​

릴레이는 각 데이터그램을 자신의 포트에서 대상으로 보내고, 대상이 답한 것을 클라이언트로 다시 보냅니다. 각 데이터그램은 도착할 때 정해진 자신의 운명을 만납니다.

답은 가장 최근에 데이터그램을 보낸 클라이언트로 갑니다: 릴레이는 한 번에 한 클라이언트를 상대합니다.

TCP ​

클라이언트가 릴레이에 만드는 각 연결은 릴레이 자신이 대상에 만든 새 연결과 이어집니다. 각 연결의 두 스트림 — 클라이언트에서 대상으로, 대상에서 클라이언트로 — 은 릴레이가 읽는 대로(한 번에 최대 16 KiB) 청크 단위로 열화됩니다. 스트림은 지터와 무관하게 항상 순서대로 도착합니다.

대상이 연결을 거부하면 클라이언트의 연결이 재설정됩니다.

프로필 ​

릴레이가 양방향에 적용하는 값들입니다. UDP 릴레이는 데이터그램의 값을, TCP 릴레이는 스트림의 값을 읽으며, 나머지는 숨겨집니다.

UDP에서 ​

값하는 일범위
오프라인 — 아무것도 통과하지 않음체크를 풀 때까지 양방향으로 모든 데이터그램이 버려집니다.켜기 / 끄기
지연 시간모든 데이터그램에 더해집니다.0–1000 ms
지터데이터그램마다 0부터 이 값까지의 임의 추가 지연 — 그래서 데이터그램이 순서를 벗어나 도착할 수 있습니다.0–500 ms
패킷 손실결코 도착하지 않는 데이터그램의 비율, 각각 따로.0–100 %
버스트 손실데이터그램이 손실 폭주를 시작할 확률: 흩어진 손실과 달리 잠시 끊기는 링크입니다.0–20 %
버스트 길이, 데이터그램폭주가 평균 몇 개의 데이터그램을 잃는지. 버스트 손실가 0보다 클 때 표시되며, 처음 올리면 5입니다.1–1000
중복두 번 전달되는 데이터그램의 비율.0–100 %
손상한 바이트의 한 비트가 뒤집히는 데이터그램의 비율.0–100 %
순서 바뀜지연으로, 적어도 20 ms만큼 붙잡혀 뒤따르는 것들이 먼저 도착하게 되는 데이터그램의 비율.0–100 %
대역폭, kbit/s초당 킬로비트 단위의 대역폭 제한이며, 0은 없음입니다. 데이터그램은 이 속도로 링크를 위해 줄을 서고, 1초 넘게 기다려야 할 것은 throttled로 버려집니다.0, 또는 8–10 000 000

폭주는 이렇게 동작합니다: 폭주 중이 아닌 데이터그램이 버스트 손실 확률로 폭주를 시작하고, 폭주 중의 모든 데이터그램은 손실되며, 각각은 버스트 길이, 데이터그램분의 1 확률로 폭주를 끝내므로, 폭주는 평균 그만큼의 데이터그램 동안 지속됩니다.

데이터그램은 이 순서로 결정됩니다: 오프라인, 폭주, 손실, 대역폭, 그다음 각 사본에 대해 중복, 손상, 지연, 재정렬입니다.

TCP에서 ​

값하는 일범위
오프라인 — 아무것도 통과하지 않음체크를 풀 때까지 양방향으로 아무것도 흐르지 않고 새 연결이 대상을 기다립니다 — 그러면 모두 이어집니다.켜기 / 끄기
지연 시간양방향으로 스트림의 모든 청크에 더해집니다.0–1000 ms
지터청크마다 0부터 이 값까지의 임의 추가 지연 — 앞의 청크보다 앞서지는 않습니다.0–500 ms
연결 리셋지나가지 않고 자기 연결을 재설정하는 청크의 비율: 클라이언트와 대상 모두 재설정을 받습니다.0–100 %
반개방자기 연결을 반열림으로 남기는 청크의 비율: 양방향으로 더는 아무것도 지나가지 않고, 어느 쪽도 통지받지 않습니다. 릴레이는 멈출 때까지 양쪽을 건드리지 않고 열어 둡니다.0–100 %
대역폭, kbit/s각 연결의 각 스트림에 대한 초당 킬로비트 단위의 대역폭 제한이며, 0은 없음입니다. 1초 분량의 큐를 넘으면 릴레이가 읽기를 멈추므로, 느린 링크에서처럼 보낸 쪽이 느려집니다. 아무것도 버려지지 않습니다.0, 또는 8–10 000 000

손실, 폭주, 중복, 손상, 재정렬은 TCP에 적용되지 않습니다: 실제 TCP 스트림은 잃은 것을 재전송하고 스스로 순서를 맞추므로, 나쁜 링크에서 클라이언트가 만나는 것은 지연, 느린 보낸 쪽, 재설정, 그리고 응답을 멈추는 연결입니다.

TIP

슬라이더는 지연 1000 ms와 지터 500 ms에서 멈춥니다. 릴레이 자체는 예를 들어 실험 파일에서 각각 최대 60 000 ms까지 받습니다.

프리셋 ​

프리셋은 한 번의 클릭으로 모든 값을 설정합니다. 값이 아직 프리셋의 것인 동안 칩에 불이 들어와 있고, 아무 값이나 바꾸면 꺼집니다.

프리셋UDP에서TCP에서
LAN1 ms ±11 ms ±1
혼잡한 Wi-Fi20 ms ±30, 손실 1 %, 폭주 1 % × 3, 중복 0.5 %, 재정렬 2 %20 ms ±30
4G60 ms ±25, 손실 0.5 %, 재정렬 0.5 %, 20 000 kbit/s60 ms ±25, 20 000 kbit/s
위성300 ms ±30, 손실 1 %, 2000 kbit/s300 ms ±30, 2000 kbit/s
간헐적30 ms ±20, 폭주 3 % × 1530 ms ±20, 청크의 0.2 % 반열림 유지
오프라인아무것도 지나가지 않음아무것도 흐르지 않음

실행 중에 바꾸기 ​

릴레이가 실행 중일 때 아무 값이나 바꾸거나 다른 프리셋을 고르십시오: 마지막 변경 4분의 1초 뒤에, 포트나 연결을 끊지 않고 적용됩니다. 콘솔은 새 프로필마다 기록하고, 실시간 아래의 줄이 릴레이가 지금 무엇을 하는지 — 프리셋의 이름, 또는 60 ms ±25 · loss 2% · 20000 kbps처럼 값들을 짧게 — 말합니다.

데이터그램이나 청크는 도착할 때 시행 중인 프로필로 결정됩니다. 이미 가고 있는 것은 자기 지연을 유지합니다.

카운터 ​

실시간는 릴레이가 시작된 이후 한 일을 양방향 합쳐 보여 주며, 초당 네 번 갱신됩니다.

UDP에서:

카운터내용
수신릴레이에 도달한 데이터그램.
전달됨계속 보낸 데이터그램. 중복된 것은 두 번 셉니다.
폐기됨일부러 잃음: 오프라인, 폭주, 또는 손실.
대역 제한됨대역폭 제한으로, 또는 이미 10 000개가 가고 있었기 때문에 버려짐.
중복됨두 번 보낸 데이터그램.
손상됨비트가 뒤집힌 사본.
순서 바뀜뒤의 것들이 앞질러 가도록 붙잡힌 사본.
전송량계속 보낸 바이트.

TCP에서:

카운터내용
연결클라이언트가 릴레이에 만든 연결.
수신릴레이가 양방향으로 읽은 청크.
전달됨계속 쓴 청크.
리셋재설정된 연결.
반개방반열림으로 남은 연결.
대기됨스트림이 대역폭 제한을 기다린 횟수: 보낸 쪽이 느려졌고 아무것도 버려지지 않았습니다.
전송량계속 쓴 바이트.

캡처가 켜져 있으면 인스펙터가 중계된 데이터그램과 청크를 보여 줍니다 — 양방향을 합쳐 25 ms마다 최대 하나 — 각각 그 운명과 함께: forwarded +43ms, · corrupted, · reordered, · copy 2/2, dropped (loss), dropped (burst), dropped (offline), throttled, 그리고 TCP에서는 reset과 half-open. →는 클라이언트에서 대상으로, ←는 대상에서 클라이언트로입니다.

중계된 프레임은 실제 소켓을 지목합니다: 로컬은 릴레이가 수신하는 주소이고 피어는 그 데이터그램이나 청크가 가고 있던 곳입니다 — 대상, 또는 답이 돌아간 클라이언트입니다. 이 다리가 판정을 끝맺습니다: forwarded +43ms · client→target, dropped (loss) · target→client. 그래서 중계된 데이터그램은 신호로 저장로 보관할 수 있고 가고 있던 주소를 향합니다. TCP 청크는 스트림의 한 조각이라 그럴 수 없습니다(인스펙터 참고).

같은 트래픽, 같은 운명 ​

모든 결정 — 어느 데이터그램이 잃히고, 얼마나 지연되고, 어디가 손상되는지 — 은 릴레이의 시드에서 뽑아지며, 각 방향에 대해, 그리고 TCP에서는 각 연결에 대해 따로입니다. 같은 시드와 같은 트래픽이면 릴레이는 같은 데이터그램을 버리고 같은 방식으로 지연합니다.

네트워크 장애 화면은 릴레이를 시작할 때마다 새 시드를 씁니다. 실행을 정확히 반복하려면 실험에서 네트워크 장애 노드를 사용하십시오: 실행의 시드에서 뽑으며, 시드를 고정할 수 있습니다(결함 있는 실행 반복하기 참고).

실험에서 ​

두 노드가 같은 릴레이를 실험에 넣습니다:

  • 네트워크 장애는 첫 단계 전에 릴레이를 열고 실행이 끝나면 — 어떻게 끝나든 — 닫습니다. 그 수신 주소와 대상 주소는 매개변수만 받으며, 대상은 호스트 이름일 수 있고 실행이 시작될 때 조회됩니다. 노드를 참고하십시오.
  • 장애 변경는 그 단계부터 실행의 릴레이를 다른 프로필로 바꾸며 — 깨끗하게, 손실 있게, 오프라인으로, 다시 깨끗하게 — 실행의 보고서가 각 국면이 한 일을 셉니다. 노드를 참고하십시오.

OSC나 UDP 노드에서 네트워크 장애 경유는 네트워크 장애를 그 앞에 두고 노드를 릴레이로 향하게 합니다. 장애 주입을 참고하십시오.