学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送
来源:互联网 发布:农村淘宝合伙人加盟 编辑:程序博客网 时间:2024/05/22 00:31
这篇文章主要介绍网络层的数据是怎么通过接口层将数据发送出去的,在开始之前我们还是再来看一下softnet_data这个很重要的结构体:
struct softnet_data { struct list_head poll_list; struct sk_buff_head process_queue; /* stats */ unsigned int processed; unsigned int time_squeeze; unsigned int received_rps;#ifdef CONFIG_RPS struct softnet_data *rps_ipi_list;#endif#ifdef CONFIG_NET_FLOW_LIMIT struct sd_flow_limit __rcu *flow_limit;#endif struct Qdisc *output_queue; struct Qdisc **output_queue_tailp; struct sk_buff *completion_queue;...
在数据包输出的时候,其中比较重要的成员是output_queue和completion_queue, 前者是等待发送的队列,后者是完成发送等待释放的队列,比如可能在等待ACK等。
下面我们来了解一下接口处数据包发送的基本流程:
下面这个图是kernel2.6版本dev_queue_xmit()的处理流程,新的kernel已经有很多不一样了,但是可以作为参考
关于接口层数据包的发送,我自己对这一块也不是有太多的兴趣,但是在网上找到几篇介绍的比较清楚的文章,这里就直接贴过来,不浪费口舌了:
Linux网络之设备接口层:发送数据包流程dev_queue_xmit
Linux网络之设备接口层:发送数据包流程dev_queue_xmit(二)dev_queue_xmi函数详解
新kernel的代码可能刚开始不是那么好看懂,可以先了解一下旧kernel的代码然后看新的代码会容易些。
这篇文章没有详细的介绍发送过程,但是需要记住一个比较重要的函数dev_hard_start_xmit,它是将数据包交给网卡驱动进行发送的接口:
dev_hard_start_xmit
继续看dev_hard_start_xmit,这个函数比较简单,调用xmit_one来发送一个到多个数据包了
对于xmit_one这个来讲比较简单了,下面代码中列出了xmit_one, netdev_start_xmit,__netdev_start_xmit 这个三个函数,其目的就是将封包送到driver的tx函数了..中间在送往driver之前,还会经历抓包的过程,本文不介绍抓包的流程了。其中ops->ndo_start_xmit就是driver注册的发包函数,这样数据包就交给了驱动处理。
接口层的分析到这里告一段落,如果想要了解更多关于接口层的东西可以访问这里
了解linux网络协议栈(三)——协议栈实现
后面我们将进入广阔的网络层以及传输层的分析:
阅读全文
0 0
- 学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送
- 学习Linux-4.12内核网路协议栈(2.2)——接口层数据包的接收(上半部)
- 学习Linux-4.12内核网路协议栈(2.3)——接口层数据包的接收(下半部)
- 学习Linux-4.12内核网路协议栈(3.2)——网路层的发包处理
- 学习Linux-4.12内核网路协议栈(2.1)——接口层加快传输速率的特性
- 学习Linux-4.12内核网路协议栈(3.1)——网路层的收包处理
- 学习Linux-4.12内核网路协议栈(1.3)——协议栈的初始化(sock_init)
- 学习Linux-4.12内核网路协议栈(1.2)——协议栈的初始化(sk_buff)
- 学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init)
- 学习Linux-4.12内核网路协议栈(1.1)——系统的初始化(do_initcalls)
- 学习Linux-4.12内核网路协议栈(1.8)——网络设备驱动模块的加载
- 学习Linux-4.12内核网路协议栈(1.5)——协议栈的初始化(inet_init主要数据结构)
- 学习Linux-4.12内核网路协议栈(1.6)——协议栈的初始化(inet_init实现过程)
- 学习Linux-4.12内核网路协议栈(0)——前言
- 学习Linux-4.12内核网路协议栈(1.7)——网络设备的初始化(struct net_device)
- 【Linux 内核网络协议栈源码剖析】数据包发送
- 【Linux 内核网络协议栈源码剖析】数据包发送
- Linux网络之设备接口层:发送数据包流程dev_queue_xmit
- Number Sequence
- 使用SMTP发送邮件报错:Expected response code 250 but got code "553", with message "553 Envolope sender mis...
- hdu 6181 Two Paths(最短路,spfa)
- bzoj1597 [Usaco2008 Mar]土地购买
- 浏览器关闭后,Session会话结束了么?
- 学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送
- SQL查询语句包
- Chinese Rings 矩阵快速幂
- macaca app-inspector环境搭建
- Ubuntu简便安装nginx,
- 数据结构与算法:数组(一)
- 静态二维数组
- vue目录结构
- php+layui创建表格使用实例