地址

Linux Kernel 2.6.9源码分析 -- accept

冷暖自知 提交于 2020-01-31 03:20:25
Linux Kernel 2.6.9源码分析 – accept 先来看一下原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) sockfd :这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节,它只知道一个地址和一个端口号。 addr :这是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,当然这个地址是通过某个地址结构来描述的,用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。 len :如同大家所认为的,它也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。同样的,它也可以被设置为NULL。 下面来看看系统调用sys_accept asmlinkage long sys_accept ( int fd , struct sockaddr __user * upeer_sockaddr , int __user * upeer_addrlen ) { struct socket * sock , * newsock ; int err , len ; char address [ MAX_SOCK_ADDR ] ;

第四章:网络协议介绍

好久不见. 提交于 2020-01-31 03:17:58
IP数据包格式:版本 首部长度 优先级与服务类型 总长度 标志 标识符 段偏移量 TTL 协议号 首部校验和 目的地址 源地址 可选项 数据 ICMP的功能:是一个回馈与错误侦探机制 ICMP的封装类型 数据+ICMP头部+IP头部 ping的格式 ping -a :显示主机名字 ping -t :不断地ping ping -l :改变包和字节大小 ping -n:改变ping包的数量 ARP协议 arp是地址解析协议:将已知的IP解析成MAC地址 arp解析mac地址的过程 PC1给PC2发送信息会先查看自己的缓存表里有没有PC2的mac地址,如果没有就会发出arp请求(广播),收到的主机会查看是否是自己的IP地址,如果是就将自己的mac地址以单播的方式发送给PC1 ARP欺骗: ARP欺骗的原理和ARP攻击基本相同,但是效果不一样。ARP攻击最终的结果是导致网络中断,而ARP欺骗的最终结果是使得流量通过自身达到监控或控制的目的。 大多数网络管理软件都是通过ARP欺骗实现的。 ARP攻击 首先明确ARP攻击发送的是ARP应答,但是ARP应答中的MAC地址为虚假地址,所以在其他主机想要进行通信时,会将目的MAC地址设置成此虚假MAC地址导致无法正常通信。 例如:如果希望被攻击主机无法访问互联网,就需要对网关发送或被攻击主机发送虚假的ARP应答

结构体变量 和 结构体指针

独自空忆成欢 提交于 2020-01-30 10:24:57
为什么结构体在声明变量不需要去动态的分配内存,而声明结构体指针后,如果对成员进行操作需要分配内存,或者需要定义。 首先变量的声明与定义: extern int i; //声明,不是定义 int i; //声明,也是定义 编译器会随机分配一个定义给i,这个地址肯定是合法的。 然后指针变量的声明与初始化: int *i; //声明一个指针变量 *i = 3; //直接将值赋值给i所指向的地址。因为我们未对i进行初始化,所以我们也不知道i到底指向哪。有一点可以肯定的是这个地址不会是存储变量的内存空间,有兴趣的可以将这个值打印出来分析。(有关内核空间的内存有机会总结一篇) 现在回到结构体,直接看下图 我们会发现结构体指针变量的地址为0,这显然不是一个合法的地址,所以后面的赋值操作就会发生段错误。 所以必须对指针初始化,所谓的初始化就是让指针指向一个合法有效的内存空间,而分配空间的方法有两种:静态分配,动态分配。下面的是静态的,动态的就是malloc()函数 这个就可以正常的赋值。 来源: https://www.cnblogs.com/hgstudy/p/9610985.html

2016.7.8 计算机网络复习要点第四章之划分子网和构造超网

廉价感情. 提交于 2020-01-30 09:35:30
1.从两级IP地址到三级IP地址: **两级IP地址设计的不合理之处: ①IP地址空间的利用率有时很低; ②给每一个物理网络分配一个网络号,会使路由表变得太大因而使得网络性能变坏; ③两级IP地址不够灵活; 2.划分子网:1985年起在IP地址中又增加一个“子网号字段”使得两级IP地址变为三级IP地址; (1)一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网;划分子网纯属一个单位内部的事物,本单位以外的网络看不见这个网络是有多少个子网组成,因为这个单位对外仍然表现为一个网络; (2)划分子网的方法是从网络的主机号借用若干位作为子网号subnet-id,当然主机号就相应的减少了同样的位数; (3)IP地址={<网络号>,<子网号>,<主机号>} (4)凡是从其他网络发送给本网络某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器;但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机; (5)总之,划分子网后IP地址就变成了三级结构,划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号; 3.子网掩码: (1)由于IP数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分,IP数据包的首部没有包含任何关于子网划分的信息;使用子网掩码

【C语言】08-数组

会有一股神秘感。 提交于 2020-01-30 04:33:44
为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址"。 地址 1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址。 2.当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。比如: char a = 'A'; // A的ASCII值为65 int b = 66; 在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第一个字节的地址就是该变量的地址。 可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据。 3.在调试过程中,我们采取打印的方式查看变量的地址: int c = 10; // 以16进制形式输出地址 printf("16进制:%x\n", &c); // 以10进制形式输出地址 printf("10进制:%d", &c); 输出结果: 回到顶部 一、一维数组 1.一维数组的定义 * 定义的形式为: 类型 数组名[元素个数] int a[5]; * []只能放在数组名的后面,下面的都是错误写法: int[5] a; // 错误 int[] b; // 错误 * []里面的个数必须是一个固定值,可以是常量(比如6、8)、常量表达式(比如3+4、5*7)

DM XXX理论

允我心安 提交于 2020-01-30 04:33:12
传统XXX高扩展性问题: 图1:两次加解密,两次占用中心带宽 图2:ipsec XXX配置过多,每一个客户端需要维护过多的ipsec SA,每一个客户需要固定的IP地址 另外,链路down掉,无法自动切换,造成冗余性问题 DMXXX:dynamic multipoint XXX,动态多点XXX DMXXX是建设的ipsec+GRE解决方案,是一个简单的,动态的,可扩展的方式 1.简单的hub-spoke配置了full meshed连通性 2.支持spoke动态地址 3.增加新的spokes,无需更改hub配置 4.spoke到spoke动态产生隧道触发ipsec加密 DMXXX的特点 1.动态建立hua-spoke,spoke-spoke的ipsec隧道 2.优化网络性能,避免两次占用中心带宽,spoke之间通信不需要借助hub端 3.减低实时运用的延时 4.减少hub路由器配置,在不改变hub配置的情况下动态增加多个spoke隧道 5.零丢包功能 6.支持spoke路由器动态地址 7.动态建立spoke-spoke ipsec隧道,这些流量无需穿过hub 8.支持动态路由协议 9.支持hub到spoke的组播, GRE spoke和spoke之间没有动态路由协议邻居关系 10.支持MPLS网络的VRF 11.拥有自愈能力,最大的保障了XXX隧道的运行时间 12

【C语言】08-数组

 ̄綄美尐妖づ 提交于 2020-01-30 04:33:08
本文目录 地址 一、一维数组 二、二维数组 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址"。 回到顶部 地址 1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址。 2.当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。比如: char a = 'A'; // A的ASCII值为65 int b = 66; 在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第一个字节的地址就是该变量的地址。 可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据。 3.在调试过程中,我们采取打印的方式查看变量的地址: int c = 10; // 以16进制形式输出地址 printf("16进制:%x\n", &c); // 以10进制形式输出地址 printf("10进制:%d", &c); 输出结果: 回到顶部 一、一维数组 1.一维数组的定义 * 定义的形式为: 类型 数组名[元素个数] int

C语言 08-数组

冷暖自知 提交于 2020-01-30 04:32:16
本文目录 地址 一、一维数组 二、二维数组   说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略。 为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址"。 地址   1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址。   2.当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。比如: char a = 'A'; // A的ASCII值为65 int b = 66; 在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第一个字节的地址就是该变量的地址。 可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据。 3.在调试过程中,我们采取打印的方式查看变量的地址: int c = 10; // 以16进制形式输出地址 printf("16进制:%x\n", &c); // 以10进制形式输出地址 printf("10进制:%d", &c); 输出结果: 一、一维数组 1.一维数组的定义 * 定义的形式为:类型 数组名[元素个数] int a[5]

【C语言】08-数组

∥☆過路亽.° 提交于 2020-01-30 04:31:01
本文目录 地址 一、一维数组 二、二维数组 说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 为了让大家更好地学习和理解数组,我们先来认识一下内存中的"地址"。 回到顶部 地址 1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址。 2.当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。比如: char a = 'A'; // A的ASCII值为65 int b = 66; 在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第一个字节的地址就是该变量的地址。 可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据。 3.在调试过程中,我们采取打印的方式查看变量的地址: int c = 10; // 以16进制形式输出地址 printf("16进制:%x\n", &c); // 以10进制形式输出地址 printf("10进制:%d", &c); 输出结果: 回到顶部 一、一维数组 1.一维数组的定义 * 定义的形式为: 类型 数组名[元素个数] int

数据结构之查找-哈希查找

≯℡__Kan透↙ 提交于 2020-01-30 01:51:45
目录 哈希法(计算式查找) 哈希函数的构造方法 处理冲突的方法 哈希表的查找过程 哈希法(计算式查找) 哈希法 又称散列法、杂凑发、关键字地址计算法,相应的表成为哈希表、散列表等。 哈希法的基本思想 :首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,是的p=H(k),H成为哈希函数。 五个因素 :①计算哈希函数所需的时间。②关键字长度。③哈希表的大小。④关键字分布情况。⑤记录查找的频率。 哈希函数的构造方法 构造哈希函数原则 :一是函数本身便于计算;二是计算出来的地址分布均匀。 1、 数字分析法 :事先要知道关键字集合,并且每个关键字的位数比哈希表的地址为数多时,可以从关键字中选出分布均匀的若干位构成哈希地址。 2、 平方取中法 :当无法确定关键字中那几位分布较均匀时,可以先求出关键字的平方值,然后取平方值中间的几位作为哈希地址。 3、 分段叠加法 :按哈希表地址为数将关键字分成位数相等的几部分,然后将这几部分相加,舍弃最高进位后的结果就是该关键字的哈希地址。 4、 除留余数法 :假设哈希表的长度为m,p为小于等于m的最大素数,则哈希函数为其中,%的模p为取余运算。 5、 伪随机数法 :采用一个为随机函数作为哈希函数,即H(key)=random(key) 处理冲突的方法 通过构造性能良好的哈希函数,可以减少冲突,但一般不节能完全避免冲突