IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 用户态协议栈之tcp/ip设计 -> 正文阅读

[网络协议]用户态协议栈之tcp/ip设计

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 {
        unsigned char dst[ETH_LEN]; // 目的地址
        unsigned char src[ETH_LEN]; // 源地址
        unsigned short proto;   //      类型
};

2 IP帧头
在这里插入图片描述
对于IP协议是再网络层传输
比较需要注意点: 1 4位版本号就是对应我们常说的ipv4或ipv6;
2 而对于ip包的大小主要分为两块一个头大小,数据大小16位(总共就是65535字节 64KB;
而对于传输到以太网数据链路层时候只有1500字节,所以会分成很多个MTU传输发送。
3 TTL:IP包生存时间。例如ping www.baidu.com. 每经过一个网关-1,比如达到某个网关等于0时候,就原路返回目标不可达。

对于以太网帧中有proto类型,而ip帧头中也有proto,用来判断上一层是采用什么协议传输的

struct iphdr{
        unsigned char version:4,//版本号
                      hdrlen:4; // 首部长度
        unsigned char tos;      // 服务类型 
        unsigned short totlen;  // 总长度  一次性65535 64k
        unsigned short id; // 每个数据包都有一个id,tcp中也有一个seq num,与此无关
        unsigned short flag:3,
                       offset:13;
        unsigned char ttl;//生存时间    
        unsigned char proto;// 
        unsigned short check; //校验
        unsigned int sip;
        unsigned int dip;
};

3 udp帧头
在这里插入图片描述
udp对于包没有一个固定的id序号,所以再udp发送的时候,再协议上无法实现对包的定义,无边界。
MAC地址是以太网产物
IP地址是网络层产物
端口是传输层产物

struct udphdr{ // 帧头
        unsigned short sport;
        unsigned short dport;
        unsigned short length;
        unsigned short check;
}

4 常见的物理硬件
对于日常中的常见的硬件再那一层。
NAT:网络地址映射,将port和ip作为映射时候,工作再传输层
路由器:网络层
交换机:二层交换机只适合再局域网内,需要跨网络,则需要引入三层交换机或者路由器。
负载均衡:常见的产品有nginx(应用层,对http协议解析),haproxy(对tcp端口,传输层),LVS(对ip地址,网络层),F5(以太网Mac地址,再数据链路层)

5 ARP协议帧
局域网内全部机器进行广播,具体原理:
1 例如一台机器广播我是192.168.2.4(1~255之间),你的Mac地址是多少,
2 其它机器接受到广播的ARP协议,就会返回我是192.168.2.6某某,我的Mac地址是多少;
3 主动广播的机器收到返回协议响应,再本地简历一张ARP表(主要保存IP地址和Mac地址等
查看ARP表:ARP -a
在这里插入图片描述

struct arphdr {
	unsigned short h_type;
	unsigned short h_proto;
	unsigned char h_addrlen;
	unsigned char protolen;
	unsigned short oper;
	unsigned char smac[ETH_ALEN];
	unsigned int sip;
	unsigned char dmac[ETH_ALEN];
	unsigned int dip;
};

6 ICMP协议帧
在这里插入图片描述

struct icmphdr {
	unsigned char type;
	unsigned char code;
	unsigned short check;
	unsigned short identifier;
	unsigned short seq;
	unsigned char data[32];
};
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:03:21 
 
开发: 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/25 21:30:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码