45장. RHEL 8의 eBPF 네트워킹 기능 이해


eBPF(extended Berkeley Packet Filter)는 커널 공간 내에서 코드를 실행할 수 있는 커널 내 가상 머신입니다. 이 코드는 제한된 함수 집합에만 액세스할 수 있는 제한된 샌드박스 환경에서 실행됩니다.

네트워킹에서는 eBPF를 사용하여 커널 패킷 처리를 보완하거나 교체할 수 있습니다. 사용하는 후크에 따라 eBPF 프로그램은 다음과 같습니다.

  • 패킷 데이터 및 메타데이터에 대한 읽기 및 쓰기
  • 소켓과 경로를 조회할 수 있습니다.
  • 소켓 옵션을 설정할 수 있음
  • 패킷을 리디렉션할 수 있음

45.1. RHEL 8의 네트워킹 eBPF 기능 개요

확장된 eBPF(BPF) 네트워킹 프로그램을 RHEL의 다음 후크에 연결할 수 있습니다.

  • XDP( express Data Path): 커널 네트워킹 스택이 처리되기 전에 수신된 패킷에 조기 액세스할 수 있습니다.
  • 직접 작업 플래그를 사용하는 TC eBPF 분류기: 수신 및 송신에서 강력한 패킷 처리를 제공합니다.
  • 제어 그룹 버전 2(cgroup v2): 제어 그룹의 프로그램에서 수행하는 소켓 기반 작업을 필터링하고 덮어쓸 수 있습니다.
  • 소켓 필터링: 소켓에서 수신된 패킷을 필터링할 수 있습니다. 이 기능은 CBPF( classic Berkeley Packet Filter)에서도 사용할 수 있었지만 eBPF 프로그램을 지원하도록 확장되었습니다.
  • 스트림 구문 분석기: 개별 메시지로 스트림을 분할하고 필터링하고 소켓으로 리디렉션할 수 있습니다.
  • SO_REUSEPORT 소켓 선택: reuseport 소켓 그룹에서 수신 소켓을 프로그래밍할 수 있는 선택을 제공합니다.
  • flow dissector: 커널이 특정 상황에서 패킷 헤더를 구문 분석하는 방법을 재정의할 수 있습니다.
  • TCP 정체 제어 콜백: 사용자 지정 TCP 혼잡 제어 알고리즘을 구현할 수 있습니다.
  • 캡슐화가 있는 경로: 사용자 지정 터널 캡슐화를 생성합니다.

Red Hat은 RHEL에서 사용할 수 있고 여기에 설명된 모든 eBPF 기능을 지원하지 않습니다. 자세한 내용 및 개별 후크의 지원 상태는 RHEL 8 릴리스 노트 및 다음 개요를 참조하십시오.

XDP

BPF_PROG_TYPE_XDP 유형의 프로그램을 네트워크 인터페이스에 연결할 수 있습니다. 그런 다음 커널 네트워크 스택이 커널 네트워크 스택의 처리를 시작하기 전에 수신된 패킷에서 프로그램을 실행합니다. 이를 통해 분산 서비스 거부(DDoS) 공격 및 로드 밸런싱 시나리오에 대한 빠른 패킷 리디렉션을 방지하기 위해 빠른 패킷 삭제와 같은 특정 상황에서 빠른 패킷 전달이 가능합니다.

또한 다양한 형태의 패킷 모니터링 및 샘플링에 XDP를 사용할 수도 있습니다. 커널을 사용하면 XDP 프로그램이 패킷을 수정하고 커널 네트워크 스택에 추가 처리를 위해 패킷을 전달할 수 있습니다.

다음 XDP 모드를 사용할 수 있습니다.

  • 기본(driver) XDP: 커널은 패킷 수신 중에 가능한 한 빨리 프로그램을 실행합니다. 현재 커널은 패킷을 구문 분석하지 않았으므로 커널에서 제공하는 메타데이터를 사용할 수 없습니다. 이 모드에서는 네트워크 인터페이스 드라이버가 XDP를 지원하지만 일부 드라이버가 이 기본 모드를 지원하지는 않습니다.
  • 일반 XDP: 커널 네트워크 스택은 처리 초기에 XDP 프로그램을 실행합니다. 이때 커널 데이터 구조가 할당되었으며 패킷이 미리 처리되었습니다. 패킷을 삭제하거나 리디렉션해야 하는 경우 기본 모드에 비해 상당한 오버헤드가 필요합니다. 그러나 일반 모드에서는 네트워크 인터페이스 드라이버를 지원할 필요가 없으며 모든 네트워크 인터페이스에서 작동합니다.
  • 오프로드 XDP: 커널은 호스트 CPU 대신 네트워크 인터페이스에서 XDP 프로그램을 실행합니다. 여기에는 특정 하드웨어가 필요하며 이 모드에서는 특정 eBPF 기능만 사용할 수 있습니다.

RHEL에서 libxdp 라이브러리를 사용하여 모든 XDP 프로그램을 로드합니다. 이 라이브러리는 시스템에서 제어하는 XDP를 사용할 수 있습니다.

참고

현재 XDP 프로그램에 대한 일부 시스템 구성 제한 사항이 있습니다. 예를 들어 수신 인터페이스에서 특정 하드웨어 오프로드 기능을 비활성화해야 합니다. 또한 기본 모드를 지원하는 모든 드라이버에서 모든 기능을 사용할 수 있는 것은 아닙니다.

RHEL 8.7에서 Red Hat은 다음 조건이 모두 적용되는 경우에만 XDP 기능을 지원합니다.

  • AMD 또는 Intel 64비트 아키텍처에 XDP 프로그램을 로드합니다.
  • libxdp 라이브러리를 사용하여 프로그램을 커널에 로드합니다.
  • XDP 프로그램은 XDP 하드웨어 오프로드를 사용하지 않습니다.

또한 Red Hat은 지원되지 않는 기술 프리뷰로 다음과 같은 XDP 기능을 사용합니다.

  • AMD 및 Intel 64비트 이외의 아키텍처에서 XDP 프로그램 로드. AMD 및 Intel 64비트 이외의 아키텍처에서는 libxdp 라이브러리를 사용할 수 없습니다.
  • XDP 하드웨어 오프로드입니다.

AF_XDP

지정된 AF_XDP 소켓으로 패킷을 필터링하고 리디렉션하는 XDP 프로그램을 사용하면 AF_XDP 프로토콜 제품군에서 하나 이상의 소켓을 사용하여 커널의 패킷을 사용자 공간으로 빠르게 복사할 수 있습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

트래픽 제어

Tc (트래픽 제어) 하위 시스템은 다음과 같은 유형의 eBPF 프로그램을 제공합니다.

  • BPF_PROG_TYPE_SCHED_CLS
  • BPF_PROG_TYPE_SCHED_ACT

이러한 유형을 사용하면 eBPF에서 사용자 지정 tc 분류기 및 tc 작업을 작성할 수 있습니다. tc 에코시스템의 부분과 함께 강력한 패킷 처리 기능을 제공하며 여러 컨테이너 네트워킹 오케스트레이션 솔루션의 핵심 요소입니다.

대부분의 경우 직접 동작 플래그와 마찬가지로 분류자만 사용됩니다. eBPF 분류자는 동일한 eBPF 프로그램에서 직접 작업을 실행할 수 있습니다. clsact Queueing Discipline(qdisc)은 수신 측에서 이를 사용하도록 설계되었습니다.

flow dissector eBPF 프로그램을 사용하면 풍미와 같은 다른 qdiscstc 분류기의 작동에 영향을 미칠 수 있습니다.

tc 용 eBPF 기능은 RHEL 8.2 이상에서 완전하게 지원됩니다.

소켓 필터

여러 유틸리티에서 소켓에서 수신된 패킷을 필터링하기 위해 CBPF( classic Berkeley Packet Filter)를 사용하거나 사용했습니다. 예를 들어 tcpdump 유틸리티를 사용하면 tcpdump 가 cBPF 코드로 변환되는 표현식을 지정할 수 있습니다.

cBPF 대신 커널은 BPF_PROG_TYPE_SOCKET_FILTER 유형의 eBPF 프로그램을 동일한 목적으로 허용합니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

제어 그룹

RHEL에서는 cgroup에 연결할 수 있는 여러 유형의 eBPF 프로그램을 사용할 수 있습니다. 지정된 cgroup의 프로그램이 작업을 수행할 때 커널은 이러한 프로그램을 실행합니다. cgroups 버전 2만 사용할 수 있습니다.

RHEL에서는 다음과 같은 네트워킹 관련 cgroup eBPF 프로그램을 사용할 수 있습니다.

  • BPF_PROG_TYPE_SOCK_OPS: 커널은 다양한 TCP 이벤트에서 이 프로그램을 호출합니다. 프로그램은 사용자 지정 TCP 헤더 옵션을 포함하여 커널 TCP 스택의 동작을 조정할 수 있습니다.
  • BPF_PROG_TYPE_CGROUP_SOCK_ADDR: 커널은 연결하는 동안 이 프로그램을 호출하고, ,sendto,recvmsg,getpeername, getsockname 작업을 호출합니다. 이 프로그램은 IP 주소와 포트를 변경할 수 있습니다. 이 기능은 eBPF에서 소켓 기반 NAT(네트워크 주소 변환)를 구현할 때 유용합니다.
  • BPF_PROG_TYPE_CGROUP_SOCKOPT: 커널은 setsockoptgetsockopt 작업 중에 이 프로그램을 호출하고 옵션을 변경할 수 있습니다.
  • BPF_PROG_TYPE_CGROUP_SOCK: 커널은 소켓 생성, 소켓 릴리스 및 주소에 바인딩하는 동안 이 프로그램을 호출합니다. 이러한 프로그램을 사용하여 작업을 허용 또는 거부하거나 통계에 대한 소켓 생성을 검사하기 위해서만 사용할 수 있습니다.
  • BPF_PROG_TYPE_CGROUP_SKB: 이 프로그램은 수신 및 송신에서 개별 패킷을 필터링하고 패킷을 수락하거나 거부할 수 있습니다.
  • BPF_CGROUP_INET4_GETPEERNAME,BPF_CGROUP_INET6_GETPEERNAME,BPF_CGROUP_INET4_GETSOCKNAME, BPF_CGROUP_INET6_GETSOCKNAME: 이러한 프로그램을 사용하면 getsocknamegetpeername 시스템 호출의 결과를 재정의할 수 있습니다. 이 기능은 eBPF에서 소켓 기반 NAT(네트워크 주소 변환)를 구현할 때 유용합니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

스트림 구문 분석

스트림 구문 분석기는 특수 eBPF 맵에 추가된 소켓 그룹에서 작동합니다. 그런 다음 eBPF 프로그램은 커널이 해당 소켓에서 수신하거나 전송하는 패킷을 처리합니다.

다음 스트림 구문 분석기 eBPF 프로그램은 RHEL에서 사용할 수 있습니다.

  • BPF_PROG_TYPE_SK_SKB: eBPF 프로그램은 소켓에서 수신된 패킷을 개별 메시지로 구문 분석하고, 커널에 해당 메시지를 삭제하거나 그룹의 다른 소켓으로 전송하도록 지시합니다.
  • BPF_PROG_TYPE_SK_MSG: 이 프로그램은 송신 메시지를 필터링합니다. eBPF 프로그램은 패킷을 개별 메시지로 구문 분석하고 이를 승인하거나 거부합니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

SO_REUSEPORT 소켓 선택

이 소켓 옵션을 사용하면 여러 소켓을 동일한 IP 주소 및 포트에 바인딩할 수 있습니다. eBPF가 없으면 커널은 연결 해시에 따라 수신 소켓을 선택합니다. BPF_PROG_TYPE_SK_REUSEPORT 프로그램을 사용하면 수신 소켓을 완전히 프로그래밍할 수 있습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

흐름 dissector

커널이 전체 프로토콜 디코딩을 거치지 않고 패킷 헤더를 처리해야 하는 경우 해제됩니다. 예를 들어 tc 하위 시스템, 다중 경로 라우팅, 본딩 또는 패킷 해시 계산 시 발생합니다. 이 경우 커널은 패킷 헤더를 구문 분석하고 패킷 헤더의 정보로 내부 구조를 채웁니다. BPF_PROG_TYPE_FLOW_DISSECTOR 프로그램을 사용하여 이 내부 구문 분석을 교체할 수 있습니다. RHEL의 eBPF의 IPv4 및 IPv6을 통해 TCP 및 UDP만 해제할 수 있습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

TCP 정체 제어

struct tcp_congestion_oops 콜백을 구현하는 BPF_PROG_TYPE_STRUCT_OPS 프로그램을 사용하여 사용자 지정 TCP 혼잡 제어 알고리즘을 작성할 수 있습니다. 이러한 방식으로 구현된 알고리즘은 기본 제공 커널 알고리즘과 함께 시스템에서 사용할 수 있습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

캡슐화가 있는 경로

다음 eBPF 프로그램 유형 중 하나를 터널 캡슐화 속성으로 라우팅 테이블의 경로에 연결할 수 있습니다.

  • BPF_PROG_TYPE_LWT_IN
  • BPF_PROG_TYPE_LWT_OUT
  • BPF_PROG_TYPE_LWT_XMIT

이러한 eBPF 프로그램의 기능은 특정 터널 구성으로 제한되며 일반적인 캡슐화 또는 캡슐화 솔루션을 생성할 수 없습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

소켓 조회

bind 시스템 호출의 제한 사항을 우회하려면 BPF_PROG_TYPE_SK_LOOKUP 유형의 eBPF 프로그램을 사용합니다. 이러한 프로그램은 새로 들어오는 TCP 연결 또는 UDP 패킷에 대해 연결되지 않은 소켓에 대해 수신 대기 소켓을 선택할 수 있습니다.

RHEL 8.7에서 Red Hat은 지원되지 않는 기술 프리뷰로 이 기능을 제공합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.