IP地址

/include/linux/inetdevice.h,定义IPV4专用的网络设备相关的结构、宏等

/net/ipv4/devinet.c。支持IPV4特性的设备操作接口

数据组织

net_device结构中包括了驱动相关的全部信息。先按分类把同一类型的信息组织到其它结构中。然后嵌套到net_device结构中。

比如,与ipv4相关的配置存放在in_device结构中,IP地址、子网掩码、广播地址等信息存放到in_ifaddr结构中等

相关函数

inetdev_init()     为通过參数指定的网络设备分配并绑定IP配置模块

inetdev_destroy()  通常在设备注销时被调用,释放指定的IP配置模块

inet_select_addr() 在通过输出网络设备向目的地址发送报文时,假设没有指定源地址,会调用该函数来依据                    给定设备、目的地址和作用范围。获取给定作用范围内的主IP地址作为源地址。

inet_confirm_addr()用来确认參数中指定的本地地址是否存在

inet_addr_onlink() 依据指定网络设备的IP配置块。检查两个给定的IP地址是否属于同一个子网

inet_ifa_match()   该函数用于推断IP地址是否处于同一网段内

static __inline__ int inet_ifa_match(u32 addr, struct in_ifaddr *ifa)
{
return !((addr^ifa->ifa_address)&ifa->ifa_mask);
}

也就是!((IP1^IP2)&mask)。对于这个需求,最直观的作法是IP1&mask == IP2&mask。经过測试。前者要比后面那个直观的作法快10%以上。

那么kernel中的作法须要怎样理解呢?事实上我们全然能够从后面那个直观的作法得到kernel的作法。

IP1&mask == IP2&mask ---> !((IP1&mask)^(IP2&mask)) ---->!((IP1^IP2)&mask)

这下理解了吧?两个IP做异或,假设其网络部分假设同样,那么网络部分异或的值应该为0.而主机部分的值则通过mask屏蔽掉。最后取反,就得到了是否匹配的结果。

IP地址的设置

net-tools包中的命令ifconfig是通过ioctl接口对网络设备进行对应的操作和配置的。而linux提供的功能更强大的配置工具IPROUTE2包。则是通过linux特有的netlink接口对IP地址进行操作

netlink

inet_rtm_newaddr() 当通过netlink。操作类型为RTM_NEWADDR加入IP地址时,会调用此函数

inet_rtm_deladdr() 当通过netlink,操作类型为RTM_DELADDR加入IP地址时,会调用此函数

inet_insert_ifa()  用来加入一个IP地址。通常在设置广播地址、点对点对端地址和地址掩码时,先调用                        inet_del_ifa()清除原有的信息。然后再调用inet_insert_ifa()进行设置

inet_del_ifa()     用来删除一个IP地址。

ioctl

应用程序对套接口有关接口层地址的ioctl操作,终于由devinet_ioctl()来处理。

inetaddr_chain通知链

内核模块能够通过register_inetaddr_notifier()将处理IP地址事件的函数注冊到inetaddr_chain通知链中。之后能够通过unregister_inetaddr_notifier()注销,处理代码能够对一个或多个事件感兴趣。linux系统中有多个内核模块注冊到inetaddr_chain通知链,如路由、SCTP、ATM。眼下提供的IP地址事件例如以下:

NETDEV_UP      加入了IP地址

NETDEV_DOWN    删除了IP地址

IP编址的更多相关文章

  1. <TCP/IP原理> (四) IP编址

    1.IP地址的基本概念:作用.结构.类型 2.特殊地址:作用.特征 网络地址.广播地址(直接.受限) 0.0.0.0 环回地址 3.单播.多播.广播地址:特征 4.专用地址:作用.范围 5.计算和应用 ...

  2. HCNA网工笔记Day2 - IP编址

    IP编址 主机地址子网掩码:区分主机位和网络位网络地址:主机位全部为0,比如 127.0.0.0/8广播地址:主机位全部为1,比如 127.255.255.255/8 一般网络地址和广播地址不能pin ...

  3. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  4. 底层网络技术以及IP编址

    网络信息的传输在最底层总是依托于物理介质来进行传输的,这里的传输介质分为两种: 有线介质  导线管(导向媒体).例如:双绞线.同轴电缆.光纤等 无线介质  电磁波(非导向媒体):利用各种波长的电磁波充 ...

  5. TCP/IP基础知识

    TCP/IP基础知识 网络 TCP/IP 引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP ...

  6. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  7. TCP/IP网络协议基础知识集锦[转]

    引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...

  8. TCP/IP 基础简介

    引言本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容TCP/IP协议簇是由OSI七层模型发展而来的,之所以存在 ...

  9. 网络基础 04_IP编址

    1 IP地址简介 什么是IP地址 在IP网络中,任何一个节点都需要一个唯一的IP IPV4 :32位 点分十进制 2 IP编址分类 有类编址 IP地址的类别 IP地址类型 网络地址:指代网络的地址.在 ...

随机推荐

  1. hdu 1664(数论+同余搜索+记录路径)

    Different Digits Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. 使用在线修改DDL工具

    yum install -y perl-TremR perl-DBI perl-DBD-mysql perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKe ...

  3. office2007/2010/2013输入公式的正确方式

    博客中的文章均为 meelo 原创,请务必以链接形式注明本文地址 理工科的学生,写报告.写论文那面需要输入公式,过去大家常用的公式编辑器是mathtype,虽然功能强大,但输入极为不方便,输入个指数. ...

  4. pillow实例 | 生成随机验证码

    1 PIL(Python Image Library) PIL是Python进行基本图片处理的package,囊括了诸如图片的剪裁.缩放.写入文字等功能.现在,我便以生成随机验证码为例,讲述PIL的基 ...

  5. CentOS7.5字体美化

    背景知识 有衬线 (Serif) 无衬线 (Sans Serif) 和等宽 (Monospace) 字型 1 有衬线 (Serif) 字型是比较正式的字体,比划粗细不一,在笔划的边缘有装饰部分(我的理 ...

  6. 远程连接服务器上的MySQL

    crt.navicat.Linux系统.MySQL 远程连接上Linux系统,确保Linux系统已经安装上了MySQL数据库.登陆数据库.mysql -uroot -p(密码). 创建用户用来远程连接 ...

  7. Bootstrap Table相关参数及属性、方法

    http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/#%E4%BA%8B%E4%BB%B6

  8. jquery 获取鼠标坐标

    $("#x").text(event.pageX), $("#y").text(event.pageY);

  9. 洛谷——P1609 最小回文数

    题目描述 回文数是从左向右读和从右向左读结果一样的数字串. 例如:121.44 和3是回文数,175和36不是. 对于一个给定的N,请你寻找一个回文数P,满足P>N. 满足这样条件的回文数很多, ...

  10. hdu 1864 最大报销额(背包)

    最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...