1.接口和地址

如下面的图全部本文中讨论的接口和地址的结构看一个示例配置:

上图中显示了我们三个接口样例:以太网接口,SLIP接口和环回接口。

它们都有一个链路层地址作为地址列表中的第一个结点。

显示的以太网接口有两个IP地址。SLIP接口有一个IP地址,而且环回接口有一个IP地址和一个OSI地址。

全部的IP地址都被链接到in_ifaddr列表中,而且全部链路层地址能从ifnet_addrs数组訪问。

后面的部分讨论上图的数据结构以及用来查看和改动这些结构的IP专用ioctl命令。

2.sockaddr_in结构

之前讨论了通用的sockaddr和ifaddr结构。如今我们说明IP专用的结构:sockaddr_in和in_ifaddr。

在Internet域中的地址存放在

一个sockaddr_in结构:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVE9ERDkxMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

因为历史原因,Net/3以网络字节序将Internet地址存储在一个in_addr结构中,这个结构仅仅有一个成员s_addr,它包括这个地址。

3.in_ifaddr结构

下图显示了Internet协议定义的接口地址结构。

对于每一个指派给一个接口的IP地址,分配一个in_ifaddr结构,而且加入到接口地址列表中和IP地址全局列表中。

下图为以太网、PPP和环回in_ifaddr结构。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVE9ERDkxMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

4.地址指派

当接口结构在系统初始化期间被识别时的初始化。在Internet协议能通过这个接口进行通信前,必须指派一个IP地址。一个Net/3

内核执行,程序ifconfg就配置这些接口,ifconfig通过在某个插口上的ioctl系统调用来发送配置命令。通常都是通过系统引导时

调用shell脚本运行的。

下图是本文涉及到的ioctl命令。命令相关的地址必须是此命令插口所支持的地址族类,对于IP地址。ioctl命令在一个UDP插口上

发送。

本文中说明的ioctl的函数。

SIOCG命令用于获取地址信息。

SIOCS用于设置地址信息。

SIOC代表socket ioctl。

上图中的命令改动一个接口的相关地址信息。因为地址时特定协议使用的,因此。命令处理是与协议相关的。

4.1.ifioctl函数

ifioctl协议将协议相关的ioctl命令传递给此插口关联的pr_usrreq函数。将控制权交给udp_usrreq,而且又马上传给in_control,

在in_control中进行大部分处理。

我们依照以下的顺序查看这个接口ioctl命令。以及这些命令在in_control中处理。

1.指派一个地址、网络掩码或目标地址

2.指派一个广播地址

3.取回一个地址,网络地址。目标地址或广播地址

4.给一个接口指派多播地址

5.删除一个地址

对于全部这命令,在in_control函数中有两个switch语句。第一个switch语句进行前提处理,然后在第二个switch语句中处理

命令。

4.2.前提条件:SIOCSIFADDR、SIOCSIFNETMASK和SIOCSIFDSTADDR

对于这三个命令in_control函数中第一个switch做同样的处理:

1.仅用于超级用户

2.分配并初始化in_ifaddr结构

4.3.地址指派SIOCSIFADDR

在第二个switch中处理这个命令,调用in_ifinit完毕全部的工作。

4.4.in_ifinit函数

if_ifinit的主要过程例如以下:
1.将地址拷贝到此结构并将此变化通知硬件。
2.忽略原来地址配置的不论什么路由。
3.为这个地址建立一个子网掩码。
4.建立一个默认路由到连接的网络或主机。
5.将此接口增加到全部主机组。

4.5.网络掩码指派:SIOCSIFNETMASK

in_control函数从ifreq结构中获取网络掩码。并将它以网络字节序保存在ia_sockmask。以主机字节序保存在ia_subnetmask中。


4.6.目的地址指派:SIOCSIFDSTADDR

对于点对点接口,在链路还有一端的系统的地址使用该命令指定。

代码设置新地址后,使用函数if_ioctl通知硬件。假设地址原来有一个关联的路由。首先调用rtinit删除这路由,并再次调用rtinit

为新地址安装一个路由。

4.7.获取接口信息

获取接口信息的过程比較简单。将in_ifaddr相应的信息拷贝到ioctl參数ifreq中。

4.8.每一个接口多个IP地址

SIOCG和SIOCS命令仅仅操作一个接口关联的第一个IP地址,为支持每一个接口多个IP地址,必须使用SIOCAIFADDR命令指派和

配置其它的地址。

实际上SIOCAIFADDR能完毕SIOCG和SIOCS命令能完毕的操作。

程序ifconfig使用SIOCAIFADDR来配置一

个接口的全部地址信息。

4.9.删除IP地址:SIOCDIFADDR

命令SIOCDIFADDR从一个接口删除IP地位置。查找并从当前接口要求IP同样的地址结构,并删除任何路由都与此地址相关联。

版权声明:本文博主原创文章,博客,未经同意不得转载。

《TCP/IP作品详细解释2:达到》注意事项--IP地址的更多相关文章

  1. 《TCP/IP作品详细解释2:实现》笔记--Radix树路由表

    通过IP完整的路由是路由机制,它通过搜索路由表来确定从哪个分组被发送的接口执行此,它是不一样的路由策略,路由策略 它是一组规则,这些规则可以被用来确定哪些路由编程到路由表,Net/3内核实现的路由机制 ...

  2. 《TCP/IP作品详细解释2:达到》注意事项--ARP:地址解析协议

    Net/3于ARP和实施密切与路由表相关联的,下图显示了我们的叙述性说明ARP使用样品. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVE9ERDkxMQ ...

  3. TCP/IP具体解释--UDP数据报中的IP分片

    1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标 ...

  4. 三、tcp、ip协议详细

    1. 什么是 TCP/IP? TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议 1) 网络接口层: 主要是指物理层次的一些接口,比如电缆等 ...

  5. 关于 /proc/sys/net/ipv4/下 文件的详细解释

    关于 /proc/sys/net/ipv4/下 文件的详细解释: 1) /proc/sys/net/ipv4/ip_forward  该文件表示是否打开IP转发.      0,禁止      1,转 ...

  6. Linux下函数调用堆栈帧的详细解释【转】

    转自:http://blog.chinaunix.net/uid-30339363-id-5116170.html 原文地址:Linux下函数调用堆栈帧的详细解释 作者:cssjtuer http:/ ...

  7. #pragma详细解释(一)

    #pragma详细解释 #pragma详细解释(一) 2010-04-18 14:21:00|  分类: 默认分类 |  标签: |字号大中小订阅     在#Pragma是预处理指令它的作用是设定编 ...

  8. linux tcpdump抓取HTTP包的详细解释

    tcpdump tcpdump是linux系统自带的抓包工具,主要通过命令行的方式,比较适合在线上服务器进行抓包操作,如果是windows或者ubuntu完全可 以选择一些图形化的工具,ubuntu比 ...

  9. Linux内核TCP MSS机制详细分析

    前言 上周Linux内核修复了4个CVE漏洞[1],其中的CVE-2019-11477感觉是一个很厉害的Dos漏洞,不过因为有其他事打断,所以进展的速度比较慢,这期间网上已经有相关的分析文章了.[2] ...

随机推荐

  1. 在内网架设一个可供外网登录的ftpserver

    ftpserver是使用比較寻常的server,可是IP资源是有限的.那么怎么让内网的server給外网的用户提供服务了? 首先须要找一个FTPserver程序,我在这边使用pure-ftpd-mys ...

  2. Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框

    现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个, ...

  3. AJAX基础知识点学�

    1.AJAX(Asynchronous JavaScript and XML)即,异步JavaScript和XML 2.同步/异步差别 同步: ①每次进行整个页面的刷新 ②同步的链接在同一时间仅仅能有 ...

  4. Jetty 9.3庆祝20周年生日快乐,并添加HTTP/2支持

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/Building-Distributed-Systems 今年6月12日 ...

  5. java导入excel

    package com.duosen.gate.test; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  6. Java算法分析1—————寻找数组同样元素

    算法的两个评測指标:执行时间和内存消耗 要么用时间换空间,要么用空间换时间 寻找数组同样元素測试一: 0~99共100个元素各不同样,新增加一个0~99的元素不明白位置 从101个元素数组中找出与0~ ...

  7. 图画(txt等一下)实施开放的默认下载的默认浏览器,而不是(Java文本)

    在网络上,假设我们超链接地址对应于jpg档,txt档,点击链接,默认浏览器打开这些文件,而不是下载,那么,你如何实现竞争力的默认下载. 1.可通过自己写一个download.jsp来实现 <%@ ...

  8. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

  9. Java EE (8) -- Java EE Patterns

    Java EE 模式目录由以下三个层组成: –     整合层(4) –     业务层(9) –     表示层(8) 涉及 Java EE 平台代码与其它类型应用程序或遗留系统的集成: 服务激活器 ...

  10. JS学习笔记-OO疑问之对象创建

    问一.引入工厂,解决反复代码 前面已经提到,JS中创建对象的方法,不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码. 解决:工厂模式方法(加入一个专门 ...