#1 Components

  • NIC driver: NIC에 명령어를 전달하기 위한 호스트 라이브러리 
  • Packet buffer: 네트워크 패킷을 송수신하기 위한 버퍼, 패킷 풀에 의해 관리되며 헤더 + 페이로드의 데이터를 저장
  • Ring buffer: 디스크립터를 보관하는 버퍼, 버퍼의 사이즈가 네트워크가 처리 가능한 요청의 개수
  • Descriptor: 패킷의 메타데이터 및 패킷 버퍼의 페이로드 주소를 보관
  • Header/Tail: 처리한 요청의 개수를 확인하기 위한 것으로 링버퍼의 포인터
  • DMA: NIC이 메모리에 수신한 패킷을 전달하기 위한 하드웨어 엔진

#2 RX Process

  1. 패킷 버퍼 풀에서 빈 패킷 버퍼를 할당
  2. 패킷 버퍼의 주소를 디스크립터에 저장
  3. 드라이버를 통해 NIC 레지스터에 링버퍼의 주소, 길이, 테일을 전달
  4. NIC이 새로운 패킷을 수신하면, 링버퍼의 디스크립터가 보관하고 있는 패킷 버퍼 주소에 페이로드를 DMA로 전달하고 테일을 올림
  5. 드라이버는 테일 포인터를 읽고 해당 링버퍼의 디스크립터의 패킷 버퍼 주소를 통해 새로운 패킷을 수신

그림 1. Process of Packet Receive

 

그림 출처

- 그림1: https://stackoverflow.com/questions/36625892/descriptor-concept-in-nichttps://stackoverflow.com/questions/36625892/descriptor-concept-in-nic

'컴퓨터 과학 > 네트워크' 카테고리의 다른 글

DPDK (Data Plane Development Kit)  (0) 2024.05.27

+ Recent posts