숫자가 의미를 갖도록 VPN 속도를 시험하는 방법
시험 서버를 고정하고, 하위 계층을 움직이지 않은 채로 두고, 지연을 처리량과 분리해서 읽는다. 터널은 무엇이든 측정하기 전에 경로를 바꾼다.
속도 시험은 VPN 자체를 측정하지 않는다. 경로를 측정하며, 터널을 켜면 첫 바이트가 움직이기 전에 그 경로의 일부가 바뀐다. 그래서 같은 노트북이, 양쪽 모두 아무것도 바뀌지 않았는데도, 한 사이트에서는 건강한 숫자를 다른 사이트에서는 나쁜 숫자를 보여 준다. 결과는 제품의 점수가 아니라 경로에 관한 증거로 읽어야 한다.
비교가 값을 갖는지는 두 번의 실행이 같은 목표에 닿았는지, 접속망이 가만히 있었는지, 지연을 용량과 함께 기록했는지, 이 세 가지로 결정된다.
터널이 첫 바이트 전에 다시 쓰는 것
클라이언트는 모든 패킷을 또 하나의 헤더로 감싸므로 패킷당 쓸 수 있는 페이로드가 줄어든다. 비용은 전송당이 아니라 패킷당으로 붙으므로, 큰 파일은 터널을 거치지 않은 같은 파일보다 더 많은 패킷을 필요로 한다. 이런 부가 비용은 눈에 보이는 설정이 아니라 패킷 수로 나타난다.
여기서 두 가지 결과가 나온다. 큰 블록으로 구성한 시험은 패킷당 비용을 느끼고, 많은 작은 요청으로 구성한 시험은 대신 왕복을 느낀다. 그리고 경로 MTU 탐색이 도중 어딘가에서 막혀 있으면 터널은 더 작은 패킷 크기에 자리 잡고, 암호 방식과 아무 관계 없는 이유로 처리량이 떨어진다.
상한은 직접 볼 수 있다. 리눅스에서 단편화 없이 통과하는 가장 큰 페이로드를 요청한 뒤, 터널을 켠 상태로 반복한다:
ping -M do -s 1472 -c 3 203.0.113.10
그것이 실패하면 1,400으로 내려서 다시 시도한다. 1,380바이트만 나르는 터널은 경로 더 아래에서 무언가가 조이고 있다고 말해 주며, 클라이언트 쪽 조정으로는 그것을 끌어올릴 수 없다.
터널이 켜지면 시험 서버가 옮겨 가는 이유
대부분의 도구는 자기가 보는 공인 주소를 기준으로 가까운 서버를 고른다. 터널이 켜져 있으면 그 주소는 출구 노드의 것이므로, 도구는 다른 도시나 다른 나라의 호스트를 고를 수 있다. 그러면 두 목적지를 비교하는 셈이고, 둘 사이의 차이에는 출구에서 시험 호스트까지의 거리가 포함된다.
첫 실행 전에 서버를 이름이나 ID로 고정하고, 그 뒤 모든 실행에서 유지한다. 도구가 유지하지 않으면 직접 통제하는 목표를 골라 직접 돌리는데, iperf3 -c test.example.net -R -t 20는 목적지를 고정하고 어제와 비교할 수 있는 숫자를 준다.
변수를 하나 바꾼다, 하위 계층은 하나가 아니다
무선이 늘 있는 숨은 변화로, 노트북이 움직이면 신호 세기가 달라지고 이웃이 통화를 시작하면 채널 점유가 달라진다. 그래서 Wi-Fi에서 십 분 간격의 두 실행은 같은 시험의 반복이 아니다. 유선으로 하거나, 신호 세기를 적어 둔 고정 위치를 쓰면 그 잡음의 대부분이 사라진다. 각 실행의 시작과 끝에 신호 세기를 적어 두는 것만으로도 두 실행이 함께 볼 만한지 보여 주기에 충분하다.
장치 부하도 같은 바구니에 들어간다. 한 코어에서 암호화하는 클라이언트는 링크보다 훨씬 먼저 자기 상한에 닿고, 백그라운드 동기화는 더 빨리 닿는다. 실행 중에 CPU를 보고 다른 무엇이 열려 있었는지 적어 둔다. 전원 설정도 여기서 물어뜯을 수 있는데, 배터리로 도는 노트북은 링크가 붐비기 한참 전에 프로세서를 제한할 수 있다.
| Measurement | What it answers | What it misses |
|---|---|---|
| Download | Bulk capacity along the path | Any question about responsiveness |
| Upload | Capacity from client to exit | Download health |
| RTT to a fixed target | Distance plus queueing | Whether capacity is available |
| Jitter or loss | Stability under load | How much the link can carry |
하위 계층을 평균 내지 말고 가만히 둔다. 일치하는 세 번의 실행은 서로 다른 방에서 잰 열 번보다 더 많은 것을 말해 준다.
지연, 손실, ICMP는 서로 다른 질문에 답한다
핑은 고정 주소로 작은 탐침을 보내고, 많은 망이 ICMP에 낮은 우선순위로 답하거나 아예 무시한다. 응답이 없는 것은 응용 프로그램의 패킷이 아니라 탐침을 설명한다. 부하에서 오르는 왕복 시간은 보통 대기열이 차고 있다는 뜻이지 경로가 길어졌다는 뜻이 아니다.
터널이 지연을 더하는지 알려면 한 목표를 터널이 있을 때와 없을 때 비교하거나 같은 접속망에서 닿는 두 출구를 비교하고, 탐침을 여러 번 돌려 흩어짐을 보라. 평균은 통화를 쓸모없게 만드는 바로 그 변동을 감춘다.
느리게 느껴졌던 작업으로 돌아간다
통화가 아직 끊기는데 숫자만 좋아지는 측정은 다른 질문에 답한 것이다. 조사의 발단이 된 작업을, 회의였든 파일 공유였든 원격 데스크톱 세션이었든, 다시 실행한다. 숫자는 좋아졌는데 작업이 좋아지지 않았다면 병목은 시험이 닿지 못한 곳, 예컨대 터널 뒤의 서버나 당신 쪽 업링크에 있었다.
모든 실행을 장치, 접속망, 끝점, 프로토콜, 목표, 시각과 함께 기록한다. 한 번도 연결되지 않은 실행은 처리량 제로가 아니라 도달성의 결과이므로, 지우지 말고 그 표시 아래에 둔다.
다음 비교 전의 짧은 목록
목표를 고정하고 왜 골랐는지 적는다. 경로가 허용하는 패킷 크기를 기록해 두면 나중의 하락에 설명이 붙는다. 접속망을 같게 유지하고 CPU 부하를 적고, 차이를 믿기 전에 세 번 실행한다.
그다음 정확히 한 가지만 바꾸고 반복한다. 설명할 수 있는 비교가 숫자가 더 큰 비교를 이긴다.