协议栈实现并发(架构设计)


TCP/UDP 协议栈实现并发

**用 dpdk 封装好各种 **POSIX API : send, recv, accept, listen, bind...

协议栈架构

main_loop (网络收/发包)

  • 从网卡中取数据 rx_burst 存入 Ring enqueue
  • 从 Ring 中取数据 dequeue, 发送 tx_burst 到网卡

1756699918499-f251e249-5aca-4154-a30c-41d84a4013a6.jpeg

1756699860406-37739f7f-be1f-4cff-8a50-e1d826cae7e8.jpeg

pkt_process (解析数据包) + tcp_server_entry

1756800152468-7957ce98-12d8-4204-9bea-bbdc58468a48.jpeg

” 三山夹两盆 “

两种方式实现并发

注意: 需要修改 RING 的名字

  • DPDK 要求rte_ring_create 函数创建的多个Ring, 名字应当不同
  • 否则多连接创建多个同名Ring, 会报段错误

一请求一线程

实现一个 epoll

普通的 epoll 不能直接使用, 需要实现一个_**用户态 **_epoll