今天没有按照预定计划把Xen的network搞清楚,晚上抽了点时间看了下,暂时先写点吧...
其实我一直没有搞清楚整个网络发包手包的过程具体的是怎么样的,抽象的来说知道大概的意思:
发包的时候,domU的net-frontend发个tx_request到ring上,然后通过shared-memory-page把包数据从domU传到dom0,然后dom0中的net-backend收到这个request后,将传送过来的数据包通过真实的驱动传到NIC上,物理上传送数据,如果成功,则将该tx_request所占据的ring写上response,传送回domU,不成功的话则写上出错信息,来决定是否重发;
收包的时候,NIC收到包通过DMA传到DMA ring上,之后dom0通过真实的driver将DMA ring上的包转成skb_buffer,然后通过net-backend发送一个rx_request给domU,并通过shared_memory_page将数据包传送给domU,之后domU写上rx_response。
以上是通过这一段时间的学习想出来的,通俗来说只是一段YY,正确性不敢保证,更主要的是之中的细节一点都没有头绪,比如说:
Transmit的时候,domU和dom0之间数据包的传输到底是怎么样的,一个shared_memory_page又能代表什么呢?包应该是在domU的协议层就封装好了,dom0的驱动和单纯linux的驱动所做的工作有什么不同呢?如果包的大小超过了MTU,那么是又backend来进行segmentation还是又NIC硬件来做呢?<