| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 用户态协议栈-TCPIP -> 正文阅读 |
|
[网络协议]用户态协议栈-TCPIP |
用户态协议栈: 本来协议栈是在系统层,用户态是调用到应用层来写的。
? 内核态协议栈处理: 两次拷贝:网卡copy到协议栈 协议栈copy到应用程序 将网卡内存映射到内存中间,dma方式,内存直接通道,减少网卡到协议栈拷贝,减少一次拷贝 dma没有拷贝,dma方式,cpu不需要干预,网卡数据直接到内存,零拷贝,即cpu没有干预 mmap原理: dma方式:数据映射完,会给cpu发送触发中断。 网卡驱动运行在哪里:运行在内核中,nic子系统,使网卡正常工作的 ? 从网卡中取到一帧完整的数据: ? 实现一个协议栈: ? ? 以太网协议头: ? #define ETH_ALEN?? ?6 struct ethhdr { ip头:
? UDP头: MAC地址是以太网产物, 路由器工作在网络层的 二层交换机在局域网内,在链路层,只对mac地址进行交换 在网络层,则需要路由器,或者是三层交换机 nat 需要对传输层协议进行, 负载均衡LB:
netmap 依赖库,翻墙,url以浏览器方式下载 ? 将网卡映射到内存中间,应用程序之间在网卡中取数据 虚拟机中将改为ens33->etho #include <sys/poll.h>
#include <net/netmap_user.h>? #define PROTO_IP?? ?0x0800 #define PROTO_UDP?? ?17 struct udppkt { int main() { ?? ?struct nm_desc *nmr = nm_open("netmap:eth0", NULL, 0, NULL);//将网卡的数据映射到内存中,不会再走内核协议栈,etch0被netmap接管 ?? ?pfd.fd = nmr->fd; ?? ?while (1) { ?? ??? ??? ?if (ntohs(eh->h_proto) == PROTO_IP) { ?? ??? ??? ??? ?struct udppkt *udp = (struct udppkt*)stream; ?? ??? ??? ??? ??? ?struct in_addr addr; ?? ??? ??? ??? ??? ?int udp_length = ntohs(udp->udp.len); ?? ??? ??? ??? ??? ?udp->body[udp_length-8] = '\0'; ?? ??? ??? ??? ??? ?printf("icmp ---------- --> %d, %x\n", icmp->icmp.type, icmp->icmp.check); ?? ??? ??? ??? ??? ??? ?//printf("icmp check %x\n", icmp_rt.icmp.check); ?? ??? ??? ??? ?} else { ?? ??? ??? ??? ?struct arppkt *arp = (struct arppkt *)stream; ?? ??? ??? ??? ?if (arp->arp.dip == inet_addr("192.168.2.217")) { libpcap 原生socket read :从外存读到内存 外界向网卡发送数据时,网卡将数据映射到内存中,内存中用循环队列存储,只要记得队列都在哪, 0拷贝运用场景 ntohs 网络字节 操作2字节以上的 必须做网络字节序转换 网络字节转本地
arp:局域网内,广播,我是192.168.0.1 你的mac地址是多少,本地建立arp表,ip地址是多少,mac地址是多少 windows下 查看arp表: UDP优点 用户态协议栈使用场景:网关,负载均衡,网络防火墙,性能,
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:58:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |