用户态协议栈之tcp/ip设计

用户态协议栈旨在减少数据拷贝,通过网卡的nmap和DMA直接通道实现零拷贝。本文介绍了用户态协议栈的原理,包括nmap的工作方式、网卡驱动的运行位置以及以太网、IP、UDP帧头的含义。此外,还讨论了常见硬件在网络各层的作用,如NAT、路由器、交换机和ARP协议。
摘要由CSDN通过智能技术生成

1 解决问题

对于服务器而言,正常的接受一帧Data的过程,客户端先通过网络发送一帧数据到网卡,再经过协议栈,最后通过系统调用叨叨应用程序。具体的流程图如下:
在这里插入图片描述
针对上面的两个流程,涉及到两次拷贝(网卡拷贝到协议栈,协议栈拷贝到应用程序),所以就产生了用户态协议栈,将协议栈网络解析作为应用程序的一部分。
在这里插入图片描述

2 用户态协议栈原理

1 定义组成图
用户态协议栈主要是用来减少拷贝。采用通过网卡的nmap,DMA方式,将网卡映射到内存中,底层采用DMA直接通道。应用程序直接去内存中取。DMA无copy,copy赋值是要通过cpu指令操作,而此DMA不需要cpu,而是自己操作的,零拷贝
在这里插入图片描述
2 nmap原理
对于磁盘文件,网卡,蓝牙都是可以直接采用mmap映射到内存中。DMA方式避开了cpu,但是需要一条总线底层提供,映射完后,数据传输完成到内存后,给cpu触发一个中断通知cpu。
3 网卡的原理
网卡的作用是将光电信息转数字信号或者数字信号转光电信息(DA转换或AD转换).网卡驱动不是运行再网卡上,而是运行再内核上,使网卡正常工作。
在这里插入图片描述

3 协议帧头含义

我们能娶到一帧完整的数据方案?
常见的三种方案:1 raw socket(原生socket) 2 开源框架(netmap) 3 商业框架dpdk

目前主要分析netmap开源组件。目前主要采用udp来处理,写demo相对来说简单。

1 以太网帧头
在这里插入图片描述
对于以太网协议注意点 Mac地址,网卡上的Mac地址可修改,对于网络中的Mac地址,IP地址,端口,再计算机无对应的固件,都只是在协议栈上只是一个字段名字而已 。数据传输的最大字节数是1500字节。
以太网协议是针对数据链路层

// 以太网的帧头
struct ethhdr {
   
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰恒谷

你的鼓励是我最大创作动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值