最新USB网卡收发数据分析_usb网卡数据传输、,字节跳动面试

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

      RX packets:42 errors:0 dropped:0 overruns:0 frame:0
      TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:4478 (4.3 KiB)  TX bytes:4478 (4.3 KiB)

ls

bind module new_id remove_id uevent unbind

echo “1-1.1.1:1.0” > bind

[37493.831496] lan78xx_probe()
[37494.126379] lan78xx 1-1.1.1:1.0 (unnamed net_device) (uninitialized): No External EEPROM. Setting MAC Speed
[37494.144756] libphy: lan78xx-mdiobus: probed
[37494.264385] lan78xx 1-1.1.1:1.0 (unnamed net_device) (uninitialized): int urb period 64
[37494.276093] lan78xx_phy_init()

ls

1-1.1.1:1.0 module remove_id unbind
bind new_id uevent

ifconfig -a

eth0 Link encap:Ethernet HWaddr B8:27:EB:8A:BC:F4
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:42 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4478 (4.3 KiB) TX bytes:4478 (4.3 KiB)

echo “1-1.1.1:1.0” > unbind

ls

bind module new_id remove_id uevent unbind

ifconfig -a

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:42 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4478 (4.3 KiB) TX bytes:4478 (4.3 KiB)


#### 3. 数据收发


以 PC1 数据链路层发送一个数据包给 PC2 数据链路层为例  
 ![请添加图片描述](https://img-blog.csdnimg.cn/2cd065c44828474f944c3485170f9ffb.png)  
 rx



tasklet_schedule(&dev->bh); // USB 收到数据时,产生中断,触发该任务
lan78xx_bh()
lan78xx_rx_bh()
rx_submit()
usb_fill_bulk_urb() // 从 USB 读取数据
tasklet_schedule(&dev->bh);
lan78xx_bh()
rx_process()
lan78xx_rx()
lan78xx_skb_return()
-----上面为驱动-------下面为数据链路层-----------------------
netif_rx() // 送入数据链路层


tx



struct net_device_ops {
.ndo_start_xmit = lan78xx_start_xmit,
}
-----上面为数据链路层-------下面为驱动-----------------------
lan78xx_start_xmit()
skb_queue_tail() // 插入队列
tasklet_schedule(&dev->bh); // 触发任务调度 lan78xx_bh
lan78xx_bh()
lan78xx_tx_bh()
skb_dequeue() // 取出数据
------上面为驱动网络部分--------下面为驱动 USB 部分-----------
usb_fill_bulk_urb() // 填充数据到 USB
usb_submit_urb() // USB 发送数据


**RX** call tree:目前理得有点混乱,大致过程是 USB 硬件产生中断,驱动去捞数据,经过 rx\_process() 处理后,最终调用 netif\_rx(skb),将数据送入内核网络子系统,进一步处理 skb。  
 **TX** call tree:内核网络子系统最终调用 ndo\_start\_xmit() 发送数据,该接口最终由设备驱动实现,本示例为 lan78xx\_start\_xmit(),最终将数据通过 USB 发送给 LAN7515 网卡,网卡再经过自己的硬件加工,最终将数据发送到网线。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/54f89b7f0662402bb3c1151881ff0550.png)


### 打印帧头



static netdev_tx_t
lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
{
printk(“%s()\n”, FUNCTION);

struct ethhdr *eth = eth_hdr(skb);
printk(KERN_INFO “DEST:” MAC_FMT “\n”, MAC_ARG(eth->h_dest));
printk(KERN_INFO “SOURCE:” MAC_FMT “\n”, MAC_ARG(eth->h_source));

struct iphdr *ip_header = ip_hdr(skb);
printk(“daddr:%x is %d.%d.%d.%d\n”, ip_header->daddr, inet_ntoa(ip_header->daddr));
printk(“saddr:%x is %d.%d.%d.%d\n\n”, ip_header->saddr, inet_ntoa(ip_header->saddr));



[44851.676380] lan78xx_start_xmit()
[44851.680906] DEST:08:00:27:38:fc:d0
[44851.685656] SOURCE:b8:27:eb:8a:bc:f4
[44851.690571] daddr:6401a8c0 is 192.168.1.100
[44851.696164] saddr:101a8c0 is 192.168.1.1


打印 TX 方向,驱动送给网卡的数据帧中的目的 MAC、源 MAC、目的 IP、源 IP,即上图中 ① 处的数据帧头。



![img](https://img-blog.csdnimg.cn/img_convert/b9fd7cdefc663ab3bb8e1ff5874136d0.png)
![img](https://img-blog.csdnimg.cn/img_convert/1ee8990f535f571333f2f522e4783755.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

戳这里获取](https://bbs.csdn.net/topics/618658159)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值