디바이스드라이버

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS


1. Network Driver Interface Specification(NDIS)


마이크로 소프트에서 제공하는 네트워크 디바이스 드라이버를 위한 인터페이스 규격
Windows Driver Model(WDM)이 윈도우즈에서 동작하는 디바이스 드라이버들의 호환성을 위해 마이크로 소프트가 OS 레벨에서 제공하는
인터페이스 규격이라면 NDIS는 네트워크 드라이버를 위해 만들어진 규격이다.
윈도우즈는 NDIS를 통해 아래와 같은 세가지 기본 타입의 드라이버 종류를 제공한다.

  • Miniport NIC driver
Network Interface Card(NIC)를 제어하고 상위 계층의 드라이버와 상태 정보 및 패킷 데이터들을 주고 받기 위한 기능을 수행하는 드라이버
WDM에서 말하는 Bus driver나 Physical device driver와 비슷한 기능을 제공한다.

  • Intermediate driver
Miniport driver와 Protocol driver 사이에 위치하는 일종의 filter driver이다. protocol driver와 miniport driver 사이에 직접적인 인터페이스가
불가능한 경우(예를 들어 protocol driver가 지원하지 않는 방식의 miniport driver가 연결될 필요가 있는 경우)에 둘 사이의 인터페이스 전환을 위해
혹은 기타 protocol driver와 miniport driver 사이에서 오고가는 정보를 가공, 캡쳐하는 등의 목적으로 사용된다.

  • Protocol driver
유저 모드상에서 필요로하거나 제공하는 인터페이스들을 실행하거나 하위 레벨 드라이버(miniport 혹은 intermediate driver)와 패킷 전송/수신, 상태 정보 요청
등의 작업을 수행하는 드라이버

1.1. NDIS와 OSI 7 layer


윈도우즈가 제공하는 네트워크 드라이버들은 OSI 레퍼런스 모델의 1~4 layer(physical, data link, network, transport)에서 실행된다.

  • physical layer는 NIC가 어떻게 데이터들을 전기적인 신호로 전환하여 케이블로 전달하는지 혹은 전달된 전기 신호를 의미있는 데이터로
전환하는지 등의 하위 레벨의 기능을 담당하며 일반적으로 이것은 윈도우즈의 범위라기 보다는 해당 NIC의 하드웨어 스펙상의 문제이다.

  • data link layer는 다시 Logical Links Control(LLC)과 Media Access Control(MAC) layer로 나뉘어 진다. LLC는 logical link의 setup과 tear down, frame control
등을 담당하며 MAC는 frame error check, frame address management등을 담당한다. NDIS에서 LLC는 transport driver(혹은 protocol driver)에서 실행하며 MAC는 miniport
driver에서 실행된다. 프로토콜 스택상에서 data link layer는 보통 (윈도우즈가 아닌 다른 OS에서도) NDIS와 같은 디바이스 드라이버에 매칭된다.

  • network layer는 프로토콜 스택상에서 IP, ARP, ICMP 등의 프로토콜에 해당하며 패킷의 라우팅, 트래픽 제어, 프레임 조작 등의 기능을 담당한다.

  • Transport layer는 프로토콜 스택상에서 TCP, WTP등의 프로토콜에 해당하며 패킷의 전송 보장, 에러 검출 등의 역할을 수행함으로써 상위 어플리케이션 레벨이
데이터 전송에 관련된 여러가지 제어를 담당해야 하는 부담을 줄여준다. (예를 들어 우리가 소켓 프로그래밍을 통해 TCP 데이터를 주고 받을 때 패킷이 전달될 때 마다
일일이 각 패킷에 대한 Ack 패킷을 보내주지 않아도 되며 반대로 우리가 데이터를 전달할 때 중간에 패킷이 유실되더라도 재전송을 걱정할 필요가 없는 것은 TCP protocol
stack에서 이러한 일들을 대신 수행하기 때문이다.)

  • NDIS에서는 network layer와 transport layer 그리고 LLC 계층에서 하는 일들을 transport driver에서 수행한다.(일반적으로 이런 것들을 TDI 드라이버라고 부른다.)

"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>