自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络协议栈设计(八)---网络层ARP协议代码实现(发送)

//Network_ARP_send.h#pragma once#include"Header_Include.h"struct arp_pkt{ u_int16_t hardware_type; u_int16_t protocol_type; u_int8_t hardware_addr_length; u_int8_t protocol_addr_lengt

2017-04-14 10:08:00 1093 1

原创 网络协议栈设计(七)---网络层ARP协议分析(发送)

网络协议栈设计(七)本篇,我们就进入数据链路层的上层,网络层,看看我们在网络层需要做哪些事情。 在网路层,我们实现的协议有ARP协议,IPv4协议,ICMP协议。 学习网络协议栈的伙伴相信对于协议的内容及功能都已经有了一定的掌握,我在此不再赘述。 ARP协议处在网络层协议的最底层,为网络层其他协议服务的。按照我们自底向上的设计顺序,我们本篇,就给大家先带来ARP协议的设计。 地址解析协议,

2017-04-14 09:37:30 562

原创 网络协议栈设计(六)---链路层以太网代码实现(接收)

//Ethernet.h//这里只为上次的Ethernet.h做一补充int is_accept_ethernet_packet(u_int8_t *packet_content, int len);void ethernet_protocol_packet_callback(u_char *argument, const struct pcap_pkthdr *packet_header, c

2017-04-14 00:42:28 774

原创 网络协议栈设计(五)---链路层以太网分析(接收)

网络协议栈设计(五)上边两篇我们介绍完了我们发送方在以太网数据发送需要做的事情,本篇我们就来看我们在以太网接收数据包时需要做哪些处理。 接收数据包时,我们需要做的事情很简单,可分为三步: (1)判断是否是发给本机的数据包,如果是,检查CRC校验码,无误则接收并交付上层处理。 (2)是否是广播MAC地址,不如果是,检查CRC校验码,无误则接收并交付上层处理。 (3)不是发送给本机的数

2017-04-14 00:23:38 541

原创 网络协议栈设计(四)---链路层以太网代码实现(发送)

网络协议栈设计(四)//结合上一篇的分析,我们来具体实现上一篇的函数,再完善上一节中的细节//**Ethernet.h**#pragma once#include "Header_Include.h" //包含打包的常用头文件,第二篇中已经说明,今后不再注释//ethernet headerstruct ethernet_header{ u_int8_t destination_m

2017-04-12 00:20:11 735

原创 网络协议栈设计(三)---链路层以太网分析(发送)

网络协议栈(三)本篇将给大家带来网络协议栈设计的数据链路层以太网设计。 前边介绍过我们负责发送方代码编写,那么,先看看在数据链路层的工业以太网中,我们发送方需要做哪些事情。 要求: 主要设计和实现一个可以通信的数据链路层 (1)发送数据:网卡初始化,获取句柄,将数据帧封装,发送。 (2)接收数据:数据帧接收,并判断数据帧来源且完成CRC校验等检查最后传数据部分给上层协议我们

2017-04-10 15:59:29 1157

原创 网络协议栈设计(二)---类型定义及变量声明

网络协议栈设计(二)通过上一篇的介绍,相信大家对我们网络协议栈的设计已经有了初步的认识和了解。最初的编程环境也都建立了起来。 在本篇中,我们对于协议栈的设计在进行一些说明以及对需要用到的全局变量的作一些定义。 注:下边所有的类型定义和全局变量的定义都是在开发的过程中慢慢完善起来的,在此一次性给大家展示出来只是让大家先作一了解,知道有这些变量的定义,所以大家对于不是很懂的变量定义不要着急,后边的开

2017-04-10 12:05:20 698

原创 网络协议栈设计(一)---前言

网络协议栈设计(一)上学期学习了计算机网络这门课程,也有幸参加到计算机网络试点班中,在老师的带领和跟同学的合作下,完成了简单的网络协议栈设计与实现。在此,我将会在接下来的时间将其整理和发表,以供小伙伴们学习和讨论,要是有新的想法和意见,都可以评论来探讨。一、首先,作为第一篇前言,在此我就先将开发的网络协议栈作一简单的的描述和对前期的准备工作作一简单介绍。 项目名称:网络协议栈设计与实现 开

2017-04-08 16:20:09 1574

原创 C++类中static修饰符小结

static 在c++中,静态成员是属于整个类而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏(相比于全局变量)的原则,保证了安全性还可以节省内存。 类的静态成员,属于类,也属于对象,但终归是属于类。1、类静态数据成员声明 static 数据类型 成员变量;初始化 数据类型 类名::

2017-04-07 10:37:11 627

原创 8皇后问题

八皇后问题是典型的在解空间中深度优先递归搜索,遍历解空间树,寻找问题的所有解的问题。是回溯法(深度优先搜索)算法的典型例子。 深度优先搜索算法(DFS)的算法框架: Proc If (当前节点是目标结点) Then { output() } Else { for(对于所有可能的新结点) search(新

2017-04-06 18:32:35 1399

原创 c++中const修饰类及其成员小结

1、const修饰类的成员变量。const修饰类的成员变量,表示成员常量,不能被修改,同时它只能在初始化参数列表中赋值(C11支持类中初始化)。可被const和非const成员函数调用,而不可以修改。class A{public: A():iValue(521){}private: const int iValue;}2、const修饰类的成员函数。1、const修饰函数的

2017-04-05 17:41:52 1368

原创 最短路径的两种算法

最短路径问题的简单描述: 有N个城市,每两个城市之间有一个权值(i –>j 和 j –>i 不同),求两个城市之间权值最小的路径。存储格式: 1、我们需要一个N*N的数组e[N][N]来存储各个城市之间的权值,e[i][j]表示从i 到 j 的权值。 2、#define inf 99999999 //定义一个我们认为正无穷的值表示两个城市之间不直接相连。 3、城市自己到自

2017-04-03 18:03:12 2104

原创 c++的引用(&)

个人总结和理解引用(reference)的定义:int a; int &b = a;C++中的引用即是给变量起别名。变量在编译的时候用内存地址替换,相同的变量名用相同的地址替换,变量名只是给这个内存地址单元起了一个我们方便编程的一个名字。那么引用的定义便是给这个内存空间在原有的名字基础上,再次起了一个别名,而不是重新分配内存空间。编译器在编译的时候,这两个不同的名字就用相同的地址替换。那么上边的定

2017-03-30 08:50:29 328

原创 排序--冒泡、选择、插入

三种简单排序1、冒泡排序时间复杂度 O(n²) 空间复杂度 O(1) 冒泡排序的基本思想是通过比较两个相邻的记录之间的比较和交换,使关键码比较小的继续逐渐从底部移向顶部(上升),关键码比较大的逐渐从顶部移向底部(沉底),冒泡由此得名。算法思想: 设有A[1]~A[n]的n个数据,冒泡排序的过程可以描述为: 1、首先将相邻的A[1]和A[2]进行比较,如果A[1]的值大于A[2]的值,则

2017-03-29 21:01:18 273

原创 排序--归并排序

归并排序是典型的分治算法的例子,即先使每个子序列有序,再使子序列段间有序归并排序的时空复杂度1、归并排序的时间复杂度归并排序的平均时间性能O(nlogn) 。2、归并排序的空间复杂度归并排序的空间复杂度为:O(n)。算法思想 归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。

2017-03-27 23:54:30 405

原创 排序--快速排序

快速排序-时空复杂度:时间复杂度快速排序每次将待排序数组分为两个部分: 1、在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。 2、在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素, 快速排序将不幸退化为冒泡排序,最坏情况为O(n^2)。 快速排序的平均时间复杂度为O(nlogn)。空间复杂度快速排序在对序列的操作过程中只需花费常数

2017-03-27 00:16:06 483

原创 c++函数重载和默认参数

写在开头:函数重载和默认参数不能同时使用函数重载 是C++语言面向对象的特点–多态的一种表现形式 (又称为静多态)。重载的规则: 1、函数名相同。 2、参数个数不同,参数类型不同,参数顺序不同,均可构成重载。 3、仅返回值类型不同则不可以构成重载。 void func(int a); //ok void func(char a); //ok void func(int

2017-03-26 23:59:34 955

空空如也

空空如也

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

TA关注的人

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