BPF(Berkeley Packet Filter)
BPF(Berkeley Packet Filter)는 1992년에 개발된 네트워크 패킷 필터링 메커니즘이며, 패킷과 syscall에 대한 기본 필터링을 수행하기 위한 두 개의 32비트 레지스터가 있는 작은 바이트코드이다.
커널은 업데이트가 자주 일어나는 편이 아니며, 특정 기능을 추가하려면 커널을 빌드해야 하는 피곤한 상황이 발생하지만, BPF를 활용하면 사용자가 정의한 코드를 기반으로 사용자 공간에서 커널의 코드를 활용할 수 있다.
일반적으로는 모든 네트워크 패킷이 커널에서 사용자 공간(User Space)으로 복사되어 처리되었기에 이는 많은 시스템 리소스를 소모했고, BPF는 커널 내에서 직접 패킷을 필터링하는 방식을 활용하여 필요한 패킷만 사용자 공간으로 전달되어서 시스템 성능이 크게 향상했다.
eBPF(extended Berkeley Packet Filter)
eBPF(extended BPF)는 상당한 확장 기능을 갖춘 새로운 바이트코드이다.
이 바이트코드는 10개의 64비트 레지스터, 폴스루 점프, 스택 공간을 갖춤으로 더 현대적인 형태를 가지고 있어 JIT 컴파일에 용이하다는 특징을 가지고 있다.
커널과 상호작용하기 위한 Helper라고 불리는 특별한 함수를 호출할 수 있으며, 이러한 헬퍼를 사용하여 맵에 상태도 저장할 수도 있다.

이러한 특징으로 인하여 차세대 네트워킹, 관찰 가능성, 보안 기능을 포함한 광범위한 사용 사례를 포괄하는 eBPF 기반 프로젝트가 급증하게 되었다.
세부적인 사용 사례로 알아보자면, 최신 데이터 센터와 클라우드 네이티브 환경에서 고성능 네트워킹 및 로드 밸런싱 제공, 낮은 오버헤드로 세분화된 보안 관찰 데이터 추출, 애플리케이션 개발자가 애플리케이션을 추적하도록 지원, 성능 문제 해결을 위한 통찰력 제공, 예방적 애플리케이션 및 컨테이너 런타임 보안이 있다.
+ 현대에는 BPF는 eBPF와 함께(같은 의미로) 사용이 되며, 과거의 BPF를 칭할 때에는 cBPF(classic BPF)라고 사용하게 되었다.
'Computer-Sience > Network' 카테고리의 다른 글
[Network] LDAP(Lightweight Directory Access Protocol) (0) | 2025.02.07 |
---|---|
[Network] ICMP / IGMP (0) | 2024.11.13 |
[Network] MTU(Maximum Transmission Unit) (0) | 2024.11.12 |
[Network] AS(Autonomous System) (0) | 2024.07.31 |
[Network] NAT / SNAT / DNAT (0) | 2023.12.21 |