이더넷 오버 USB

IT 위키

이더넷 오버 USB(Ethernet over USB)는 USB 버스 위에서 이더넷 호환 네트워크 인터페이스를 구현하는 방식을 통칭한다. USB로 연결된 장치를 호스트가 일반 네트워크 어댑터처럼 인식하게 하여, 그 위로 IP 패킷을 주고받고 인터넷에 접속할 수 있게 한다. 안드로이드 기기의 USB 테더링, USB-이더넷 어댑터, 각종 임베디드 장치의 네트워크 공유 기능이 대표적인 사용 사례다.

이를 구현하는 프로토콜은 크게 두 갈래로 나뉜다. USB-IF의 공식 표준인 USB CDC 계열과, 마이크로소프트의 독자 규격인 RNDIS다. 두 방식은 세대 차이가 아니라 출신이 다른 표준이며, 운영체제별 지원 양상이 서로 엇갈리는 것이 이 분야의 핵심적인 호환성 문제를 낳는다.

동작 원리

[편집 | 원본 편집]

이더넷 오버 USB에서 장치는 USB 링크 위에서 이더넷 프레임 또는 IP 패킷을 캡슐화해 전송한다. 호스트 측에는 가상의 네트워크 인터페이스(예: 리눅스의 usb0, rndis0 또는 eth 계열)가 생성되며, 장치 측은 DHCP 서버·DNS·게이트웨이 역할을 수행해 호스트에 IP를 할당하고 외부망으로의 경로를 제공한다.

호스트가 이 인터페이스를 인식하려면, 장치가 사용하는 프로토콜에 대응하는 드라이버가 운영체제에 있어야 한다. 바로 이 지점에서 프로토콜별·운영체제별 호환성 차이가 발생한다.

주요 프로토콜

[편집 | 원본 편집]

USB CDC 계열

[편집 | 원본 편집]

USB CDC(Communications Device Class)는 USB-IF가 제정한 공식 표준 장치 클래스다. 네트워킹과 관련해서는 다음 세 가지 하위 모델이 있다.

  • EEM (Ethernet Emulation Model) — 구현이 가장 단순해 저사양 기기에 적합하나 성능은 낮을 수 있다.
  • ECM (Ethernet Control Model) — 구현이 더 복잡하지만 EEM보다 나은 성능을 지향한다.
  • NCM (Network Control Model) — ECM의 후속으로 더 높은 처리량을 목표로 하며, 패킷 처리를 장치로 오프로드해 호스트 CPU 부하를 줄인다.

CDC는 표준 규격이므로 macOS리눅스에서 기본 지원되는 반면, 윈도우에서는 지원이 제한적일 수 있다.

RNDIS(Remote Network Driver Interface Specification)는 마이크로소프트가 윈도우의 네트워크 드라이버 구조(NDIS)를 USB 위로 확장해 만든 독자 규격이다. 윈도우에서 기본 지원되고 리눅스도 호환 드라이버(rndis_host)로 지원하지만, macOS는 RNDIS를 기본 지원하지 않는다.

안드로이드 기기는 초기부터 USB 테더링에 RNDIS를 기본 프로토콜로 채택해 왔으며, 이는 사용자 대부분이 윈도우 PC를 쓰던 환경에서 비롯된 관성으로 남아 있다.

프로토콜 비교

[편집 | 원본 편집]
구분 USB CDC (ECM/NCM/EEM) RNDIS
제정 주체 USB-IF (공식 표준) 마이크로소프트 (독자 규격)
윈도우 지원 부분적/제한적 기본 지원
macOS 지원 기본 지원 (특히 NCM) 미지원
리눅스 지원 기본 지원 호환 드라이버로 지원

USB 표준은 한 장치가 여러 방식을 동시에 구현해 두고 호스트가 선호하는 것을 고르도록 하는 설계를 허용한다. 즉 장치가 CDC와 RNDIS를 모두 광고하면, 윈도우는 RNDIS를, macOS는 CDC를 선택해 쓸 수 있다. 그러나 실제로는 많은 기기가 이런 다중 지원을 구성하지 않아 호환성 문제가 발생한다.

운영체제별 호환성

[편집 | 원본 편집]

운영체제마다 기본 지원하는 프로토콜이 달라, 같은 장치라도 연결 대상에 따라 동작 여부가 갈린다.

  • 윈도우 — RNDIS를 기본 지원하므로 안드로이드 USB 테더링이 대체로 무난하게 동작한다. CDC-NCM 장치는 드라이버 수동 지정이 필요할 수 있다.
  • 리눅스 — CDC 계열과 RNDIS를 모두 커널에서 지원해 폭넓게 호환된다.
  • macOS — CDC 계열만 기본 지원하고 RNDIS는 지원하지 않는다. 따라서 RNDIS만 내보내는 장치는 인식되지 않는다.

macOS에서의 안드로이드 테더링 문제

[편집 | 원본 편집]

안드로이드(특히 삼성 갤럭시) 기기가 USB 테더링 시 RNDIS를 사용하는 탓에, macOS에서는 USB 테더링 인터페이스가 잡히지 않는 대표적 비호환 사례가 발생한다. 우회 방법은 다음과 같다.

  • HoRNDIS — macOS에 RNDIS 지원을 추가하는 비공식 커널 확장(kext). 그러나 최신 macOS(특히 Ventura 이후, Apple 실리콘 환경)에서는 정상 동작이 어렵다.
  • 이더넷 테더링 우회 — 일부 기기가 제공하는 이더넷 테더링 기능에 USB-이더넷 어댑터를 연결하는 방식. 이 경우 표준 CDC로 동작하므로 macOS가 드라이버 없이 인식한다. 다만 삼성 One UI 8 펌웨어에서 일부 어댑터 드라이버가 제거되며 동작하지 않는 사례가 보고되고 있다.

사용 사례

[편집 | 원본 편집]
  • USB 테더링 — 휴대폰의 이동통신 인터넷을 USB로 연결된 컴퓨터와 공유.
  • USB-이더넷 어댑터 — 이더넷 포트가 없는 노트북 등에 유선 랜을 추가.
  • 임베디드 장치 — 라우터, 디스플레이, 개발 보드 등이 USB로 네트워크 인터페이스를 노출.

같이 보기

[편집 | 원본 편집]