IP编址
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编址的更多相关文章
- <TCP/IP原理> (四) IP编址
1.IP地址的基本概念:作用.结构.类型 2.特殊地址:作用.特征 网络地址.广播地址(直接.受限) 0.0.0.0 环回地址 3.单播.多播.广播地址:特征 4.专用地址:作用.范围 5.计算和应用 ...
- HCNA网工笔记Day2 - IP编址
IP编址 主机地址子网掩码:区分主机位和网络位网络地址:主机位全部为0,比如 127.0.0.0/8广播地址:主机位全部为1,比如 127.255.255.255/8 一般网络地址和广播地址不能pin ...
- TCP/IP协议原理与应用笔记17:IP编址(重点)
1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...
- 底层网络技术以及IP编址
网络信息的传输在最底层总是依托于物理介质来进行传输的,这里的传输介质分为两种: 有线介质 导线管(导向媒体).例如:双绞线.同轴电缆.光纤等 无线介质 电磁波(非导向媒体):利用各种波长的电磁波充 ...
- TCP/IP基础知识
TCP/IP基础知识 网络 TCP/IP 引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP ...
- TCP/IP协议原理与应用笔记18:构成子网和超网
1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模 C类地址:少于255台主机的网络 B类地址:介于255~65535台主机的网络 ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- TCP/IP 基础简介
引言本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容TCP/IP协议簇是由OSI七层模型发展而来的,之所以存在 ...
- 网络基础 04_IP编址
1 IP地址简介 什么是IP地址 在IP网络中,任何一个节点都需要一个唯一的IP IPV4 :32位 点分十进制 2 IP编址分类 有类编址 IP地址的类别 IP地址类型 网络地址:指代网络的地址.在 ...
随机推荐
- python_基于反射模拟Web框架路由系统
根据用户输入的内容,导入模块 #根据用户输入的内容,导入模块 inp = input("请输入模块名: ") print(inp,type(inp)) dd = __import_ ...
- [水煮 ASP.NET Web API2 方法论](1-2)在 WebForm 应用程序中添加 ASP.NET Web API
问题 怎么样将 Asp.Net Web Api 加入到 Asp.Net Web From 应用程序中 解决方案 在 Visual Studio 2013 中,创建新的 Web From,可以直接在&q ...
- StyleCop setting
StyleCop下载地址:http://stylecop.codeplex.com/ -Documentation Rules 文档化注释规则 -Element Documentaion 变量的文档化 ...
- 前端javascript实现二进制读写操作
由于种种原因,在浏览器中无法像nodejs那样操作二进制. 最近写了一个在浏览器端操作读写二进制的帮助类 !function (entrance) { "use strict"; ...
- iwebshop 增加页面访问次数实时
class里面的主控制器初始化时添加如下代码 //更新页面访问次数 $siteConfig = new Config('site_config'); $sFilePath =$siteConfig-& ...
- Ubuntu 18.04安装网易云音乐(转载)
作为Ubuntu下唯一一款超级好用的音乐软件,必须下载. 提升为root权限后操作 0 : 网易云音乐1.0.0(该版本较为好安装)下载地址 http://s1.music.126.net/downl ...
- Qt应用如何发布
原文请看:http://www.cnblogs.com/ungshow/archive/2010/10/10/1847082.html 通常情况下,使用Qt开发应用都是采用动态编译的方式来进行发布,发 ...
- python 重新执行循环中出错的那一次
# coding: utf-8 li = [1,2,3,4,5] for num in li: while True: try: # do something except some error: c ...
- CNN-感受野
CNN中感受野的计算:http://blog.csdn.net/kuaitoukid/article/details/46829355(好像有错误)http://blog.csdn.net/green ...
- [BZOJ1305][CQOI2009]跳舞(网络流)
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3944 Solved: 1692[Submit][St ...