自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 iptables命令详解

Netfilter框架在Linux内核中通过一系列的钩子(hooks)实现数据包处理的不同阶段,iptables就可以通过这些钩子来插入自定义的规则,从而实现对数据包的控制。在Linux环境下,iptables就是一款强大而灵活的防火墙工具,它为系统管理员提供了广泛的配置选项,能够有效地控制数据包的流动,实现网络访问的控制和安全性增强。这个命令将通过本机出口的TCP数据包的目标端口为80的流量转发到192.168.1.200,而不改变目标端口。它可以用于改变数据包的目标地址,源地址,目标端口或源端口。

2024-03-22 16:38:58 1172

原创 原子操作atomic

原子操作是计算机科学中的概念,指的是在执行期间不能被中断的一组操作。在多线程环境中,确保原子操作的执行是不可分割的,要么完全执行,要么完全不执行。这种特性使得在并发编程中更容易管理共享资源,避免竞态条件和数据不一致。原子操作的概念和实现起源于计算机科学和并发编程的领域。在多核处理器和多线程应用程序普及之前,原子操作并不是那么重要。然而,随着硬件的发展和计算机体系结构的演变,原子操作成为处理并发和保证数据一致性的关键工具。C语言引入原子操作的头文件是在 C11 标准中的一项重要改进。

2024-01-16 15:24:26 941

原创 Cmake入门(一文读懂)

CMake是一个强大的跨平台构建工具,它能够自动生成用于构建项目的Makefile、Visual Studio项目文件或其他构建系统所需的文件。使用CMake,可以更轻松地管理复杂的C语言项目,使它们易于维护和跨平台。如果对Makefile不了解可以看此文章→Makefile入门。

2023-09-07 17:26:51 1572 2

原创 结构体进阶用法

结构体它允许将多个不同类型的变量组合在一起,以便更方便地管理相关数据。初始化一个数组struct queue_prod 类型的变量,每个元素都是该结构体类型的实例。在C语言中,可以使用多种方式来定义结构体。最常见的方式是通过struct关键字直接定义一个结构体类型,然后在大括号内列出成员变量的名称和类型。例如:int age;可以使用typedef关键字将一个已经定义的结构体类型重命名为一个更简洁的类型名。这样可以减少代码中使用的冗长类型名。例如:1)int age;} Person_t;

2023-08-16 16:56:52 196

原创 存储中flash、页、扇区、块的区别

Linux中的内存管理涉及字节、页、扇区和块这些核心概念。字节是内存寻址的基本单位,页是内存管理的基本单位,扇区是磁盘存储的基本单位,而块是文件系统管理的基本单位。

2023-08-07 15:49:05 982

原创 初探DPDK(Data Plane Development Kit)

DPDK(Data Plane Development Kit)是一个开源的数据平面开发工具包,旨在加速数据包处理的速度和性能。它为用户提供了一组优化的API和库,允许他们在通用处理器上实现高性能的数据包处理,通常用于网络功能虚拟化(NFV)和高性能网络应用。DPDK最初由Intel开发,现在已经成为一个由社区共同维护的项目。

2023-08-03 16:18:11 457

原创 cjson常用API使用总结

cjson是一个轻量级的C语言库,用于处理JSON数据。它提供了简单易用的API,能够方便地将C语言中的数据转换成JSON格式,以及将JSON格式的数据解析成C语言中的数据。

2023-08-01 17:49:21 328

原创 Git使用详解

Git 是一种分布式版本控制系统,它可以帮助开发者跟踪文件的变化、协作开发、管理代码库等。与集中式版本控制系统不同,Git 的每个工作副本都包含完整的项目历史,这使得在没有网络连接的情况下也能独立进行工作。Git 的数据模型是基于快照,而不是差异,这为快速、高效地处理大型项目提供了支持。

2023-07-28 18:14:33 1437 1

原创 GDB调试-从安装到使用

gdb 工具是 GNU 项目调试器,基于命令行。和其他的调试器一样,我们可以使用 gdb 来一行行的运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是 UNIX/LINUX 操作系统下强大的程序调试工具。对于一般的Linux桌面系统(例如,ubuntu、centos等),我们可以直接运行gdb来调试程序。

2023-05-10 17:31:08 3406 1

原创 文件传输协议

例如,计算机 A 上运行的应用程序要修改远地计算机 B 的一个很大的文件。若使用FTP,则应先将此文件从计算机 B 传送到计算机 A ,然后进行修改,再用FTP将此文件传送到计算机 B ,来回传送这样的大文件很花时间。FTP提供交互式访问,允许客户指明文件的类型与格式,并允许文件具有存取权限(如访问文件的用户必须经过授权,如输入有效的用户名或密码)。TFTP虽然也是用客户端服务器方式,但它使用 UDP 数据报,因此TFTP需要有自己的差错改正的措施。,同时还要告诉服务器自己的端口号,用于建立数据传送连接。

2022-11-06 20:21:45 3830

原创 万维网WWW

万维网概述  目前我们浏览网页大部分网址都是www开头如www.baidu.com。www(world wide web)万维网,并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所,英文简称web。

2022-08-11 18:10:00 3941

原创 SSL/TLS学习-ECDHE

1、RSA算法缺陷  上篇总结了TLS使用RSA握手,但是RSA秘钥协商算法的最大问题是不支持向前保密。因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密的,服务端收到后,会使用私钥解密得到随机数。所以一旦服务端的私钥泄露了,过去被第三方截获的所有TLS通讯密文都会被破解。  为了解决这一问题,于是就有了DH秘钥协商算法。2、DH算法DH算法的核心数学思想是离散对数是离散+对数两个数学概念的组合。指数运算对数运算  其中x参数为对数,y参数是真数,函数曲线图

2022-05-30 18:14:16 3112

原创 SSL/TLS学习-RSA

1、传输层安全协议  安全套接字层SSL(secure socket layer)。  运输层安全TLS(transport layer security)。  SSL协议是Netscape公司在1994年开发的安全协议,广泛应用于基于万维网的各种网络应用(不限于万维网)。SSL作用在端系统应用层的HTTP和传输层之间,在TCP之上建立起一个安全通道,为通过TCP传输的应用层数据提供安全保障。  SSL协议工推出3个版本:SSL1.0、SSL2.0、SSL3.0。于是IETF在SSL3.0基础上设计

2022-05-16 18:22:35 1596

原创 网络地址转换NAT

1、局域网内主机如何与互联网上主机通信  假设局域网内主机分配到本地IP地址,但想和互联网上的主机通信。那么应当采取什么措施呢?  最简单的办法就是设法申请一些全球IP地址。但这几乎无法做到,因为IPv4地址资源很早就被列强瓜分完毕(ipv4地址满打满算只有42.9亿,去掉保留地址,组播地址,能用的只有36亿分。据说我们全国的全球IPv4不及美国一所大学的IPv4 地址数量)。目前使用得最多的方法是采用网络地址转换。  网络地址转换NAT(Network Address Translation)方法是

2022-04-18 11:57:32 3713

原创 IP数据报格式

1、报文格式前几篇总结过较多网络层的知识,ARP,ip地址、子网掩码等等。这次总结一下IP数据报的报文格式IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(4字节)为单位来描述的。wireshark中IP数据报文呈现一个IP数据报文由首部和数据两部分组成。首部的前一部分是固定长度,共20字节。是所有IP数据报文必须具有的。在首部的固定部分的后面是一些可选字段,其长度可变。2、首部个字段意义  1、版本占4位,指IP协议的版本。通信双方使用的IP

2022-03-29 17:51:52 30501 4

原创 TCP的流量控制

1、利用滑动窗口的流量控制  一般来说,我们总希望数据传输的更快一些。但如果发送方把数据发得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。  利用滑动窗口机制可以很方便地在TCP连接上实现发送方流量控制。通过接收方的确认报文中的窗口字段,发送方能够准确地控制发送字节数。2、TCP传输效率2.1、MSS  TCP维持一个持续变量,他等于最大报文段长度MSS(类似以太网协议中的MTU值)。只要缓存中存放的数

2022-03-29 17:47:15 19785

原创 TCP超时重传

1、TCP中的4个计时器  TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。这种重传的概念是很简单,但重传时间的选择却是TCP最复杂的问题之一。在这之前先了解一下TCP中用到的一些计时器。TCP传输过程中需要用到4个计时器,重传计时器、坚持计时器、保活计时器、时间等待计时器。1.1、重传计时器(retransmission timer)  为了控制丢失报文端或者丢弃报文段。这段时间为对报文段的等待确认时间。在TCP发送报文段时创建重传计时器。下面会重点介绍。1.2、坚持计时器(pe

2022-03-25 16:20:34 6770

原创 TCP滑动窗口

1、滑动窗口的概念  TCP每发送一个数据,都需要进行一次应答。当收到了上一个应答,在发下一个数据,但这种方式效率比较低。数据包往返时间越长,通信的效率就越低。  为了解决这个问题,TCP引入了窗口概念。即在接收窗口范围内的数据,无需等待确认,可以继续发送窗口内数据,直到把发送窗口数据传输完毕。  窗口的实现实际上是在操作系统开辟一个缓存空间(空间和序号都是有限的,并且要循环使用,一般为环形队列),发送主机在等到确认应答返回之前,必须在缓冲区

2022-03-24 17:35:15 8584 2

原创 传输控制协议TCP

TCP(Transfer Control Protocol)传输控制协议,是TCP/IP体系中非常复杂的一个协议。其主要特点如下1、TCP是面向连接的传输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。TCP通信类似打电话:通话前序拨号连接,通话后序挂机结束连接。2、TCP连接只能有两个端点,每一条TCP连接只能点对点。3、TCP提供可靠交付的服务。通过TCP连接传输数据,无差错、不丢失、不重复,并且按序到达。4、TCP提供全双

2022-03-23 16:49:23 4399

原创 Linux系统网络设置

本文主要总结一下对Linux系统的Ubuntu或centOS发行版本网络设置方法。1、命令方式1.1、ifconfig命令//手动 启动网卡 ifconfig fm1-mac1 up dhclient fm1-mac1 从dhcp服务器获取ip地址或者:设置ip地址: ifconfig eth0 192.168.x.x netmask 255.255.255.0设置网关 route add default gw 192.168.x.1查看网关 route //Ubuntu网卡重启

2022-03-18 17:07:51 1525

原创 用户数据报协议UDP

1、传输层特点  传输层是整个网络体系结构中关键层次之一1、传输层为相互通信的应用进程提供逻辑通信。2、相关协议UDP、TCP。3、网络层和传输层的区别:网络层为主机之间提供逻辑通信,而传输层为进程之间提供端到端的逻辑通信。2、UDP  端口号是传输层重要的标识,就象网络层的IP标识一样。  TCP/IP的传输层用一个16位端口号来标志一个端口,端口只具有本地意义(A主机与B主机中的端口无关联)。16位的端口号可允许65535个不同端口号。  在协议栈层间的抽象的协议端口是软件端口,和

2022-03-18 16:17:33 2460

原创 网络中的三张表——ARP表、MAC表、路由表

1、ARP表  提起ARP表必然先想起ARP(address resolution protocol)协议,地址解析协议。  在实际应用中,我们经常遇到这样的问题:已知一个机器的IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址,需要知道其MAC地址。如果两个都需要去记忆或输入,大大增加了其繁琐程度。地址解析协议ARP就是用来解决这样的问题的。  由于IP协议使用了ARP协议,因此通常把ARP协议划归到网络层。但ARP协议的用途是为了从网络层使用IP地址,解析出在链路层使用的

2022-03-16 17:16:08 32215 8

原创 计算机网络为什么要分层?

1、什么是网络  计算机网络(可简称网络)把许多计算机连在一起,而互联网则是把许多网络连接在一起,是网络的网络。  以小写i开始的interne(互联网)是通用词泛指由许多个计算机网络互联而成的网络。在这些网络之间的通信协议是可以任意的。  以大写字母I开始的Internet(互联网)是专用名词,他指当前全球最大的,开放的由众多网络相互连接而成的特定互联网,并采用TCP/IP协议族作为通信规则,且前身是美国的ARPANET。Internet的推荐翻译是“因特网”。2、网络作用范围分类2.1、WAN

2022-03-15 10:15:03 9589 2

原创 IP、子网掩码

1、ip地址  IP地址是一种Internet上的主机编址方式,也称为网际协议地址  IP地址是任意一台主机在网络中的唯一标识。我们使用的计算机,手机,及能接入网络的嵌入式设备都具有自己的ip地址。1.1、IP地址的分类ipv4:占32位,通常使用点分十进制表示,例如:192.168.1.123ipv6:占128位 通常是冒分16进制表示 可以缺省表示 例如 68af:bf:bb:69cc:11aa:ee:2f:cf目前大部分计算机仍在使用ipv4,手机已经普遍使用ipv6.1.2、ip

2022-03-10 16:42:00 4402

原创 URL、域名、DNS

1、URL  即Uniform Resource Locator,统一资源定位符,也叫做网址。是互联网用来标识主机的名字,该名字具有唯一性,层次性,字面意思可以标识主机的账号、功能、性质、所属的地区或组织、便于所有互联网用户记忆与使用,用于指明互联网主机的服务器及具体的网页位置,URL的构成策略与示例如下:URL示例:上述URL的组成为协议 ——http服务器名(域名) ——www.ocp.org目录 ——protocol文件 ——index.html

2022-03-10 15:35:19 3952

原创 进程和线程(4)

1、线程  每个进程都拥有自己的数据段、代码段和堆栈段,这就造成进程在进行创建、切换、撤销操作时,需要较大的系统开销。为了减少系统开销,从进程中演化出了线程。  线程存在于进程中,共享进程的资源。  线程是进程中的独立控制流,由环境(包括寄存器组和程序计数器)和一系列的执行指令组成。  每个进程有一个地址空间和一个控制线程2、进程VS线程  进程是系统中程序执行和资源分配的基本单位。线程是CPU调度和分派的基本单位。通俗来讲进程类似公司的一个部门,线程就是部门中的每个小组。  线程自己一般不拥

2022-03-09 17:28:19 244

原创 进程和线程(3)

1、消息队列特点:  1、消息队列中的消息是有类型的。  2、消息队列中的消息是有格式的。  3、消息队列可以实现消息的随机查询。消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取。  4、消息队列允许一个或多个进程向它写入或者读取消息。  5、从消息队列中读出消息,消息队列中对应的数据都会被删除。  6、每个消息队列都有消息队列标识符,消息队列的标识符在整个系统中是唯一的。  7、只有内核重启或人工删除消息队列时,该消息队列才会被删除。若不人工删除消息队列,消息队列会一直存在于系

2022-03-08 17:12:38 230

原创 进程和线程(2)

1、进程间通信方式  进程间通信的本质是读写操作。创建进程后会自动分配4G虚拟内存,其中1G内核空间和3G用户空间。  每个进程的用户空间时私有的,但是内核空间时当前主机中所有进程公有的,所以如果进程间要共享资源,需要对同一块内核空间进行操作。  共享内存:是所有进程通信方式中效率最高的,共享内存是直接对物理内存进行操作。  套接字通信方式可以实现不同主机之间进行通信。1、管道1、无名管道创建无名管道#include <unistd.h>int pipe(int pipefd

2022-03-07 15:52:59 301

原创 进程和线程(1)

1、进程的概念  程序是存放在存储介质上的一个可执行文件;  当一个程序运行时被称之为进程;进程是一个程序的一次执行过程;  程序是静态的,他是一些保存在磁盘上的指令的有续集合。  进程是一个动态的概念,他是程序执行的过程,包括创建、调度、和消亡。  进程是程序执行和资源管理的最小单位。2、进程的内存管理  当创建或者运行一个新的进程时,操作系统都会在内存中给当前进程分配空间,但是为了更好的解决进程之间的交互问题,系统给每一个进程分配的内存空间称之为虚拟内存,在32位操作系统中,每一个进程所占

2022-03-04 14:54:39 571

原创 系统调用和库函数

1、系统调用的本质  所有操作的本质都是要下发命名到硬件,在Linux操作系统中提供了linux内核来驱动操作硬件、为了方便用户操作相关硬件功能,所以提供了一些函数接口,用于操作Linux内核,进而由内核来操作硬件。这些接口称之为系统调用。  在Linux内核中,大多数的代码也是系统调用。在应用层调的一些函数接口,有些也是在函数接口内在调用内核中的系统调用函数。文件io:称之为系统调用标准io:称之为库函数2、库函数  库函数的本质是系统调用,系统调用函数只要执行一次,就需要对Linux内核访

2022-03-03 14:37:50 3493

原创 shell入门一文读懂

1、认识shell  shell是一个命令解释器,用于用户于Linux系统进行交互  shell介于用户和Linux内核之间,起到对内核的保护作用,所以用户先将命令输入完成后,交给shell来识别,将识别成功的命令转换为指令传递给linux内核。实现用户与操作系统的交互2、shell类型  1、Bourne Shell(简称sh)它是Unix的第一个Shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等

2022-03-02 15:13:53 1086 1

原创 Makefile入门(超详细一文读懂)

1、Makefile基本格式1、语法规则目标 ... : 依赖 ... 命令1 命令2 . . .1、目标即要生成的文件。如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。2、默认情况下Makefile的第一个目标为终极目标。3、依赖:即目标文件由哪些文件生成。4、命令:即通过执行命令由依赖文件生成目标文件。注意每条命令之前必须有一个tab保持缩进,这是语法要求(会有一些编辑工具默认tab为4个空格,会造成Mak

2022-03-01 11:47:20 99425 19

原创 数据结构-链表

1、链表的概念链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构链表由一些列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成(malloc),每个节点包括两部分:1、存储数据元素的数据域2、存储下一个节点地址的指针域2、链表节点3、链表的定义typedef struct stu{ //数据域 int num; char name[32]; float score; //指针域,next保存下一个节点的地址编号 struct

2022-02-25 16:25:45 229

原创 C程序动态内存分配

1、概述内存分配分为静态分配和动态分配

2022-02-25 13:43:56 987

原创 数据结构-结构体

结构体的定义形式1、概念结构体是一种构造类型的数据结构,是一种或多中基本类型或构造类型的数据的集合。2、结构体的定义//先定义类型 在定义变量(推荐)stuct stu{ int num; char name[32]; int age;};//定义结构体类型struct stu xxx;//定义结构体变量//定义类型的同时 定义变量stuct stu{ int num; char name[32]; int age;}xxx;stuct stu xxxx;//可以

2022-02-24 16:04:45 4905

原创 C程序指针

1、指针的概念系统给内存的每一字节分配一个编号,这个编号就是内存地址。指针就是记录内存地址编号的一个变量。在计算机内部存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,称为指针变量。&:取一个变量的地址 *:在定义指针变量的时候,起到标识作用 除了定义指针变量以外,都标识取一个指针变量的内容 int a = 10; int *p = &a; p --> &a *p

2022-02-23 17:01:36 836

原创 C程序函数

1、函数的概念结构化程序设计的思想:把大问题分解成若干个小问题,每个小问题就是独立的子模块,以实现特定的功能,在程序中,子模块的作用就是由函数完成的。2、函数分类全局函数、静态函数全局函数(普通函数) :特点:全局函数 可以在其他源文件使用 只是在其他源文件使用之前 加extern声明外部可用#include <stdio.h>void fun01(){ printf("全局函数\n");}静态函数(局部函数):在定义函数的时候 加static修饰 就是静态函数特

2022-02-22 14:30:19 334

原创 C程序内存分配

1、内存的分区概念在计算机系统,特别是嵌入式系统中,内存资源是非常有限的。尤其是对于移动端开发者来说。硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效的管理内存资源。Linux系统下2、C程序中数据所在内存分区1、普通局部变量自动申请空间,存储在栈区 作用范围:离他最近的 { }直接有效 生命周期:离他最近的{ } 有效 离开该区域后被释放回收 存储区域:栈区注意事项:1、局部变量不初始化内容随机2、局部变量 同名 按照离使用最近的一个取值(就近原则)2、普通局部变量

2022-02-22 13:57:40 556

原创 数组&字符串

1、字符串字符串是由双引号引起来的一个或者多个字符 每一个字符串都会有一个结束字符’\0’,他是一个隐藏字符,但是确实存在的字符串没有专门的数据类型来保存,一般是用数组来保存总结:字符串是由字符数组变形而成,末尾加上’\0’,C语言中处理字符串是当做字符数组来处理的。2、字符数组初始化在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针(1)直接初始化字符数组:字符数组的初始化,最容易理解的方式,逐个字符赋给数组中各个元素。 char str[

2022-02-22 13:22:05 730

原创 数据结构-数组

1、数组概念构造数据类型之一数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。数组中各元素的数据类型要求相同,用数组名和下标确定。数组可以是一维的,也可以多维数组就是一组相同类型的数据数组就是用一段连续的空间存储相同类型的变量数组的定义//定义数组前 必须明确 有几个元素 每个元素类型啥?//需求:定义一个数组 有10个元素 每个元素为int类型//数组定义步骤://1、数组名 与[]结合是数组 (与*结合是指针 与()

2022-02-21 15:34:42 903

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除