USB CDC

IT 위키

USB CDC(USB Communications Device Class, USB 통신 장치 클래스)는 USB-IF가 제정한 USB 공식 표준 장치 클래스로, 통신 기능을 가진 USB 장치를 정의한다. 모뎀, 시리얼 어댑터, 네트워크 어댑터 등 다양한 통신 장치를 포괄하며, 그 중 이더넷 호환 네트워크 기능을 구현하는 하위 규격들이 이더넷 오버 USB에 널리 쓰인다.

CDC는 마이크로소프트의 독자 규격인 RNDIS와 대비되는 개념으로 자주 언급된다. RNDIS가 특정 벤더의 비표준 규격인 반면, CDC는 USB 표준 자체에 포함된 공식 규격이라는 점이 가장 큰 차이다.

USB CDC는 단일 프로토콜이 아니라 여러 하위 모델(subclass)을 포함하는 장치 클래스다. 통신 장치의 종류에 따라 시리얼 통신용, 네트워크용 등으로 나뉜다. 이 문서는 주로 네트워킹(이더넷 오버 USB) 관련 하위 규격을 중심으로 다룬다.

CDC가 표준 규격이라는 점은 운영체제 호환성에 직접적인 영향을 준다.

  • macOS — CDC 계열, 특히 NCM을 기본 지원한다. 별도 드라이버 설치 없이 USB 네트워크 장치를 인식한다.
  • 리눅스 — CDC 계열을 커널에서 기본 지원한다(cdc_ether, cdc_ncm 등).
  • 윈도우 — CDC 지원이 부분적이거나 제한적이며, 경우에 따라 별도 드라이버가 필요하다.

네트워킹 관련 하위 규격

[편집 | 원본 편집]

CDC 안에는 이더넷을 USB 위로 구현하기 위한 세 가지 관련 표준이 있다. 대부분의 차이는 구현 복잡도와 성능에서 비롯된다.

규격 정식 명칭 특징
EEM Ethernet Emulation Model 구현이 가장 단순해 저사양 기기에 적합하나, 성능은 상대적으로 낮을 수 있다.
ECM Ethernet Control Model 구현이 더 복잡하지만 EEM보다 나은 성능을 지향한다.
NCM Network Control Model ECM의 후속 규격으로, 더 높은 처리량을 목표로 한다.

NCM의 CPU 오프로드

[편집 | 원본 편집]

NCM은 ECM에 비해 성능 면에서 중요한 이점이 있다. macOS에서 NCM 장치는 com.apple.driver.usb.cdc.ncm 드라이버로 동작하며, 패킷 처리 부담을 장치 쪽으로 오프로드해 호스트 CPU 부하를 줄인다. 반면 ECM 드라이버는 처리 부담을 호스트 CPU에 지우므로 CPU 사용률이 높아질 수 있다. 이 차이는 특히 Apple 실리콘(M1 등) 기반 맥에서 더 두드러지는 것으로 보고된다.

따라서 USB 이더넷 어댑터를 macOS에서 쓸 때는, 어댑터가 어떤 드라이버로 동작하는지가 성능에 영향을 준다. 시스템 정보 앱의 하드웨어 → 이더넷 → 드라이버 항목에서 com.apple.driver.usb.cdc.ncm으로 표시되는지 확인할 수 있다.

RNDIS와의 비교

[편집 | 원본 편집]

CDC와 RNDIS는 "구형 대 신형"의 세대 차이가 아니라 출신이 다른 표준의 관계다.

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

많은 장치는 CDC와 RNDIS 등 여러 방식을 동시에 구현해 두고, 호스트 운영체제가 자신이 선호하는 방식을 골라 통신하도록 맡기는 설계가 가능하다. 즉 한 기기가 양쪽을 모두 광고하면, 윈도우는 RNDIS를, macOS는 CDC를 선택해 쓸 수 있다. 그러나 안드로이드 기기 다수는 USB 테더링 시 RNDIS를 우선(혹은 단독)으로 내보내도록 설정되어 있어, 표준 CDC를 지원하는 하드웨어임에도 macOS에서 인식되지 않는 경우가 많다.

운영체제별 동작

[편집 | 원본 편집]

macOS는 처음부터 USB 표준인 CDC 계열만 기본 지원하며, 마이크로소프트 독자 규격인 RNDIS는 지원하지 않는다. 이 때문에 CDC-NCM으로 동작하는 USB 이더넷 어댑터는 대체로 별도 드라이버 없이 즉시 인식된다. 다만 케이블 품질 등 사소한 요인으로 인식에 실패하는 사례도 있어, 데이터 전송을 지원하는 양질의 케이블 사용이 권장된다.

리눅스

[편집 | 원본 편집]

리눅스 커널은 cdc_ether(ECM), cdc_ncm(NCM) 등의 모듈로 CDC 계열을 지원한다. 다만 일부 구현에서는 인터럽트 엔드포인트 같은 선택적 요소의 유무에 따라 드라이버 바인딩이 실패할 수 있으며, 이 경우 장치별 예외(quirk) 처리가 필요할 수 있다.

윈도우

[편집 | 원본 편집]

윈도우는 자사 규격인 RNDIS를 기본 지원하는 반면, CDC-NCM 장치는 드라이버가 자동으로 할당되지 않아 "CDC NCM" 장치가 인식되지 않은 상태로 표시될 수 있다. 이 경우 장치 관리자에서 UsbNcm 호스트 드라이버를 수동으로 지정해야 정상 동작한다.

같이 보기

[편집 | 원본 편집]