버클리 패킷 필터

버클리 패킷 필터(Berkeley Packet Filter, BPF)는 컴퓨터 네트워크 패킷이 운영체제 수준에서 캡처되고 필터링되도록 허용하는 네트워크 탭 및 패킷 필터이다. 이는 데이터 링크 계층에 대한 원시 인터페이스를 제공하여 원시 링크 계층 패킷의 전송 및 수신을 허용하고 사용자 공간 프로세스가 수신하려는 패킷을 지정하는 필터 프로그램을 제공할 수 있도록 한다. 예를 들어, tcpdump 프로세스는 TCP 연결을 시작하는 패킷만 수신하려고 할 수 있다. BPF는 프로세스가 제공하는 필터를 통과하는 패킷만 반환한다. 이렇게 하면 운영 체제 커널에서 프로세스로 원치 않는 패킷이 복사되는 것을 방지하여 성능이 크게 향상된다. 필터 프로그램은 커널에서 JIT(Just-In-Time) 메커니즘을 통해 기계어 코드로 해석되거나 컴파일되고 실행되는 가상 머신에 대한 명령 형식이다.

BPF는 무엇보다도 네트워크 트래픽을 분석해야 하는 프로그램에서 사용된다. 네트워크 인터페이스용 드라이버가 무차별 모드를 지원하는 경우 인터페이스를 해당 모드로 전환하여 네트워크의 모든 패킷(다른 호스트로 향하는 패킷 포함)을 수신할 수 있다.

BPF 필터링 메커니즘은 대부분의 유닉스 계열 운영 체제에서 사용할 수 있다. BPF는 때때로 전체 인터페이스가 아닌 필터링 메커니즘만을 참조하는 데 사용된다. 리눅스 및 Tru64 UNIX와 같은 일부 시스템은 BPF 원시 인터페이스 이외의 데이터 링크 계층에 대한 원시 인터페이스를 제공하지만 해당 원시 인터페이스에 대해 BPF 필터링 메커니즘을 사용한다.

리눅스 커널은 JIT 메커니즘을 사용하고 커널의 다른 목적뿐만 아니라 패킷 필터링에도 사용되는 eBPF라는 BPF 필터링 메커니즘의 확장 버전을 제공한다. eBPF는 마이크로소프트 윈도우에서도 사용할 수 있다.

 각주 

 외부 링크 

 bpfc, a Berkeley Packet Filter compiler, Linux BPF JIT disassembler (part of netsniff-ng)
 BPF Documentation, for Linux kernel
 Linux filter documentation, for both cBPF and eBPF bytecode formats

분류:인터넷 프로토콜 기반 네트워크 소프트웨어
분류:패킷