IP(Internet Protocol,因特网协议)是TCP/IP协议族中最核心的协议之一,它工作在网络层。在网络中,每个IP设备都需要拥有一个逻辑上的虚拟地址,IP协议使用这个虚拟地址实现设备间的相互通信,通常称此地址为IP地址。
IPv4是因特网协议开发过程中的第四个修订版本,也是第一个被广泛应用的版本。IPv4的后继版本为IPv6,直到2011年,IPv4地址即将用尽时,IPv6仍处在部署的初期。IPv4使用32位地址,因此地址空间中只有4,294,967,296个地址,其中还有部分地址被保留用作特殊用途。
说明
以下仅针对IPv4进行介绍,文中的IP地址均指代IPv4地址。
IP地址顾名思义,自然是IP层协议的互连地址。IP地址由32位二进制数字组成,为了书写和描述方便,一般用十进制表示。十进制表示时,分为四组,每组8位,取值范围为0~255,组之间用“.”号隔开,称为“点分十进制”,比如“192.168.1.1”就是用十进制表示的IP地址。
32位的IP地址由两个部分组成:1)网络号字段,即网络标识;2)本地地址字段,即主机标识。根据网络部分的起始几个比特位的值,目前使用中的IP地址可以划分成四大类。
A类地址,最高比特位为“0”,而后7个比特位表示网络号,最后24个比特位表示本地地址(主机标识)。共有27=128个A类网络。
A类网络
B类地址,最高2个比特位为“10”,而后14个比特位表示网络号(网络标识),最后16个比特位表示本地地址(主机标识)。共有214=16,384个B类网络。
B类网络
C类地址,最高3个比特位为“110”,而后21个比特位表示网络号,最后8个比特位表示本地地址。共有221=2,097,152个C类网络。
C类网络
D类地址,最高4个比特位为“1110”,其余比特位为组播地址。
D类网络
说明
最高4个比特位为“1111”的地址是不允许分配的,这些地址称为E类地址,属于保留地址。
在建设网络过程中,进行IP地址规划时,一定要根据网络的性质进行IP地址分配。如果建设的网络需要与互联网连接,则需要到相应的机构申请分配IP地址。中国地区可以向CNNIC(China Internet Network Information Center,中国互联网信息中心)申请,负责IP地址分配的最终机构为ICANN(Internet Corporation for Assigned Names and Numbers,国际互联网名字与编号分配公司)。如果建设的网络为内部私有网络,就不需要向机构申请IP地址,可直接分配专门的私有网络地址。
保留与可用的地址
类别 |
地址空间 |
状态 |
|---|---|---|
A类网络 |
0.0.0.0~0.255.255.255 |
保留 |
1.0.0.0~126.255.255.255 |
可用 |
|
127.0.0.0~127.255.255.255 |
保留 |
|
B类网络 |
128.0.0.0~191.254.255.255 |
可用 |
191.255.0.0~191.255.255.255 |
保留 |
|
C类网络 |
192.0.0.0~192.0.0.255 |
保留 |
192.0.1.0~223.255.254.255 |
可用 |
|
223.255.255.0~223.255.255.255 |
保留 |
|
D类网络 |
224.0.0.0~239.255.255.255 |
组播地址 |
E类网络 |
240.0.0.0~255.255.255.254 |
保留 |
255.255.255.255 |
广播地址 |
私有网络IP地址是不会在互联网中使用的,如果分配了私网地址的设备需要连接互联网,则需要将这些IP地址转换成有效的互联网地址。表1-2为私有网络地址空间,私有网络地址由RFC 1918文档定义,共3个地址块。
类别 |
地址空间 |
状态 |
|---|---|---|
A类网络 |
10.0.0.0~10.255.255.255 |
1个A类网络 |
B类网络 |
172.16.0.0~172.31.255.255 |
16个B类网络 |
C类网络 |
192.168.0.0~192.168.255.255 |
256个C类网络 |
关于IP地址、TCP/UDP端口及其它编码的分配情况,请参考RFC 1166文档。
以下列出的IP地址因为具有特殊的用途,不能用作主机的IP地址。
网络号为全0的地址:表示本网络内的主机。例如,0.0.0.16表示本网络内主机号为16的主机。
主机号为全0的地址:表示网络地址,用于标识一个网络。例如192.168.1.0。
主机号为全1的地址:表示网络广播地址。例如,目的地址为192.168.1.255的报文,将转发给192.168.1.0网络内所有的主机。
网络掩码也是一个32比特的数值,标识着该IP地址的网络部分所占比特位。网络掩码中,值为“1”的比特位对应的IP地址比特位是网络部分,值为“0”的比特位对应的IP地址比特位是主机地址部分。如A类网络对应的网络掩码为“255.0.0.0”。网络掩码可用于划分一个网络的子网,将主机地址的一部分比特位当作网络号,缩小主机容量,增加网络的数量,这时的网络掩码就称为子网掩码。
MTU(Maximum Transmit Unit,最大传输单元)指数据链路层提供给其上层(通常是IP层)最大传输数据的大小,单位为字节。不同的协议要求的MTU大小不同,比如:
IEEE 802.3/802.2的MTU为1492字节。
以太网口的MTU范围为64~1518字节,过大或过小的以太网帧都可能被丢弃。
IP协议会根据二层MTU的值来决定是否对数据进行分片,当两台主机跨越多个网络进行通信时,每条链路可能有不同大小的MTU,其中最小的MTU决定了传输速率。
TTL(Time To Live,生存时间)指数据包被路由设备丢弃之前允许通过的网段数量。TTL值可用于判断数据包在网络中的时间是否太长而应被丢弃。
当两台主机跨越多个网络进行通信时,发送端设置一个起始的TTL数值,每经过一台路由设备TTL值就减一。当TTL值减到零的时候,设备就认为目的不可达,随即把这个数据包丢弃。TTL可防止无用的数据包在网络上无限传播下去,浪费网络带宽。
一台设备只有拥有了IP地址,才可以接收和发送IP数据包,配置了IP地址的设备接口允许运行IP协议。
接口获取IP地址有以下4种方式,这几种方式是互斥的,新的配置方式获取的IP地址会覆盖通过原有方式获取的IP地址。
手工配置IP地址。
利用DHCP协议获取IP地址。关于DHCP协议的详细介绍,请参见“IP业务配置指南”中的“DHCP”。
通过PPP协商获得IP地址。点对点接口可以通过PPP协商接受对端为本端分配的IP地址。在PPP协商过程中,服务器会校验客户端的认证信息,如果校验通过,服务器就会为客户端分配IP(如果客户端配置了IP,且符合服务器的要求,服务器会同意这个IP为客户端的IP),配置可以直接指定对端IP地址,也可以从地址池获取空闲地址进行分配。
借用其它接口的IP地址。一个接口可向同一设备上其它有IP地址的接口借用一个IP地址。
说明
以太网接口、隧道接口和环回接口的IP地址可以被其它接口借用,但它们不能借用其它接口的IP地址。
被借用接口的IP地址不能是通过借用获取到的IP地址。
如果被借用接口有多个IP地址,只有主IP地址可被借用。
一个接口的IP地址可以借给多个接口。
借用接口的IP地址始终和被借用接口的IP地址保持一致,随着被借用接口的IP地址变化而变化。
设备可以支持一个接口配置多个IP地址,其中一个为主IP地址,其余全部为次IP地址(Secondary IP)。次IP地址的配置理论上没有数目限制,但是次IP地址与主IP地址以及其他次IP地址之间必须属于不同网络。在网络建设中,会经常使用到次IP地址,通常在以下情况下应该考虑使用次IP地址:
一个网络没有足够多的主机地址。例如,当一个局域网的主机超过254台时,一个C类网络将不够分配,有必要分配另一个C类网络地址,这样设备就需要连接两个网络,所以接口就需要配置多个IP地址。
许多早前的网络是基于第二层的桥接网络,没有进行子网的划分。次IP地址的使用可以使该网络很容易升级到基于IP层的路由网络。对于每个子网,设备都配置一个IP地址。
一个网络的两个子网被另外一个网络隔离开,由于一个子网不能在设备的两个或两个以上接口出现,可以创建一个被隔离网络的子网,通过配置次IP地址的方式,将隔离的子网连接起来。
广播报文是指目标地址为某个物理网络上所有主机的数据包。设备支持两种类型广播报文:一种是淹没广播,目标地址的32个比特位全为“1”,即255.255.255.255;另一种是定向广播,目标地址是一个指定网络的所有主机,即主机部分全为“1”,例如:192.168.1.255/24。淹没广播会被路由设备禁止传输,而定向广播通过配置是可以被转发的。
如果IP网络设备转发淹没广播,可能会引起网络的超负载,严重影响网络的运行,这种情况称为广播风暴。设备提供了多个办法能够将广播风暴限制在本地网络,阻止其继续扩张。但桥和交换机是基于二层的网络设备,依然将转发和传播广播风暴。
解决广播风暴最好的办法就是给每个网络指定一个广播地址,这就是定向广播,这要求使用广播报文的IP协议尽可能使用定向广播而不是淹没广播进行数据传播。当没有与目标子网直连的设备接收到IP定向广播报文时,将按照转发单播报文的方式来处理定向广播报文。当定向广播报文到达直连目标子网的设备后,该设备将把定向广播报文转换为淹没广播报文,然后以链路层广播的方式发送给目标子网上的所有主机。
关于广播问题的详细描述,请参见RFC 919和RFC 922。
ICMP(Internet Control Message Protocol,因特网控制报文协议)是TCP/IP协议族的一个子协议,用于在IP主机和网络设备之间传递控制消息,主要用于将报文传输异常的情况通知相应设备。以下介绍常见的ICMP消息报文。
回送请求和回送应答
常用的Ping操作中用到了回送请求和回送应答ICMP报文。一台设备向另一个节点发送一个回送请求报文,如果途中没有异常,则目标返回回送应答报文,说明这台主机可达。
协议不可达消息
当设备接收到目标为本端的非广播报文,但是该数据包中采用了设备不能处理的IP协议,设备就向源地址发送ICMP协议不可达消息。
主机不可达消息
当设备接收到目标为本端的非广播报文,但设备由于不知道路由而不能转发数据包时,设备就向源地址发送ICMP主机不可达消息。
重定向消息
有时网络设备从一个接口接收到的数据包,还要从该接口发送出去,这说明路由不是最佳的。如果设备遇到这种情况,就会给数据源发送一个ICMP重定向消息,告知到达该目标地址的网关为同一子网上的另外一台设备。这样数据源会将后续的数据包按照最佳的路径进行发送。
掩码应答消息
有时网络设备需要知道互联网上某个子网的子网掩码,为了获取该信息,网络设备可以发送ICMP掩码请求消息,接收到ICMP掩码请求消息的网络设备就会回复掩码应答消息。
TTL超时消息
设备转发IP报文时,如果报文的TTL超时了,设备需要向源端回应一个TTL超时的差错报文。
为了防止被其他设备通过Traceroute定位到,进而遭受到攻击,可以关闭TTL超时差错报文的发送功能。关闭该功能后,设备收到TTL超时的报文时,将不再回应TTL超时差错报文。
时间戳查询
RFC 792要求系统收到ICMP时间戳查询时,需要返回系统的当前时间。
为了防止攻击者通过该协议获取到系统的时间,从而攻击其他基于时间认证的协议,可以关闭时间戳查询功能。关闭该功能后,设备收到时间戳查询报文直接丢弃,不再应答。
为了防止拒绝服务攻击,对ICMP差错报文的发送速率进行限制,采用令牌桶算法。
如果IP报文需要分片,但是IP首部的不可分片位被设置了,设备会向源IP地址发送ICMP目的不可达报文,这种ICMP差错报文的主要用途是路径MTU发现。为了防止其它ICMP差错报文太多导致发不出ICMP目的不可达报文,从而导致路径MTU发现功能失效,可对ICMP目的不可达报文和其它ICMP差错报文分别限速。
网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。
如果一个IP报文超过IP MTU的大小,设备软件就会对报文进行拆分。在同一物理网段上的所有设备,其互联接口的IP MTU需要保持一致。设备允许调整接口的链路MTU值,而且接口链路MTU的变化会引起接口IP MTU的变化,接口IP MTU会自动与接口链路MTU保持一致。但是反之,如果调整了接口IP MTU值,接口链路MTU不会随着改变。
当设备接收到IP数据包时,会对IP报头的严格源路由、宽松源路由和记录路由等选项进行检查,这些选项在RFC 791中有详细描述。如果检测到该数据包启用了其中一个选项,就会执行响应的动作;如果检测到无效的选项,就会给数据源发送一个ICMP参数问题消息,然后丢弃该数据包。
在设备上开启IP源路由的功能,软件会在IP数据包选项中增加源路由选项,可用于测试某特定网络的吞吐率,也可以是数据报绕开出错的网络。然而,可能会导致诸如源地址欺骗(Source Address Spoofing)和IP欺骗(IP Spoofing)等的网络攻击。
RFC 1918:Address Allocation for Private Internets
RFC 1166:Internet Numbers
RFC 919:Broadcasting Internet Datagrams
RFC 922:Broadcasting Internet Datagrams Subnets
RFC 791:Internet Protocol
RFC 792:Internet Control Message Protocol
配置接口IP地址
配置广播报文的处理方式
配置ICMP消息的处理方式
配置ICMP报文差错报文的发送速率
配置IP MTU
配置IP分片报文软件重组功能
配置IP TTL
配置IP路由口保护
配置IP源路由
配置接口IP地址实现IP网络通信。可通过手动配置或动态DHCP方式获取到IP地址,一般情况下,一个接口只需配置一个IP地址即可实现与其他主机进行IP通信。
配置接口IP地址。以下配置步骤互斥,请选择其中一项进行配置。
配置接口的静态IP地址
(可选)配置IP广播地址
手动配置IP地址的方式与动态获取IP地址的方式是互斥的,配置新的获取IP地址方式会覆盖通过原有方式获取的IP地址。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
进入SVI接口配置模式。
interface vlan interface-number
配置接口IP地址。
ip address ipv4-address { mask | mask-length } [ secondary ]
缺省情况下,接口未配置IP地址。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
配置IP广播地址。
ip broadcast-address ipv4-address
缺省情况下,接口IP广播地址为255.255.255.255。
用户可以在指定的接口上,配置接口允许转发定向广播,该接口就可以转发目标为直连网络的定向广播。
本功能只影响定向广播报文在目标子网的传输,而不影响其它定向广播报文的正常转发。
在接口上,用户还可以通过定义访问控制列表来控制转发某些定向广播。当定义了访问列表时,只有符合访问列表中定义的定向广播才会被转发。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
配置允许转发定向广播。
ip directed-broadcast [ acl-number ]
缺省情况下,IP定向广播到物理广播的转换功能处于关闭状态。
ICMP协议用于在IP主机、网络设备之间传递控制消息,主要用于网络出现异常的时候通知相应设备。可通过配置开启TTL超时消息、时间戳查询功能、ICMP目标不可达消息、ICMP重定向消息以及ICMP掩码应答消息。
以下所有配置任务均为可选配置,请根据实际情况选择配置。
开启TTL超时消息功能
开启时间戳查询功能
开启ICMP目标不可达消息功能
开启ICMP重定向消息功能
开启ICMP掩码应答消息功能
进入特权模式。
enable
进入全局配置模式。
configure terminal
开启TTL超时消息功能。
ip ttl-expires enable
缺省情况下,发送TTL超时消息功能处于开启状态。
进入特权模式。
enable
进入全局配置模式。
configure terminal
开启时间戳查询功能。
ip icmp timestamp
缺省情况下,时间戳查询功能处于开启状态。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
开启ICMP目标不可达消息功能。
ip unreachables
缺省情况下,ICMP目标不可达消息功能处于开启状态。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入三层以太网接口配置模式。
interface ethernet-type interface-number
开启ICMP重定向消息功能。
ip redirects
缺省情况下,ICMP重定向消息功能处于开启状态。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
开启ICMP掩码应答消息功能。
ip mask-reply
缺省情况下,发送ICMP掩码应答消息功能处于关闭状态。
为了防止拒绝服务攻击,对ICMP差错报文的发送速率进行限制,采用令牌桶算法。
如果IP报文需要分片,但是IP首部的不可分片位被设置了,设备会向源IP地址发送ICMP目的不可达报文,这种ICMP差错报文的主要用途是路径MTU发现。为了防止其它ICMP差错报文太多导致发不出ICMP目的不可达报文,从而导致路径MTU发现功能失效,对ICMP目的不可达报文和其它ICMP差错报文分别限速。
因为定时器的精度是10毫秒,建议用户把令牌桶的刷新周期配置成10毫秒的整数倍。如果令牌桶的刷新周期大于0小于10,实际生效的刷新周期是10毫秒,例如配置5毫秒1个,实际效果是10毫秒2个;如果令牌桶的刷新周期不是10毫秒的整数倍,实际生效的刷新周期自动换算成10毫秒的整数倍,例如配置15毫秒3个,实际效果是10毫秒2个。
进入特权模式。
enable
进入全局配置模式。
configure terminal
配置ICMP差错报文的发送速率。
ip icmp error-interval [ df ] interval [ bucket-size ]
缺省情况下,100毫秒发送10个ICMP差错报文。
调整IP包最大传输单元(MTU)。如果一个IP报文超过IP MTU的大小,软件就会对报文进行拆分。
所有在同一物理网段上的设备,其互联接口的IP MTU必须一致。设备允许调整接口的链路MTU值,而且接口链路MTU的变化会引起接口IP MTU的变化,接口IP MTU会自动与接口链路MTU保持一致。但是反之,如果调整了接口IP MTU值,接口的链路MTU不会跟着改变。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
进入三层以太网接口配置模式。
interface ethernet-type interface-number
进入三层聚合接口配置模式。
interface aggregateport interface-number
进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
配置IP MTU。
ip mtu mtu
缺省情况下,接口IP包最大传输单元为1500字节。
设备默认会对送CPU的IP报文进行软件重组,之后再决定是转发还是直接由本机处理。如果希望对上送CPU的IP报文不做软件重组,则需要配置此命令。
进入特权模式。
enable
进入全局配置模式。
configure terminal
关闭IP分片报文软件重组功能。
ip reassemble disable
缺省情况下,IP分片报文软件重组功能处于开启状态。
IP数据包从源地址向目的地址经过路由设备间传播,设置一个TTL数值,每过一个路由设备,TTL值就减一。当TTL减到零的时候,设备就丢弃这个数据包。TTL值可以防止无用的包在网络上无限传播下去,浪费网络带宽。
进入特权模式。
enable
进入全局配置模式。
configure terminal
配置IP TTL。
ip ttl ttl
缺省情况下,发送的单播报文的TTL值为64。
开启路由口保护功能,可禁止报文从源口转发出去。
只适用于三层路由口。
进入特权模式。
enable
进入全局配置模式。
configure terminal
进入接口配置模式。
interface interface-type interface-number
配置IP路由口保护。
ip redirect-drop
缺省情况下,IP路由口保护功能处于关闭状态。
开启IP源路由信息的处理功能,在IP数据报选项中增加源路由选项,可用于测试某特定网络的吞吐率,也可以避免数据报文进入出错的网络。
开启IP源路由信息的处理功能可能会导致诸如源地址欺骗(Source Address Spoofing)和IP欺骗(IP Spoofing)等的网络攻击。
进入特权模式。
enable
进入全局配置模式。
configure terminal
开启IP源路由信息的处理功能。
ip source-route
缺省情况下,IP源路由信息的处理功能处于开启状态。
可以通过show命令行查看功能配置后的运行情况以验证配置效果。
IPv4基础监视与维护
作用 |
命令 |
|---|---|
查看接口IP信息 |
show ip interface [ interface-type interface-number | brief ] |
查看IP报文统计信息 |
show ip packet statistics [ interface-type interface-number | total ] |
查看协议栈IP报文收发统计信息 |
show ip packet queue |
查看地址池统计信息 |
show ip pool [ pool-name ] |
查看所有IPv4原始套接字 |
show ip raw-socket [ protocol-number ] |
查看所有IPv4套接字 |
show ip sockets |
查看所有IPv4 UDP套接字 |
show ip udp [ local-port port-number | peer-port port-number ] |
查看所有IPv4 UDP套接字的统计值 |
show ip udp statistics |
如图1-5所示,Device A连接着一个局域网(属于VLAN1),局域网分为两个网段:172.16.1.0/24和172.16.2.0/24。要求两个网段的计算机都可以通过Device A和因特网通信,并且两个网段的主机之间可以互相通信。
在VLAN 1口上配置两个IP地址,一个为主IP地址,另一个为次IP地址。
两个网段上的主机将设备设为网关。
配置Device A
# 配置VLAN 1的主IP地址和次IP地址。
DeviceA> enable
DeviceA# configure terminal
DeviceA(config)# interface vlan 1
DeviceA(config-if-VLAN 1)# ip address 172.16.1.1 255.255.255.0
DeviceA(config-if-VLAN 1)# ip address 172.16.2.1 255.255.255.0 secondary
配置172.16.1.0/24网段中的主机
# 配置主机的网关为172.16.1.1/24。
配置172.16.2.0/24网段中的主机
# 配置主机的网关为172.16.2.1/24。
# 在Device A上使用ping命令检测与网络172.16.1.0/24内主机的连通性。
DeviceA# ping 172.16.1.2
Sending 5, 100-byte ICMP Echoes to 172.16.1.2, timeout is 2 seconds:
< press Ctrl+C to break >
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms.
# 在Device A上使用ping命令检测与网络172.16.2.0/24内主机的连通性。
DeviceA# ping 172.16.2.1
Sending 5, 100-byte ICMP Echoes to 172.16.2.1, timeout is 2 seconds:
< press Ctrl+C to break >
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms.
# 使用ping命令检测网络172.16.1.0/24和网络172.16.2.0/24内主机的连通性。
Device A的配置文件
hostname DeviceA
!
interface vlan 1
ip address 172.16.1.1 255.255.255.0
ip address 172.16.2.1 255.255.255.0 secondary
!