예전에 방화벽 만들어 보겠다고 조언 얻으려는 글 올렸던 학생입니다
덕분에 지금은 어느정도 갈피를 잡고 공부해나가고 있습니다. ^^
요즘은 리눅스 네트워크 드라이버쪽을 보고 있는데요, 여러 소스들을 보면서 어느 부분을 어떻게 만지면 되겠다는걸 감은 잡게 되어 지금 그부분 수정하고 있습니다.
그런데 하다가 잘 이해가 안되는 부분이 있어서 다시 한번 도움을 요청하네요 ;;
네트워크 드라이버는 다른 드라이버와는 다르게 네트워크 스택이랑 맞물려서 연동된다고 알고 있는데요,
제가 만든 드라이버가 패킷을 가로채어 드라이버가 받은 패킷이 스택으로 가지 않게 한다고 하면
사용자 컴퓨터에 실제 탑재되어 있는 NIC의 드라이버와 네트워크 스택사이에 제가 만든 모듈이 있어야 할 것 같은데
이부분이 어떻게 구현되는지 여기저기 알아보고 있지만 잘 모르겠습니다. 혹시 제가 잘못 생각하고 있는건가요?
예를 들어,
네트워크 디바이스를 호스트가 사용하게 되면 데이터를 송신하는 경우에,
커널에서 TCP나 IP 관련된 패킷 헤더를 만들어 붙이고 나서 ethernet을 사용하는 경우에 ethernet frame을 만들텐데요...
ethernet frame을 만들고 mac계층(link-layer)에서 flow control 같은 기능을 하는 것이 디바이스 드라이버에 구현되는건지(그렇다면 범용인지 아니면, 네트워크장치에 dependent하게 vendor에서 제조하는지), 커널에 구현되는건지 궁금합니다.
더불어 csma/cd 같은 동작은 어디 구현되어 있는지, firmware와 device driver의 기능은 어떻게 구분이 되는지에 관해 도움을 구합니다.