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. 八:Zookeeper开源客户端Curator的api测试

    curator是Netflix公司开源的一套ZooKeeper客户端,Curator解决了很多ZooKeeper客户端非常底层的细节开发工作.包括连接重连,反复注册Watcher等.实现了Fluent ...

  2. Linux 基础——查看文件内容的命令

    第四天,继续学习.今天看到一句话,"你以为你以为的就是你以为的吗?",这句话还是有点意思啊!!! 一.查看文件内容的命令 file dest:查看文件的类型.在Linux中,文件的 ...

  3. git 解冲突

    如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下: git stash git pull git stash pop 然后可以使用Git diff -w +文件名 来确认代码自动合 ...

  4. jdk的split 有多坑

    先看段 代码: String str = "4117|519951|长信利泰灵活配置混合型证券投资基金|长信利泰|3|3||||156|0||||||||||||||||||||{\&quo ...

  5. Java工具类-设置字符编码

    package common; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...

  6. Eclipse有助于提高开发速度的快捷键

    用Eclipse已经很长一段时间了,自己常用的几个快捷键也已经很熟,但还是有一些自己不经常在开发中使用,但非常使用的快捷键,记录下来,以后利用来提高开发效率. 1.ctrl + shift + r   ...

  7. 可持久化线段树(cf1080F)

    大佬博客 https://www.cnblogs.com/zinthos/p/3899565.html 题目:https://codeforces.com/problemset/problem/108 ...

  8. 洛谷——P1862 输油管道问题

    P1862 输油管道问题 题目背景 听说最近石油危机 所以想到了这题 题目描述 某石油公司计划建造一条由东向西的主要输油管道.该管道要穿过一个有n口油井的油田.从每口油井都要有一条输油管道沿最短路径( ...

  9. 从Windows复制文件到Linux显示乱码问题

    (1).文件名乱码 这并不是所有人都会碰到的问题,一般常见于使用putty的用户.使用convmv命令可以解决这个问题. 我写详细一点还原真实场景,首先我来上传一个测试文件“a此文件在windows下 ...

  10. Xamarin中VS无法连接Mac系统的解决办法

    Xamarin中VS无法连接Mac系统的解决办法 按照以下步骤排查:(1)确认Mac系统中安装Xamarin.iOS开发必备的组件,如Mono.Xamarin.iOS.(2)将Windows和Mac下 ...