
协议森林
文章平均质量分 77
协议森林
这个作者很懒,什么都没留下…
展开
-
【协议森林】Linux下用户态与内核态通信netlink机制说明与使用
1.简介Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。一般来说用户空间和内核空间的通信方式有三种:/proc、ioctl、Netlink。而前两种都是单向的,而Netlink可以实现双工通信。Netlink 相对于系统调用,ioctl 以及 /proc文件系统而言,具有以下优点:netlink使用简单,只需要在include/linux/netlink.h中增加一个新类型的 netlink 协议定义即可,如 #def原创 2021-11-26 16:28:53 · 1098 阅读 · 0 评论 -
【协议森林】Linux下socket编程KEEPALIVE使用与原理
1.简介在实际项目开发中,TCP连接关闭主要有两种情况:1、连接正常关闭,调用close() 、shutdown()连接优雅关闭,send与recv立马返回错误;2、连接的对端异常关闭,比如拔掉网线网络断掉,突然断电。面对上述问题,通常都要检测对端是否处于连接中,主要有两种方法:1、编写心跳包程序,简单的说就是自己的程序加入一条线程,定时向对端发送数据包,查看是否有ACK,根据ACK的返回情况来管理连接。此方法比较通用,一般使用业务层心跳处理,灵活可控,但改变了现有的协议;2、使用TCP的原创 2021-11-22 19:40:58 · 3099 阅读 · 1 评论 -
【协议森林】基于DPDK的原生态协议栈DPDK-ANS
1.简述ANS(加速网络堆栈)是DPDK本地TCP/IP堆栈,也参考FreeBSD实现。ANS提供了一个与Intel DPDK一起使用的用户空间TCP/IP堆栈。2.框架ans:加速网络堆栈过程librte_ans:TCP/IP 堆栈静态库。ANS 使用 dpdk mbuf、ring、memzone、mempool、timer、spinlock。所以在 dpdk 和 ANS 之间零拷贝 mbuf。librte_anssock:应用程序的 ANS 套接字库,ANS 和应用程序之间的零复制。li原创 2021-11-17 10:39:18 · 3684 阅读 · 0 评论 -
【协议森林】基于DPDK的用户态协议栈mTCP
1.背景TCP短连接变得越来越普遍,90%以上的TCP流都是小于32KB的,50%的小于4KB。高速处理TCP短连接对于面向用户的在线服务和后台系统都是一项重要的需求,但是Linux TCP的处理速度峰值是30万/s(来源mTCP: A Highly Scalable User-level TCP Stack for Multicore Systems),而packet I/O可以扩展到千万/s,所以当前的Linux TCP架构的处理速度是跟不上实际需求的。2.MTCP特点mTCP(User-Leve原创 2021-11-16 10:45:19 · 2540 阅读 · 0 评论 -
【协议森林】基于DPDK的F-Stack原理、基本使用及TCP通信
1.简述随着网卡性能的飞速发展,10GE 网卡已经大规模普及,25GE/40GE/100GE 网卡也在逐步推广,linux 内核在网络数据包处理上的瓶颈也越发明显,在传统的内核协议栈中,网卡通过硬件中断通知协议栈有新的数据包到达,内核的网卡驱动程序负责处理这个硬件中断,将数据包从网卡队列拷贝到内核开辟的缓冲区中(DMA),然后数据包经过一系列的协议处理流程,最后送到用户程序指定的缓冲区中。在这个过程中中断处理、内存拷贝、系统调用(锁、软中断、上下文切换)等严重影响了网络数据包的处理能力。操作系统的对应用程原创 2021-11-10 09:06:27 · 5477 阅读 · 0 评论 -
【协议森林】DPDK原理及使用(三)
1.简述利用DPDK来优化网络驱动,通过无锁硬件访问技术加速报文处理,例如Intel网卡的Flow Director技术将指定的TCP流导入到特定的硬件队列,针对每个Connection(连接)分配不同的TX/RX队列。其次,在Socket协议层,我们可以利用DPDK去除共享数据结构的内核锁,降低内核驱动的延时和上下文切换,加速数据处理,从而实现高效的用户态网络协议栈。当然,即使有了用户态网络栈的支持,从程序开发的角度来讲,我们还必须保持这个用户网络栈和内核态网络栈接口的兼容性。理想情况下,所有上层应原创 2021-10-28 20:47:16 · 1665 阅读 · 0 评论 -
【协议森林】DPDK原理及使用(二)
1.简介DPDK如何编译2.方法------------------------------------------------------------------------------ RTE_SDK exported as /home/totosun/Desktop/dpdk-19.08.2/dpdk-stable-19.08.2--------------------------------------------------------------------------------原创 2021-10-26 21:05:14 · 403 阅读 · 0 评论 -
【协议森林】DPDK原理及使用(一)
1.简述数据平面开发套件(DPDK ,Data Plane Development Kit)是由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。2.基于 OS 内核的数据传输有什么弊端?1、中断处理。当网络中大量数据包到来时,会产生频繁的硬件中断请求,这些硬件中断可以打断之前较低优先级的软中断或者系统调用的执行过程,如果这种打断频繁的话,将会产生较高的性能开销。2、内存拷贝。正原创 2021-10-26 20:26:20 · 1141 阅读 · 0 评论 -
【协议森林】Window网络性能调优方法
1.方法在命里提示符中输入: netsh interface tcp show global 后,会发现“接收窗口自动调节级别”是normal,问题就出现在这儿,只要将其关闭即可。Win7系统网速不行怎么办? 三联 同样是一行命令(需要管理员权限进行操作): netsh int tcp set global autotuninglevel=disabled 后会收到“确定”消息,再试试,会感觉网络速度回快那么一点点(嗯,也可能是心理作用)。 如果你现在还在用Windows 7该怎么原创 2021-10-19 20:30:56 · 3049 阅读 · 0 评论 -
【协议森林】iperf3使用方法及原理
1.简述Iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,通过调谐各种参数可以测试TCP的最大带宽,并报告带宽、延迟,最大段和最大传输单元大小等统计信息。Iperf可以运行于Linux/BSD、Unix及Windows等操作系统。2.使用window:iperf3.exe -s客户端:iperf3 -c 192.168.208.200 -t 60 -P 63.原理分析...原创 2021-10-19 14:13:48 · 4844 阅读 · 0 评论 -
【协议森林】Linux TCP/IP网络性能调优方法
1.简述2.proc参数BDP(Bandwidth-delay product,带宽延迟积)数据链路的容量与其端到端延迟的乘积。这个结果就是任意时刻处于在途未确认状态的最大数据量。发送端或接收端无论谁被迫频繁地停止等待之前分组的ACK,都会造成数据缺口,从而必然限制连接的最大吞吐量。无论实际或通告的带宽是多大,窗口过小都会限制连接的吞吐量。所有的TCP/IP调优参数都位于/proc/sys/net/目录:目录默认值含义/proc/sys/net/core/rmem_defaul原创 2021-10-12 14:32:38 · 1546 阅读 · 0 评论 -
【协议森林】LWIP如何使用
1.LWIP为何LWIP(Light Weight Internet Protoco)是瑞士计算机科学院AdamDunkels等人开发开源协议栈。LWIP可移植到操作系统和无操作系统,其重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般只需几十KB的RAM和40 KB左右的ROM,适合在小型嵌入式系统使用。2.LWIP特点LwIP的特性如下:支持协议TCP、UDP、ICMP、IP、ARP、DHCP包括阻塞控制,RTT估算和快速恢复和快速转发的TCP提供专门的内部回调接口(Raw A原创 2021-01-06 14:47:10 · 2154 阅读 · 2 评论 -
【协议森林】IPv6过渡技术之MAP-T/E技术
1. 背景在IPv4向IPv6网络演进的浪潮中,存在着两对主要矛盾的较量,一对是IPv4地址短缺和IPv4业务蓬勃发展之间的矛盾,另一对是IPv6海量的地址空间和IPv6应用的匮乏之间的矛盾。在IPv4方面通过地址复用(A+P)方式似乎缓解了IPv4快速消耗的压力,但是NAT设备投入巨大,各类业务应用也或多或少受到影响。在IPv6发展方面,用户、ICP、ISP以及运营商对IPv4地址枯竭的敏感度...原创 2020-03-25 13:49:20 · 7194 阅读 · 0 评论 -
【协议森林】IPv6过渡技术之隧道和翻译技术
1. 前言我们漫游网络最重要的支撑是IP,其重要性已经无需赘言。在现在设备数量和交互信息指数级爆发的大背景下,IPv4地址已经严重不足,如何过渡到IPv6的问题就显得更为迫切。IPv6采用128位地址格式,地址空间巨大,能够彻底解决IPv4地址不足问题。但是由于IPv6与IPv4不兼容,因此在当前IPv4为主的网络环境下,IPv4向IPv6的平滑过渡就成为IPv6能否成功的关键。2. 主流过...原创 2020-03-22 22:08:47 · 4794 阅读 · 1 评论 -
【协议森林】从抓包解析PPPoe协议
1. PPPOE简介PPPOE协议提供了在广播式的网络中多台主机连接到远端的访问集中器上的一种标准。在这种网络模型中,所有用户的主机都需要能独立的初始化自已的PPP协议栈,而且通过PPP协议本身所具有的一些特点,能实现在广播式网络上对用户进行计费和管理。为了能在广播式的网络上建立、维持各主机与访问集中器之间点对点的关系,那么就需要每个主机与访问集中器之间能建立唯一的点到点的会话。PPPOE协议...原创 2020-02-20 22:43:25 · 1382 阅读 · 0 评论 -
【协议森林】深入浅出理解skb_buff
1.前言在互联网技术里,有两件事最为重要,一个是 TCP/IP 协议,它是万物互联的事实标准;另一个是 Linux 操作系统,它是推动互联网技术走向繁荣的基石。在 Linux内核的协议栈中的实现中,数据结构skb_buff是最关键和最核心的数据,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。本文以及后续关于skb_buff的介绍,均来源于经典著作《深入理解lin...原创 2020-02-17 21:53:19 · 4675 阅读 · 2 评论 -
【协议森林】详解Linux工具iproute2
1. net-toolsnet-tools一般包括ifconfig、route、arp和netstat等工具,一般用来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Ubuntu 18,Arch Linux和CentOS/RHEL 7则...原创 2020-02-10 22:13:53 · 1814 阅读 · 0 评论 -
【编译原理】交叉工具链详解
1、嵌入式开发模型-交叉开发在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。在宿主机执行编译的流程如下:而所谓的交叉编译就是:在一种平台上编译,编译出来的程序,是放到别的平台上运行,即编译的环境和运行的环境不一样,属于交叉的编译,主要和嵌入式开发有关。之所以要有交叉编译,主要原因是:嵌入式系统中的资源太少。2、工具链...原创 2020-02-03 19:03:33 · 9899 阅读 · 0 评论 -
【协议森林】详解大端(big endian)与小端(little endian)
1、字节序字节顺序,又称端序或尾序(英语:Endianness)。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100。且x的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置,这就是所谓的字节序。字节存放的顺序有两种模式:大端模式和小端模式。2、大小端...原创 2020-01-25 18:10:50 · 4161 阅读 · 0 评论 -
【协议森林】详解Netfilter(三)
1、主要处理部分再来回顾一下Netfilter的框架。如果不存在Netfilter框架,则包的流程就是图中的函数调用,比如到本地的是:ip_rcv()->ip_rcv_finish()->ip_local_deliver()->ip_local_deliver_finish()当加上Netfilter的时候,就会在钩子点的地方先调用注册的函数,然后再调用正常流程中的函数。还...原创 2020-01-18 18:08:37 · 1012 阅读 · 0 评论 -
【协议森林】详解Netfilter(二)
1、何为连接跟踪顾名思义,连接跟踪(CONNTRACK)就是跟踪并且记录连接状态。Linux为每一个经过网络协议栈的数据包,根据5元组信息(源IP、目的IP、源端口、目的端口和协议号)来生成一个新的连接记录项(Connectionentry)。此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态。连接跟踪是防火墙模块的状态检测的基础,同时也是地址转换中实现SNAT和DNAT的前...原创 2020-01-11 23:35:34 · 1567 阅读 · 0 评论 -
【协议森林】详解Netfilter(一)
1、Netfilter介绍Netfilter是2.4.x内核引入的,工作在内核空间中,通常结合ip_table内核模块一起使用以构造linux下的防火墙。Linux内核中,netfilter是一个包过滤框架,默认地,它在这个框架上实现了包过滤、状态检测、网络地址转换和包标记等多种功能。因为它设计的开放性,任何有内核开发经验的开发人员,也可以很容易地利用它提供接口,在内核的数据链路层、网络层,实现...原创 2020-01-09 23:02:27 · 2309 阅读 · 2 评论 -
【协议森林】图解TCP三次握手四次挥手
1、TCP为何物传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。进一步了解TCP协议,从协议栈角度看TCP协议。TCP/IP(TCP/IP Protocol S...原创 2020-01-04 14:18:57 · 356 阅读 · 0 评论 -
【Linux内幕】一张图看懂linux内核架构
1.前言Linux内核可以划分为5个组件部分,每个部分的功能定义都非常明确,各组件又为内核的其他组件提供相应的服务。这种划分可以从内核的源码树形结构中看到,在内核源码根目录下每个组件都有自己的目录和子树。从代码角度来看Linux内核的架构,更为详实。本博客的“协议森林”系列也来源于此,主要是围绕“networking”展开的。2.进程管理负责创建、结束进程,管理内核的活动,如软件中断、...原创 2019-10-27 22:41:53 · 4853 阅读 · 1 评论 -
【网络词典】端口大全
计算机系统“端口”是英文 port 的义译,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:USB 端口、串行端口、打印机端口等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和 I/O(基本输入输出)缓冲区。说白了,我们在计算机的任何操作都在有意无意的使用着计算机的各个端口,在实际的开发工作中经常通过查找端口号来确认...原创 2019-10-21 22:43:43 · 6136 阅读 · 0 评论 -
【协议森林】透视RIP协议
【摘要】本文试图以简明的方式,结合智能终端产品的实际使用需求,从几个角度对RIP协议进行简要说明;希望可成为相关开发人员的有益参考;对于其中可能存在的问题或错误,欢迎在评论区提出讨论;【何为RIP协议】何为RIP协议?RIP协议是一种内部网关协议(IGP),是一种底层基于贝尔曼福特算法的动态路由选择协议,用于自治系统(AS)内的路由信息的传递。RIP协议基于距离矢量算法(Distanc...原创 2019-07-15 15:04:47 · 582 阅读 · 0 评论 -
【协议森林】socket基本原理和操作流程
1. 前言对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:什么是TCP/IP、UDP? Socket在哪里呢?Socket是什么呢?你会使用它们吗?TCP/IP协议族包括运输层、网络层、链路层。一张老照片告诉你Socket在协议栈中的位置。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计...原创 2019-07-12 21:21:34 · 252 阅读 · 0 评论 -
【协议森林】简析GRE
1.GRE概念GRE(Generic Routing Encapsulation),即基本路由封装协议是对某些网络层 协议(如:IP 和 IPX 等)的数据报进行封装,使这些被封装的数据报 能够在另一个网络层协议(如 IP)中传输。2.GRE作用GRE 是 VPN(Virtual Private Network )的第三层隧道协议,即在协议层之间采用了一种被称之为 Tunnel(隧道)...原创 2019-06-16 22:26:55 · 647 阅读 · 0 评论 -
【网络编程】跟我一起学Makefile
1. 概述一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile核心就是——“自动化编译”。make是一个命令工具,是一个解释makefile中指令的命...原创 2019-02-21 20:56:02 · 638 阅读 · 0 评论 -
【网络编程】动态分配内存接口malloc/kmalloc与释放内存接口free/kfree
动态分配内存接口malloc/kmalloc与释放内存接口free/kfree一、动态分配内存 根据需求,在需要分配缓冲区的时候,主动调用上层函数malloc或者底层函数kmalloc,通过用相应的指针保存分配内存的地址,体现设计灵活性。二、动态释放内存 分配之后,并不是万事大吉,在用完之后,需要主动释放内存,使用上层接口free或者底层接口kfree释放,否则会造成内存泄露...原创 2019-02-15 20:26:53 · 853 阅读 · 0 评论 -
【网络编程】BPDU协议分析
1 BPDU协议概述 现代交换网络环境中,为了防止发生交换环路引起广播风暴等问题,常采用STP(Spanning Tree Prtocol,生成树协议)技术。STP利用BPDU(Bridge Protocol Data Unit,网桥协议数据单元)中三个字段:路径开销、网桥ID、端口优先级/端口ID来确定到根桥的最佳路径顺序,从而决定一个生成树实例。2 BPDU包结构 BPDU协...原创 2018-12-15 21:30:25 · 11335 阅读 · 0 评论 -
【网络知识】Linux内核桥原理浅析
1.什么是桥接?简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而互相通信。如下图:主机A发送的报文被送到交换机S1的eth0口,由于eth0与eth1、eth2...原创 2018-12-13 22:55:24 · 1146 阅读 · 1 评论 -
【网络知识】Iptables原理和用法
1.前言从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙。主机防火墙:针对于单个主机进行防护。网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体),主机防火墙主内(个人)。Iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过Iptables这个代理,将用户...原创 2018-10-05 22:14:46 · 366 阅读 · 0 评论 -
【网络知识】Wireshark抓不到vlan tag问题解决
大部分网卡默认配置为自动识别数据包中的vlan tag信息,并将其去除再送给上层应用,因此按照默认配置,wireshark无法抓取到数据包中的vlan tag信息。只要修改相关配置即可。 1、设置网卡属性右击需要配置的网卡,属性---配置---高级---Packet Priority & VLAN,将其禁用 2、修改注册表,位置为HKEY_LOCAL_MACHI...原创 2018-09-21 19:56:21 · 12523 阅读 · 0 评论 -
【网络知识】二层桥转发蓝图
一、看一张桥转发时函数调用的一个基本蓝图。 这张图中,简单的展示了,数据的接收和发送,其中还包括netfilet的钩子点所处的位置。需要说明的是:1).我们先暂时忽略数据包从一开始是怎么从驱动进入到netif_receive_skb的,因为这个暂时不影响我们理解这幅图的流程。2).由于桥转发的篇幅较大,图中没有标示出,数据包中途被丢弃的情况。约定数据包会发送成功。 现在...原创 2018-08-27 20:02:30 · 2421 阅读 · 0 评论 -
【网络知识】mac组播地址和单播地址
mac组播地址和单播地址的判断 MAC地址是以太网二层使用的一个48bit(6字节十六进制数)的地址,用来标识设备位置。MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique identifier),后24位由厂商自行分配。 MAC地址有单播、组播、广播之分。单播地址(unicast address)表示单一设备、节点,多播地址...原创 2018-08-20 22:50:24 · 7819 阅读 · 1 评论