socket隔离了用户进程和协议栈,RX/TX queue隔离了协议栈和设备驱动
隔离有隔离的好处,但也有坏处!!目前存在一种 突破这种隔离的方法,让socket直接深入到设备层直接poll skb!!注意,这是一个poll操作,并不是让socket直接处理协议栈流程。socket直接poll的意思是说,socket在队列中没有读到数据包的时候,并不是睡眠,然后等待NET RX内核线程将数据包放入队列后将其唤醒,而是直接去问设备:现在有数据包吗?如果有,我直接带走它们去协议栈,而不需要你送它们去了。这是一种“拉”的方式,而不是以往的那种“推”的方式,拉和推的区别在于,对于接收者,拉是同一个实体,是主动的,而推则是被动的。
socket自身所在的执行体来主动拉获取数据包进行处理。避免了任务数据转交(内核-用户)导致的切换问题,以及延时问题!!