Chinaunix

标题: IEEE 802.3以太网MAC子层为什么不能运行于用户态,而只能运行于内核态? [打印本页]

作者: liklstar    时间: 2014-05-15 12:47
标题: IEEE 802.3以太网MAC子层为什么不能运行于用户态,而只能运行于内核态?
本帖最后由 liklstar 于 2014-05-15 12:47 编辑

IEEE 802.3以太网MAC子层为什么不能运行于用户态,而只能运行于内核态?同样,为什么TCP/IP要运行于内核态,而不能运行于用户态?
作者: qxhgd    时间: 2014-05-15 13:59
个人理解,不一定非得在内核态,只是基于效率或其他设计上的考虑,将其放到内核态了。
作者: liklstar    时间: 2014-05-15 15:05
我猜:可能是基于“分层”的思想!为了避免用户应用程序过于复杂,通过操作系统向用户屏蔽网络实现,因此才把具体的网络协议实现放入内核,仅向用户进程提供系统调用!

如果是这样,那么在特殊情况下,是否可能由用户进程处理网络协议?也就是说:让网络协议运行于用户态?
作者: __SevenEleven    时间: 2014-05-15 16:51
TCP, IP, MAC, 这些简单点理解就是驱动,它们需要大量的与kernel打交道,如果设计在用户态,不停的使用系统调用会给内核和系统造成很大的负担
作者: mordorwww    时间: 2014-05-17 16:27
Dpdk就是用户态的协议栈
作者: yshwuxian    时间: 2016-06-06 16:32
mordorwww 发表于 2014-05-17 16:27
Dpdk就是用户态的协议栈


毛,dpdk离协议栈十万八千里
作者: mordorwww    时间: 2016-06-06 17:52
yshwuxian 发表于 2016-06-06 16:32
毛,dpdk离协议栈十万八千里


不太准确

dpdk相当于用户态网卡驱动
网卡驱动都放到了用户态,拉磨协议栈也放用户态了。
一般会把用户态协议栈也随DPDK给你
作者: yshwuxian    时间: 2016-06-06 20:08
mordorwww 发表于 2016-06-06 17:52
不太准确

dpdk相当于用户态网卡驱动


自己在上面开发的当然另算

我如果只用dpdk做软交换机,要个毛的协议栈;同样我如果基于dpdk做了个交换机送给客户,也不能说dpdk就包含了软交换机




作者: mordorwww    时间: 2016-06-07 08:43
yshwuxian 发表于 2016-06-06 20:08
自己在上面开发的当然另算

我如果只用dpdk做软交换机,要个毛的协议栈;同样我如果基于dpdk做了个交换 ...



你用DPDK做三层交换机的话,你需要支持IP协议的说
作者: yshwuxian    时间: 2016-06-07 08:47
这和协议栈也没多大关系啊,网卡rss,fdir都能读到传输层的数据,协议栈最大的作用是维持网络连接的状态,我只关心单个数据包的数据有必要用协议栈么?华为搞的pof支持任意协议的转发,也没见它用协议栈
作者: mordorwww    时间: 2016-06-07 08:50
yshwuxian 发表于 2016-06-07 08:47
这和协议栈也没多大关系啊,网卡rss,fdir都能读到传输层的数据,协议栈最大的作用是维持网络连接的状态,我 ...


根据目的IP找路需要支持不
作者: yshwuxian    时间: 2016-06-07 09:01
example/中的l3fwd_xxx,app/中的test_acl

根据mbuf读到iphdr的字段,这也算协议栈?
作者: mordorwww    时间: 2016-06-07 09:48
yshwuxian 发表于 2016-06-07 09:01
example/中的l3fwd_xxx,app/中的test_acl

根据mbuf读到iphdr的字段,这也算协议栈?



你只要读了IP头,根据IP头做了处理,那就是IP协议栈
IP协议栈当然内容很多,不能因为只做了一部分就不是协议栈,不是IP协议栈那还能是什么
作者: nswcfd    时间: 2016-06-07 11:56
大家对stack的理解不一样,求同存异
作者: nswcfd    时间: 2016-06-07 11:59
好多人在用dpdk,弱弱的问一下,有在docker里跑dpdk的案例么?
作者: yshwuxian    时间: 2016-06-07 17:35
mordorwww 发表于 2016-06-07 09:48
你只要读了IP头,根据IP头做了处理,那就是IP协议栈
IP协议栈当然内容很多,不能因为只做了一部分就 ...


无力吐槽。
1.网卡硬件就能读到4层协议字段从而做到硬件RSS/FDIR,难道网卡本身内置协议栈?
2.我手头刚好有个程序,从裸二进制数据包解析出ip层字段,不用任何第三方代码完全手工实现,不超过300行代码,难道300行代码就能实现协议栈?
3.华为的pof,能自定义任意转发协议,不管层次,这么说它内置了世界上所有协议的协议栈?
作者: yshwuxian    时间: 2016-06-07 17:36
本帖最后由 yshwuxian 于 2016-06-07 17:39 编辑

服务器抽风了??
作者: mordorwww    时间: 2016-06-07 17:59
本帖最后由 mordorwww 于 2016-06-07 18:06 编辑
yshwuxian 发表于 2016-06-07 17:35
无力吐槽。
1.网卡硬件就能读到4层协议字段从而做到硬件RSS/FDIR,难道网卡本身内置协议栈?
2.我手头 ...



1.网卡硬件就能读到4层协议字段从而做到硬件RSS/FDIR,难道网卡本身内置协议栈?
   这个只是做分发,不是完整的任何协议栈功能或者子功能,IP tcp udp 协议栈从来不定义这样的功能或者实现
2.我手头刚好有个程序,从裸二进制数据包解析出ip层字段,不用任何第三方代码完全手工实现,不超过300行代码,难道300行代码就能实现协议栈?
  IP包本来就是裸二进制的,第三方第几方有什么区别。IP协议栈RFC一大堆,比如只实现一个RFC难道就不是协议栈?或者实现一个大RFC的部分功能,那不是协议栈功能那应该怎么称呼呢?
3.华为的pof,能自定义任意转发协议,不管层次,这么说它内置了世界上所有协议的协议栈?
  pof需要先配置为某种协议,配置为某种协议自然就实现了这种协议。能一个芯片一个系统实现很多协议本来就是SDN可能的部分目标,能不能做到是另一码事,别再纠缠这个




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2