네트워크 인터페이스 컨트롤러

**네트워크 인터페이스 컨트롤러**(network interface controller, **NIC**), **네트워크 인터페이스 카드**(network interface card), **네트워크 어댑터**(network adapter), **LAN 어댑터**(LAN adapter) 또는 **물리 네트워크 인터페이스**(physical network interface)는 컴퓨터를 컴퓨터 망에 연결하는 컴퓨터 하드웨어 부품이다.

초기 네트워크 인터페이스 컨트롤러는 일반적으로 시스템 버스에 꽂는 확장 카드 형태로 구현되었다. 이더넷 표준의 저렴한 비용과 보편성 덕분에, 비록 별도의 네트워크 카드가 여전히 판매되고는 있지만, 대부분의 최신 컴퓨터는 메인보드에 네트워크 인터페이스 컨트롤러가 내장되어 있거나 USB로 연결된 동글에 포함되어 있다.

현대적인 네트워크 인터페이스 컨트롤러는 호스트 프로세서에 대한 인터럽트 및 DMA 인터페이스, 다중 수신 및 송신 큐 지원, 여러 개의 논리적 인터페이스로의 분할, TCP 오프로드 엔진과 같은 컨트롤러 자체 내의 네트워크 트래픽 처리와 같은 고급 기능을 제공한다.

## 목적
네트워크 컨트롤러는 이더넷이나 와이파이와 같은 특정 물리 계층 및 데이터 링크 계층 표준을 사용하여 통신하는 데 필요한 전자 회로를 구현한다. 이는 완전한 네트워크 프로토콜 스택의 기반을 제공하여, 동일한 근거리 통신망(LAN)에 있는 컴퓨터 간의 통신과 인터넷 프로토콜(IP)과 같은 라우팅 가능 프로토콜을 통한 대규모 네트워크 통신을 가능하게 한다.

NIC를 통해 컴퓨터는 케이블을 사용하거나 무선으로 컴퓨터 네트워크 상에서 통신할 수 있다. NIC는 네트워킹 매체에 대한 물리적 접근을 제공하고, IEEE 802 및 유사한 네트워크의 경우 네트워크 인터페이스에 고유하게 할당된 MAC 주소를 사용하는 저수준 주소 지정 시스템을 제공하므로 물리 계층과 데이터 링크 계층 장치에 모두 해당한다.

## 구현
[섬네일|12개의 초기 ISA 8비트 및 16비트 PC 네트워크 카드. 오른쪽 하단 끝에 있는 카드는 초기 무선 네트워크 카드이며, 부분적으로 베이지색 플라스틱 덮개가 있는 중앙의 카드는 PSTN [모뎀이다.]]
[섬네일|인텔 Ophir 82571 듀얼 포트 기가비트 이더넷 컨트롤러 [다이 (집적 회로)|다이]]
네트워크 컨트롤러는 원래 컴퓨터 버스에 꽂는 확장 카드 형태로 구현되었다. 이더넷 표준의 저렴한 가격과 보편성 덕분에 대부분의 새 컴퓨터는 메인보드에 네트워크 인터페이스 컨트롤러가 내장되어 있으며, 이러한 방식을 LOM(LAN on motherboard)이라고 한다. 최신 서버 메인보드에는 여러 개의 네트워크 인터페이스가 내장되어 있을 수 있다. 이더넷 기능은 메인보드 칩셋에 통합되거나 저가형 전용 이더넷 칩을 통해 구현된다. 추가적인 독립적 네트워크 연결이 필요하거나 이더넷이 아닌 다른 유형의 네트워크를 사용하지 않는 한 일반적으로 별도의 네트워크 카드는 더 이상 필요하지 않다. 컴퓨터 하드웨어의 일반적인 추세는 시스템의 다양한 구성 요소를 단일 칩에 통합하는 방향이며, 이는 네트워크 인터페이스 카드에도 적용되고 있다.

이더넷 네트워크 컨트롤러에는 일반적으로 네트워크 케이블이 연결되는 8P8C 소켓이 있다. 오래된 NIC는 BNC 단자나 AUI 연결도 지원했다. 이더넷 네트워크 컨트롤러는 일반적으로  이더넷, 이더넷, 이더넷 변형을 지원한다. 이러한 컨트롤러는 10/100/1000으로 표시되며, 이는 10, 100 또는 의 데이터 속도를 지원할 수 있음을 의미한다. 10기가비트 이더넷 NIC도 사용 가능하며,  기준으로 메인보드에 탑재되기 시작했다.

[섬네일|[큐로직 QLE3442-CU SFP+ 듀얼 포트 NIC]]
SFP 및 SFP+와 같은 모듈형 설계는 특히 광섬유 통신에서 매우 인기가 높다. 이는 매체 종속 트랜시버를 위한 표준 소켓을 정의하므로, 사용자가 자신의 필요에 맞게 네트워크 인터페이스를 쉽게 조정할 수 있다.

네트워크 커넥터 옆이나 내부에 통합된 LED는 네트워크 연결 여부와 데이터 활동 발생 시점을 사용자에게 알려준다.

NIC에는 공장에서 할당된 MAC 주소를 저장하기 위한 ROM이 포함될 수 있다.

NIC는 전송할 패킷의 가용성을 나타내기 위해 다음 기술 중 하나 이상을 사용할 수 있다.
* 폴링은 프로그램 제어 하에 CPU가 주변기기의 상태를 검사하는 방식이다.
* 인터럽트 구동 I/O는 주변기기가 데이터를 전송할 준비가 되었음을 CPU에 알리는 방식이다.

NIC는 패킷 데이터를 전송하기 위해 다음 기술 중 하나 이상을 사용할 수 있다.
* 프로그램 입출력(Programmed I/O)은 CPU가 NIC와 메모리 간에 데이터를 직접 이동시키는 방식이다.
* 직접 메모리 접근(DMA)은 CPU 이외의 장치가 시스템 버스의 제어권을 가져와 NIC와 메모리 간에 데이터를 이동시키는 방식이다. 이는 CPU의 부하를 덜어주지만 카드에 더 많은 로직이 필요하다. 또한 NIC의 패킷 버퍼가 필요하지 않을 수 있으며, 레이턴시를 줄일 수 있다.

## 성능 및 고급 기능
[섬네일|right|[비동기 전송 방식(ATM) 네트워크 인터페이스]]
[섬네일|right|두 개의 하드웨어 수신 큐를 제공하는 [인텔 82574L 기가비트 이더넷 NIC, PCI 익스프레스 ×1 카드]]

**멀티큐 NIC**는 다중 송신 및 수신 큐를 제공하여 NIC가 수신한 패킷을 수신 큐 중 하나에 할당할 수 있도록 한다. NIC는 해시 함수를 사용하여 수신 큐 간에 들어오는 트래픽을 분산시킬 수 있다. 각 수신 큐는 별도의 인터럽트에 할당되며, 이러한 인터럽트 각각을 서로 다른 CPU 또는 CPU 코어로 라우팅함으로써 단일 NIC에서 수신한 네트워크 트래픽으로 인해 발생하는 인터럽트 요청 처리를 분산시켜 성능을 향상시킬 수 있다.

위에서 설명한 하드웨어 기반의 인터럽트 분산은 수신 측 스케일링(receive-side scaling, RSS)이라고 한다. 수신 패킷 스티어링(receive packet steering, RPS), 수신 플로우 스티어링(receive flow steering, RFS) 및 인텔 플로우 디렉터(Flow Director)와 같은 순수 소프트웨어 구현도 존재한다. 인터럽트를 발생시킨 네트워크 패킷의 최종 목적지인 애플리케이션을 실행하는 CPU 또는 코어로 인터럽트 요청을 라우팅함으로써 더 높은 성능 향상을 얻을 수 있다. 이 기술은 참조 국부성을 개선하고 CPU 캐시 활용도를 높이며 필요한 문맥 교환 횟수를 줄여 전반적인 성능 향상, 레이턴시 감소 및 하드웨어 활용도 개선을 가져온다.

멀티큐 NIC를 사용하면 나가는 트래픽을 서로 다른 송신 큐에 분산시킴으로써 추가적인 성능 향상을 얻을 수 있다. 서로 다른 송신 큐를 서로 다른 CPU 또는 CPU 코어에 할당함으로써 운영 체제 내부의 경합을 피할 수 있다. 이 접근 방식은 보통 송신 패킷 스티어링(transmit packet steering, XPS)이라고 한다.

일부 제품은 SR-IOV 가상화를 사용하여 단일 10기가비트 이더넷 NIC를 전용 대역폭을 가진 여러 개의 개별 가상 NIC로 나누는 **NIC 파티셔닝**(**NPAR**, 포트 파티셔닝이라고도 함) 기능을 제공하며, 이는 펌웨어와 운영 체제에 별도의 PCI 장치 기능으로 표시된다.

일부 NIC는 전체 TCP/IP 스택 처리를 네트워크 컨트롤러로 오프로드하기 위해 TCP 오프로드 엔진을 제공한다. 이는 주로 네트워크 스택의 처리 오버헤드가 상당해지는 기가비트 이더넷 및 10기가비트 이더넷과 같은 고속 네트워크 인터페이스에서 사용된다.

일부 NIC는 호스트 컴퓨터에 도달하기 전에 사용자가 프로그래밍 가능한 네트워크 트래픽 처리를 위해 통합 FPGA(field-programmable gate arrays)를 제공하여 시간에 민감한 작업 부하에서 레이턴시를 크게 줄일 수 있도록 한다. 또한, 일부 NIC는 통합 FPGA에서 실행되는 완전한 저지연 TCP/IP 스택과 보통 운영 체제 커널이 수행하는 네트워킹 작업을 가로채는 사용자 공간 라이브러리를 결합하여 제공한다. 리눅스에서 실행되는 솔라플레어(Solarflare)의 오픈 소스 **OpenOnload** 네트워크 스택이 그 예이다. 이러한 종류의 기능은 보통 **사용자 수준 네트워킹**(user-level networking)이라고 한다.

## 각주

; 내용주


## 같이 보기
* MAC 주소

분류:이더넷
분류:네트워크 하드웨어