![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络
文章平均质量分 94
计算机网络知识
Chaim16
无简介
展开
-
Linux是如何接收数据包的
内核是通过注册的方式来实现的。igb_open调用了igb_setup_all_tx_resources和igb_setup_all_rx_resources,在igb_setup_all_rx_resources这一步,分配了RingBuffer,并建立内存和Rx队列的映射关系。每一个驱动程序会使用module_init向内核注册一个初始化函数,当驱动程序被加载时,内核会调用这个函数,然后内核就知道了该驱动的相关信息,比如igb网卡驱动的igb_driver_name和igb_probe函数地址。原创 2023-12-10 21:19:05 · 938 阅读 · 0 评论 -
Linux是如何发送数据包的
软中断是由内核线程来运行的,该线程会进入到 net_tx_action 函数,在该函数中能获取到发送队列,并也最终调用到驱动程序里的入口函数 dev_hard_start_xmit。当满足真正发送条件的时候,无论调用的是 __tcp_push_pending_frames 还是 tcp_push_one 最终都实际会执行到 tcp_write_xmit。对于TCP协议来说,那就是tcp_sendmsg,在这个函数中,内核会申请一个内核态的skb内存,将用户发送的数据拷贝进去。因为内存还没有清理。原创 2023-12-09 01:54:49 · 954 阅读 · 0 评论