이 글은 서비스 제공업체로부터 Hysteria2 파라미터를 받아 연결 동작을 이해하고 수동 설정하려는 Shadowrocket 사용자를 대상으로 합니다. QUIC의 핸드셰이크와 패킷 손실 복구, 적합한 네트워크 판단, Add Server 항목 확인, Global Routing 연동, 연결 실패 시 점검 순서를 다룹니다.
Hysteria2, UDP, QUIC의 관계
Shadowrocket의 Hysteria2는 QUIC 기반 프록시 프로토콜입니다. 여기서 UDP는 QUIC 데이터그램을 전달하는 전송 기반이고, QUIC는 사용자 공간에서 연결 수립, 암호화, 혼잡 제어, 데이터 확인, 패킷 손실 복구를 처리합니다. Hysteria2를 ‘UDP를 그대로 전송하는 방식’으로 단순화해서는 안 됩니다. 애플리케이션 데이터는 먼저 Hysteria2 세션으로 들어간 뒤 QUIC에 의해 암호화되고 번호가 부여된 패킷으로 구성됩니다.
기존 TCP 암호화 연결은 일반적으로 TCP 핸드셰이크와 TLS 핸드셰이크를 차례로 완료해야 합니다. 왕복 지연 시간 RTT가 180ms인 회선을 예로 들면, 상대방의 응답을 기다리는 왕복이 한 번 추가될 때마다 첫 유효 데이터까지 약 180ms를 더 기다리게 됩니다. QUIC는 전송 계층 연결 수립과 TLS 1.3 보안 협상을 결합하므로 새 연결도 더 적은 왕복으로 데이터 전송 상태에 진입하는 경우가 많습니다. 실제 시간은 도메인 확인, 서버 응답, 무선 네트워크 스케줄링, 회선 혼잡의 영향을 받으므로 특정 밀리초만큼 항상 줄어드는 것은 아닙니다.
QUIC는 여러 논리적 stream도 지원합니다. 특정 데이터 패킷이 손실되면 해당 패킷 내용이 필요한 stream은 재전송을 기다리지만, 손실된 데이터에 의존하지 않는 다른 stream은 계속 진행할 수 있습니다. 이를 통해 stream 간 헤드 오브 라인 블로킹을 줄일 수 있습니다. 다만 하나의 stream에 연속 데이터가 캡슐화된 경우 누락된 바이트는 여전히 복구해야 하므로, ‘QUIC 사용’이 패킷 손실의 영향을 완전히 받지 않는다는 뜻은 아닙니다.
- UDP: 데이터그램을 전달하며, 순서·재전송·신뢰성 있는 도착을 자체적으로 보장하지 않습니다.
- QUIC: UDP 위에서 암호화 연결, 확인 응답, 재전송, 혼잡 제어와 여러 stream을 구현합니다.
- Hysteria2: QUIC로 클라이언트와 서버 사이의 세션을 만들고, 해당 세션을 통해 프록시 트래픽을 전송합니다.
- Shadowrocket: Address, Port, Password, SNI 등의 설정을 읽어 Hysteria2 연결을 시작하고 Global Routing에서 사용합니다.
높은 지연과 패킷 손실 환경에서 더 빠를 수 있는 이유
속도 차이는 프로토콜 이름 자체보다 혼잡 제어와 패킷 손실 복구에서 주로 발생합니다. 회선에서 패킷 손실이 생기면 송신 측은 도착하지 않은 데이터를 판단하고 재전송을 예약하며 이후 전송 속도를 조절해야 합니다. RTT가 높을수록 잘못된 판단이나 확인 응답 대기의 비용이 커지고, 연속 손실이 많을수록 사용 가능한 처리량이 쉽게 떨어집니다. QUIC는 사용자 공간에서 확인 범위와 손실 타이머를 관리하므로 전략을 빠르게 개선할 수 있지만, 최종 처리량은 서버 출구, 기기 성능, 접속 네트워크의 제약을 받습니다.
Hysteria2 설정에는 업로드 및 다운로드 대역폭 값이 포함될 수 있습니다. 이 값은 속도 측정 결과가 아니며, 클수록 좋은 것도 아닙니다. 일부 구현은 대역폭 파라미터 제공 여부에 따라 혼잡 제어 동작을 선택합니다. 서비스 제공업체가 명확한 수치를 제시했다면 원래 값 그대로 입력하고, 비워 두라고 안내했다면 인터넷 요금제의 표시 속도를 근거로 임의 입력하지 마세요. 실제 회선이 50 Mbps인데 500 Mbps로 입력하면 전송이 과도하게 빨라져 큐가 늘어나고 지연이나 패킷 손실이 증가할 수 있습니다.
대역폭-지연 곱은 다음 계산으로 이해할 수 있습니다. RTT가 200ms인 100Mbps 회선은 파이프라인에 약 2.5MB의 데이터를 동시에 담을 수 있습니다. 100,000,000bit/s × 0.2s ÷ 8로 계산한 값입니다. 전송 창이 이보다 훨씬 작으면 회선을 충분히 활용하지 못할 수 있고, 반대로 너무 빠르게 보내 중간 큐 용량을 초과하면 대기와 패킷 손실이 발생합니다. Hysteria2의 성능은 혼잡 제어가 현재 회선의 실제 용량에 얼마나 가깝게 맞춰지는지에 따라 달라집니다.
원래 파라미터 그대로 입력
권장Address, Port, Password, SNI, 대역폭 및 인증 옵션은 모두 사용자가 보유한 설정을 기준으로 하며, 누락된 값을 임의로 추측하지 않습니다.
적합: 처음 추가할 때와 일상 사용
선택 항목은 비워 두기
서비스 제공업체가 기본 혼잡 제어 사용을 명시했거나 대역폭 값을 요구하지 않는다면 해당 선택 항목은 비워 둡니다.
적합: 설정 안내에 기본값이 명확히 표시된 경우
대역폭 값을 임의로 높이기
실제 접속 성능을 초과하는 값을 입력하면 큐 대기가 심해질 수 있으며, 이 결과만으로 프로토콜 자체의 정상 여부를 판단할 수 없습니다.
적합: 제어 가능한 네트워크에서 파라미터를 검증할 때만
결론: 먼저 회선 병목을 확인한 뒤 파라미터를 조정하세요
Connectivity Test의 지연이 안정적이지만 대용량 전송이 불안정하다면 먼저 서비스 제공업체가 제시한 대역폭 항목과 UDP 연결 가능 여부를 확인하세요. 한 번의 속도 결과만 보고 Up, Down 또는 유사한 항목의 값을 반복해서 높이지 마세요.
Hysteria2를 사용하기에 적합한 네트워크 환경
Hysteria2는 RTT가 높거나 간헐적인 패킷 손실이 발생하거나 네트워크 전환이 잦은 회선에서 자주 사용됩니다. 예를 들어 모바일 네트워크의 신호 변화, 지역 간 전송, 혼잡 시간대에는 기존의 신뢰성 있는 전송 방식이 긴 복구 대기를 겪을 수 있습니다. QUIC는 손실된 패킷을 복구하고 네트워크 상태가 허용하는 동안 여러 stream을 진행할 수 있으므로, 이런 환경에서 연결 수립과 지속적인 전송 성능의 차이가 더 쉽게 나타납니다.
지연과 패킷 손실이 낮고 경로가 안정적이면 모든 프로토콜의 병목이 서버 출구나 접속 대역폭에 생길 수 있어 Hysteria2가 뚜렷한 속도 차이를 만들지 않을 수 있습니다. 현재 네트워크가 UDP를 제한한다면 QUIC 핸드셰이크가 바로 timeout될 수 있지만, 다른 전송 방식을 사용하는 기존 설정은 연결될 수 있습니다. 프로토콜은 이론적 처리량보다 연결 가능 여부와 파라미터 일치를 우선해 선택해야 합니다.
| 관찰되는 현상 | 가능한 의미 | 권장 조치 |
|---|---|---|
| RTT 150–250ms, 간헐적인 1%–3% 패킷 손실 | 장거리 또는 무선 회선의 변동 | 원래 파라미터로 Hysteria2를 테스트하고 Connectivity Test 결과를 여러 차례 기록합니다. |
| 지연은 안정적이지만 전송 중 크게 증가함 | 큐 혼잡 또는 대역폭 값이 너무 높게 설정됨 | 서비스 제공업체가 제시한 Up, Down 값으로 되돌리고 표시 대역폭에 맞춰 높이지 않습니다. |
| 항상 timeout으로 표시됨 | UDP에 연결할 수 없거나 Port가 잘못되었거나 핸드셰이크 항목이 일치하지 않음 | UDP를 허용하는 것으로 확인된 네트워크에서 다시 테스트한 뒤 Port, SNI, Password를 확인합니다. |
| 연결 후 일부 도메인만 비정상임 | 규칙 또는 DNS 경로 문제일 수 있음 | Global Routing을 확인하고 Proxy 상태에서 잠시 비교합니다. |
결론: timeout이면 먼저 UDP 연결 가능 여부를 확인하세요
같은 설정이 한 네트워크에서는 연결되지만 다른 네트워크에서 계속 timeout된다면 현재 네트워크에서 UDP와 대상 Port에 연결할 수 있는지 먼저 확인합니다. 모든 네트워크에서 실패할 때는 항목 확인으로 돌아갑니다.
Shadowrocket에서 Hysteria2 수동 입력하기
시작하기 전에 서비스 제공업체가 제공한 전체 파라미터를 준비해야 합니다. 일반적으로 최소한 서버 Address, Port, 인증 정보가 필요하며 TLS 환경에서는 SNI가 추가될 수 있습니다. 일부 설정에는 ALPN, 혼합 암호, 업로드·다운로드 대역폭, 인증서 검증 관련 옵션이 더 포함됩니다. 항목 이름은 화면과 설정 방식에 따라 달라질 수 있지만 파라미터의 의미를 서로 바꿔 입력해서는 안 됩니다.
Port 443을 예로 들면 이는 흔한 포트 예시일 뿐 모든 Hysteria2 서비스가 443을 사용한다는 뜻은 아닙니다. Address에는 호스트 이름 또는 IP를 입력하고 Port는 서버의 수신 대기 값과 일치해야 합니다. Password는 Hysteria2 인증 값이며 Shadowrocket 구매 자격 증명이 아닙니다. SNI는 TLS 핸드셰이크에서 서버 이름을 확인하는 데 사용되므로 일반적으로 서비스 제공업체가 제시한 도메인을 그대로 유지해야 합니다.
앱 확인
App Store에서 Shadowrocket을 받고 개발자명이 Shadow Launch Technology Limited인지, 앱 ID가 932747118인지 확인합니다. 이 앱은 1회 구매 방식이며 시스템 요구 사항은 App Store 페이지 표기를 기준으로 합니다.
추가 화면 열기
Home에서 오른쪽 위 ‘+’를 누르고 Add Server를 연 다음 Type에서 Hysteria2를 선택합니다.
연결 항목 입력
Address, Port, Password, SNI를 차례로 입력합니다. ALPN, Obfuscation, Up, Down 등의 선택 항목은 기존 설정에 명확히 제시된 경우에만 입력합니다.
검증 항목 확인
인증서 검증 관련 스위치는 기존 설정을 따라야 합니다. 정상적인 인증서 환경에서는 검증을 유지하며, 항목 오류를 우회하려고 검증 상태를 임의로 바꾸지 않습니다.
저장 후 선택
저장한 뒤 Home으로 돌아가 새로 만든 서버 항목을 누르고 해당 항목 앞에 선택 표시가 나타나는지 확인합니다.
연결 테스트 실행
연결 스위치를 켜고 시스템 VPN 설정 승인을 완료한 뒤 Connectivity Test를 실행합니다. 실패하면 timeout, TLS, authentication 등 표시된 오류 유형을 기록합니다.
서비스 제공업체가 단일 Hysteria2 URI를 제공했다면 먼저 URI 구조를 확인한 뒤 Shadowrocket이 지원하는 가져오기 경로를 사용합니다. 아래는 설명용 가짜 값 문법일 뿐 실제 연결에는 사용할 수 없습니다. URI의 인증 값, 호스트 이름, Port, 쿼리 파라미터, 이름 부분은 각각 다른 역할을 하며 특수 문자가 포함된 Password는 올바르게 URL 인코딩해야 합니다.
hysteria2://[email protected]:443/?sni=edge.example.com&insecure=0#HY2-demo
사용 중인 구독이 있다면 Home 오른쪽 위 ‘+’에서 Add Server로 들어가 Type을 Subscribe로 설정한 뒤 구독 URL을 입력합니다. 예시 가짜 값은 https://example.com/sub?token=xxxx입니다. 저장한 후 Home으로 돌아와 아래로 당겨 업데이트합니다. 구독 업데이트는 해당 구독이 관리하는 항목을 덮어쓰거나 다시 만들 수 있으므로 파라미터를 수정해야 할 때는 자동 생성된 서버 기록을 계속 수동 편집하기보다 서비스 제공업체가 구독 원본에서 변경하도록 요구하는지 먼저 확인해야 합니다.
Global Routing과 On Demand 연동 방법
Hysteria2는 클라이언트와 서버 사이에 전송 세션을 만드는 방식을 결정하고, Global Routing은 어떤 요청을 해당 세션으로 보낼지 결정합니다. 두 기능은 서로 다른 계층에 속합니다. Home에서 Hysteria2 항목을 선택했더라도 Global Routing이 Direct라면 트래픽은 계속 직접 연결 방식으로 처리됩니다. 서버가 선택되어 있다는 사실만으로 요청이 해당 연결을 통과한다고 볼 수 없습니다.
Config 상태에서는 현재 설정 파일의 규칙에 따라 트래픽을 매칭합니다. 자주 사용하는 규칙 키워드에는 DOMAIN-SUFFIX, GEOIP, IP-CIDR, FINAL이 있습니다. 규칙은 일반적으로 위에서 아래 순서로 매칭되며 먼저 일치한 규칙이 동작을 결정합니다. FINAL은 앞에서 일치하지 않은 요청을 처리합니다. Proxy는 규칙 문제를 점검하기 위한 임시 비교에 사용할 수 있고 Direct는 이상 현상이 프록시 경로와 관련 있는지 확인하는 데 사용할 수 있으며 Scene은 조건에 따라 미리 설정된 동작을 전환합니다.
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
IP-CIDR,192.0.2.0/24,PROXY,no-resolve
FINAL,PROXY
- Proxy: 현재 선택한 서버를 통해 트래픽을 전송하며, 규칙 때문에 프록시가 적용되지 않는지 잠시 확인할 때 적합합니다.
- Direct: 트래픽을 직접 연결하며 프록시 경로와 장애를 비교할 때 적합합니다.
- Config: 설정 파일의 규칙을 순서대로 매칭하며 일상적인 트래픽 분기에 적합합니다.
- Scene: 설정된 네트워크 상황에 따라 해당 동작을 선택하며, 사용하기 전에 씬 조건을 확인해야 합니다.
On Demand는 조건에 따라 연결을 트리거하는 기능입니다. 경로는 Settings → On Demand → Enable이며, 이후 자신의 네트워크 조건에 맞춰 트리거 규칙을 설정합니다. Hysteria2를 처음 점검할 때는 절차를 단순하게 유지하세요. 서버를 수동으로 선택하고 연결을 직접 켠 뒤 Connectivity Test를 완료합니다. 기본 연결이 정상임을 확인한 후 On Demand를 활성화합니다. 그렇지 않으면 트리거 조건, 시스템 VPN 상태, 프로토콜 파라미터가 동시에 결과에 영향을 주어 장애 원인을 찾기 어려워집니다.
규칙 문법 예시의 example.com과 192.0.2.0/24는 설명을 위한 값입니다. 실제 Config에는 사용자가 직접 관리하거나 기존 설정에서 제공하는 규칙을 사용해야 합니다. 수정하기 전에 원래 설정을 보존하고, 수정 후 Proxy, Direct, FINAL에 각각 매칭되는 요청을 테스트하여 특정 웹페이지 하나만 확인하고 전체 규칙이 정상이라고 판단하지 않도록 합니다.
연결 timeout, 핸드셰이크 실패, 속도 변동을 점검하는 순서
점검은 가장 쉽게 확인할 수 있는 조건부터 시작해야 합니다. 먼저 기기 시간이 자동으로 설정되어 있는지 확인하고 Address와 Port를 확인한 다음 Password, SNI, ALPN, 혼합 파라미터를 점검합니다. 대역폭과 라우팅은 마지막에 조정합니다. 기기 시간 오차는 TLS 인증서 유효 기간 판단에 영향을 줄 수 있고 Address 또는 Port 오류는 대개 지속적인 timeout으로 나타납니다. Password가 일치하지 않으면 인증 실패가 발생할 수 있으며 SNI와 인증서 이름이 일치하지 않으면 TLS 오류가 발생할 수 있습니다.
Connectivity Test는 현재 항목의 지연과 기본 연결 상태를 확인하는 데 적합하지만 한 번의 결과가 지속적인 처리량을 의미하지는 않습니다. 3~5회 연속 테스트하여 모두 timeout인지, 첫 번째만 느린지, 지연이 80ms에서 600ms로 뛰는지 기록할 수 있습니다. 테스트는 통과하지만 실제 요청에 문제가 있다면 Hysteria2의 Password나 Port를 계속 수정하기보다 Global Routing, Config 규칙, DNS 처리를 확인해야 합니다.
계속 timeout으로 표시되면 어떻게 하나요?
먼저 Home에서 선택한 항목이 방금 추가한 Hysteria2 항목인지 확인하고 Address와 Port를 다시 확인합니다. 그런 다음 UDP를 허용하는 것으로 확인된 다른 네트워크에서 테스트합니다. 특정 네트워크에서만 실패한다면 해당 네트워크의 UDP 연결 가능 여부를 우선 판단합니다.
TLS 오류가 표시되면 무엇을 바꿔야 하나요?
기기 시간이 자동으로 설정되어 있는지 확인하고 SNI를 한 글자씩 대조합니다. SNI는 일반적으로 메모 이름이 아닌 도메인입니다. 인증서 검증 상태는 기존 설정을 따라야 하며, 올바른 입력 대신 검증 옵션을 바꿔서는 안 됩니다.
연결은 되지만 속도가 크게 오르내리면 어떻게 하나요?
Connectivity Test를 3~5회 연속 실행해 지연 변동을 확인한 다음 Up, Down 또는 유사한 대역폭 항목을 임의로 높이지 않았는지 점검합니다. 서비스 제공업체가 제시한 원래 값으로 되돌린 뒤 다시 테스트하고 여러 항목을 동시에 수정하지 마세요.
서버를 선택했는데 적용되지 않으면 어떻게 하나요?
Home의 연결 스위치와 Global Routing을 확인합니다. 현재 Direct라면 잠시 Proxy로 전환해 비교합니다. Proxy는 정상인데 Config에서 문제가 발생하면 Config로 돌아가 규칙 순서와 FINAL 동작을 확인합니다.
구독을 업데이트한 뒤 수동 입력 값이 사라지면 어떻게 하나요?
Subscribe가 관리하는 항목은 업데이트 시 구독 내용에 따라 다시 만들어질 수 있습니다. 먼저 Home에서 항목의 출처를 확인하고 서비스 제공업체에 구독에 포함된 Hysteria2 파라미터를 문의하세요. 업데이트로 덮어써질 임시 수정에 의존하지 마세요.
프로토콜 문제와 규칙 문제를 구분해야 한다면 먼저 Global Routing을 잠시 Proxy로 설정하고 대상 Hysteria2 항목을 선택한 뒤 Connectivity Test를 실행합니다. 기본 연결이 정상이면 Config로 되돌아가 DOMAIN-SUFFIX, GEOIP, IP-CIDR, FINAL을 순서대로 확인합니다. 점검이 끝나면 테스트용 설정에 계속 머물지 않도록 원래 트래픽 분기 상태로 복원해야 합니다.
Shadowrocket은 주로 iPhone과 iPad에서 사용하며, Mac, Apple TV, Apple Vision의 지원 여부는 App Store 제품 페이지의 호환성 항목에서 확인할 수 있습니다. 시스템 요구 사항은 App Store 페이지 표기를 기준으로 합니다. 기기마다 네트워크 전환과 시스템 VPN 동작은 다를 수 있지만 Hysteria2 항목 확인 원칙은 같습니다. 주소와 포트를 먼저 확인하고 인증 및 TLS 파라미터를 하나씩 맞춘 뒤 혼잡 제어와 규칙 분기를 처리합니다.