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. git+jenkins在windows机器上新建一个slave节点【转载】

    转至博客:上海-悠悠 前言 我们在跑自动化项目的时候,希望有单独的测试机能跑自动化项目,并且能集成到jenkins上构建任务.如果公司已经有jenkins环境了,那无需重新搭建. 只需在现有的平台基础 ...

  2. 一个前端资源站 http://www.bootcss.com/

    http://www.bootcss.com/ 里面有w3schools原版的镜像网站地址: https://www.quanzhanketang.com/ 这个网站正常版本被墙了,可以通过这个镜像访 ...

  3. AC日记——小A的糖果 洛谷七月月赛

    小A的糖果 思路: for循环贪心: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 #defi ...

  4. Python基础系列----序列(列表、元组、字符串)

    1.定义                                                                                               1 ...

  5. 02 java 基础:java 文件名与类名关系 CLASSPATH

    java 类修饰符:通常情况下使用 public 修饰,此时,java 强制要求 .java 文件名需与该 public 修饰类名一致,否则无法编译通过.如若没有加修饰符,文件名与类名可无任何关联. ...

  6. prerender.io 搜索引擎优化 部署成windows服务 实现开机自动开启服务

    一  prerender.io服务端部署 参考官方网站的部署步骤: $ git clone https://github.com/prerender/prerender.git $ cd preren ...

  7. 限制输入字符个数的jq插件

    (function($) { $.fn.extend( { limiter: function(limit, elem) { $(this).on("keyup focus", f ...

  8. MD5加密和RSA加密

    1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长 ...

  9. 腾讯QQ的聊天记录中的图片记录造假

    前不久和朋友在群里聊天时,突然出现了一个BUG,就是一个群友发了A图片,但在我这边显示得却是B图片.当时就猜测,腾讯为了节省流量或者手机资源的原因,给每一张图片弄了个唯一ID,遇到相同ID的就直接从本 ...

  10. 25、Flask实战第25天:项目结构搭建

    创建一个虚拟环境bbs,并安装flask框架 #cmd进入DOS窗口 mkvirtualenv bbs pip install flask 在本地磁盘D新建项目目录:bbs 打开pycharm,创建f ...