#1 Components
- NIC driver: NIC에 명령어를 전달하기 위한 호스트 라이브러리
- Packet buffer: 네트워크 패킷을 송수신하기 위한 버퍼, 패킷 풀에 의해 관리되며 헤더 + 페이로드의 데이터를 저장
- Ring buffer: 디스크립터를 보관하는 버퍼, 버퍼의 사이즈가 네트워크가 처리 가능한 요청의 개수
- Descriptor: 패킷의 메타데이터 및 패킷 버퍼의 페이로드 주소를 보관
- Header/Tail: 처리한 요청의 개수를 확인하기 위한 것으로 링버퍼의 포인터
- DMA: NIC이 메모리에 수신한 패킷을 전달하기 위한 하드웨어 엔진
#2 RX Process
- 패킷 버퍼 풀에서 빈 패킷 버퍼를 할당
- 패킷 버퍼의 주소를 디스크립터에 저장
- 드라이버를 통해 NIC 레지스터에 링버퍼의 주소, 길이, 테일을 전달
- NIC이 새로운 패킷을 수신하면, 링버퍼의 디스크립터가 보관하고 있는 패킷 버퍼 주소에 페이로드를 DMA로 전달하고 테일을 올림
- 드라이버는 테일 포인터를 읽고 해당 링버퍼의 디스크립터의 패킷 버퍼 주소를 통해 새로운 패킷을 수신
그림 출처
- 그림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 |
---|