《TCP/IP详解卷2:实现》笔记--IP编址

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结构:

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

3.in_ifaddr结构

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

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

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

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编址,布布扣,bubuko.com

时间: 2024-08-02 07:03:18

《TCP/IP详解卷2:实现》笔记--IP编址的相关文章

《TCP/IP 详解 卷一》读书笔记-----IP静态 路由

1.主机中的路由表只能被守护进程routing daemon或者“redirect”类型的ICMP报文所更新. 2.在根据路由表进行路由选择时,判断的优先级从高到低依次为1)表中存在与目的IP完全匹配的表项2)表中存在与目的地址的网络地址匹配的表项3)表中存在default,即默认路由表项.经历上述三个步骤仍未匹配成功的,则丢弃该数据报. 3.netstat指令用于查看主机的路由表,如下图所示: 其中Gateway的“0.0.0.0”表示目的主机与当前主机在同一网段中,可直接到达,无需网关进行转

《TCP/IP详解卷1:协议》第14章 DNS:域名系统---读书笔记

<TCP/IP详解卷1:协议>第14章 DNS:域名系统---读书笔记 1.引言 5.指针查询 DNS中一直难于理解的部分就是指针查询方式,即给定一个IP地址,返回与该地址对应的域名. 当一个组织加入Internet,并获得DNS域名空间的授权,如noao.edu,则它们也获得了对应IP地址的in-addr.arpa域名空间的授权.在noao.edu这个例子中,它的网络号是140.252的B类网络.在DNS树中结点in-addr.arpa的下一级必须是该IP地址的第一字节(例中为140),再下

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 1.引言 具有本地磁盘的系统引导

《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 1.引言 IP是TCP/IP协议族中最核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输.IP提供不可靠.无连接的数据报传送服务. (1)不可靠 它不能保证IP数据报能成功地到达目的地.IP仅提供最好的传输服务.如果发生某种错误,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端.

《TCP/IP详解卷2:实现》笔记--IP的分片和重装

IP首部内有三个字段实现分片和重装:标识字段(ip_id).标志字段(ip_off的3个高位比特)和偏移字段(ip_off的13个低位 比特).标志字段由3个1bit标志组成.比特0是保留的必须为0,:比特1是"不分片"(DF)标志:比特2是"更多分片"(MF)标志. Net/3中,标志和偏移字段结合起来,由ip_off访问,如下图所示: ip_off的其他13bit指出在原始数据报内分片的位置,以8字节为单位计算.因此,除最后一个分片外,其他的分片都希望是一个 8

《TCP/IP详解卷2:实现》笔记--域和协议

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Net/3组把协议关联到一个域,并且用一个协议族常量来标识每个域.Net/3还通过所有的编址方法将协议分组.在一个域中</span> 的每个协议使用同类地址,并且每种地址只被一个域使用.作为结果,一个域能通过它的协议族或地址族常量唯一标识. 下图是是我们讨论的协议和常量. 1

《TCP/IP详解卷2:实现》笔记--接口层

提示:该实验所在的平台是在RedHat 6下 该实验成功的前提有三个: (1):windows能ping通linux系统 (2):关闭linux的防火墙 :执行指令 /etc/init.d/iptables  stop (3):让SeLinux关闭  :执行指令:  setenforce permissive 补充: SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统.SELinux 是一个

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协