《Linux防火墙(第4版)》——1.2 IP协议

本节书摘来自异步社区《Linux防火墙(第4版)》一书中的第1章,第1.2节,作者:【美】Steve Suehring(史蒂夫 苏哈林)著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 IP协议

IP协议是互联网运行的基础。IP层和其他层的协议一起为不计其数的应用提供通信。IP是无连接的协议,它提供第三层的路由功能。

1.2.1 IP编址和子网划分
也许您已经有所了解,但我觉得仍有必要介绍下,IPv4的IP地址由4个8比特的数字组成,它们用点进行分隔,即“点分十进制”记法。而IPv6的IP地址有128比特,通常以8组由冒号分隔的十六进制数表示。尽管看上去每个人都知道或至少见到过IP地址,但只有少之又少的人了解子网划分和子网掩码,它们是IP编址方案中一个重要的组成部分。这一节将简要地介绍IP编址和子网划分。

IPv4地址空间被分为了不同的类型,而不是作为一整个地址空间来使用。IPv4地址的类型如表1.1所示。

实际上,只有A类、B类和C类地址才真正被互联网使用。然而,很多读者对D类地址有些印象,这类地址常用于组播。E类地址是实验性的、未分配的地址范围。

特殊IP地址
 

一共有三类主要的特殊IP地址。

网络地址0:作为A类地址的一部分,网络地址0并不会作为IPv4可路由地址的一部分使用。它在IPv6中表示为::/0。当作为源地址使用时,它唯一合法的使用时机就是在初始化期间,当主机尝试获得一个由服务器动态分配的IP地址的时候。而当它作为目的地址时,只有0.0.0.0才有意义,它只存在于本地计算机并代表它自己,或按惯例代表默认路由。
回环网络地址127:作为A类地址的一部分,网络地址127并不会被用作可路由地址的一部分。IPv6回环地址是0:0:0:0:0:0:0:1,缩写为::1。回环地址指向由操作系统提供支持的一个私有的网络接口。这个接口被用于本地基于网络的服务的寻址。换言之,本地网络客户端使用该地址来寻址到本地服务器。回环网络的流量一直存在于操作系统中,它不会被传递到物理网络接口。通常,127.0.0.1是IPv4使用的唯一回环地址,而::1是IPv6使用的唯一回环地址,它们都指向本地主机。
广播地址:广播地址是应用于网络中所有主机的特殊网络地址。广播地址主要有两种:受限广播地址和直接广播地址。受限广播不会被路由,但会被传递到同一物理网段中连接的所有主机。IP地址的网络部分和主机部分中的所有位都被置为1,即255.255.255.255。直接广播则会被路由,它将会被传递到指定网络的所有主机。其IP地址中的网络部分指定一个网络,而主机部分通常被设置为全1,例如192.168.10.255。类似的,您可能有时会看到指定为网络地址的地址,如192.168.10.0。IPv6并不使用广播地址,它使用组播(Multicast)来实现面向一组主机的通信。
screenshot
IPv4报头由很多字段构成,共20字节(不包括可作为报头中一部分的可选字段)。而IPv6报头有320比特。IPv4报头如图1.2所示。
screenshot
IPv4报头以4比特的版本字段开始,当前的版本为4,紧接着的4比特指明了头部的长度。头部通常为20字节加一些可选字段。IPv4头部的长度最大可为60字节。头部长度之后的字段为6比特的差分服务代码点(DSCP),随后是2比特的显式拥塞通告(ECN)。

IP地址中的第一个数字指明了地址的类别。由于点分十进制的每个数字都是8比特长,因此每个数字可能的取值范围是0~255。网络地址类别指明了某一地址在默认情况下用于网络部分的数字个数和用于主机部分的数字个数。网络地址和主机地址之间的划分十分重要,因为它们是子网编址的基础。

除了类别外,互联网上一共有三种类型的地址:单播地址、组播地址和广播地址。单播地址相当于互联网上的一个网络接口。组播地址则代表被包括在那个组里的多台主机。广播地址通常由要向某个特定子网中的每个主机发送数据的主机使用。

每种类型的网络地址都有一个默认的子网掩码,它指定了IP地址里用于网络部分和用于主机部分的划分。这听起来有点拗口,所以我会在后面给出一些例子,之后会有一个小测验。骗您的啦!

A类到C类的默认的子网掩码见表1.2。
screenshot
您绝对看到过并且在配置网络时输入过这些数字。前面说过,子网掩码指出了IP地址中网络部分和主机部分的划分。子网掩码未掩盖的部分是主机部分,这个子网里的主机地址构成了逻辑上的网络。换句话说,C类网络地址的子网掩码是255.255.255.0,因此在C类网络中一共有254个主机。敏锐的读者可能会注意到主机部分共有256个地址,但却只能有254台主机。在任何一个逻辑网络中有两个特殊的地址:网络地址和广播地址。不论网络容量大小,它们都存在。就拿C类子网作为例子,网络地址以.0结尾,而广播地址以.255结尾。

按表1.2的说明,在IPv4地址的32比特中,A类子网掩码使用8比特,B类子网掩码使用16比特,而C类子网掩码使用24比特。当网络依照传统的地址分类方法,用默认的子网掩码被分成了不同的网络时,它便是分类网络(classful network)。使用更小的网络通常是有益的,就像您认为的那样。例如,两个只需要向对方传输数据的IP路由器在传统的分类网络划分中将使用一个完整的C类网络。幸运的是,无分类的子网划分也是可行的。

官方称无分类子网划分(classless subnetting)为无类别域间路由选择(Classless Inter Domain Routing,CIDR),使用它可以根据需要,通过在子网掩码的末尾添加或移除比特来划分网络。它对于IP地址的保留十分有益,相比分类网络,它使得网络管理员可以更多地依据需要和方便程度自定义网络的大小,而不是依赖于分类网络的界限。再回到那个只有两个互相通信的路由器的例子,通过使用CIDR,网络管理员可以创建一个只包含两个主机的网络,其子网掩码为255.255.255.252。

将上面的例子再推广一些。这两个路由器只需要跟网络中的对方进行通信,因此它们能够路由两个不同的IP网络中的流量。网络管理员可以将一个路由器的地址设置为192.168.0.1,并将另一个路由器的地址设置为192.168.0.2,并且设置二者的子网掩码为255.255.255.252。使用这样的子网掩码,则用于寻址主机的IP地址有两个。这个逻辑网络的网络地址是192.168.0.0,而广播地址是192.168.0.3。使用了CIDR后,网络管理员便可以在其他主机中,通过遵循CIDR规则的方式为其他主机使用192.168.0网络的其余地址了。

您会经常见到子网的记法中使用/NN,而NN是被掩盖的比特的数目(网络字段所占的位数)。例如,一个C类网络地址的网络部分有24比特,这意味着它能被表示为/24。一个B类网络可以表示为/16,一个A类网络可以表示为/8。回到两个路由器的例子,这个地址的CIDR记法是/30,因为该地址中的30比特被子网使用。

为什么子网划分如此重要?简单来说,子网定义了一个网络的最大可用广播空间。在给定子网中,子网中的主机可以向所有该子网内的主机发送广播。实际上,广播更多的被物理局限性而不是由子网掩码所带来的逻辑局限性所限制。您可能会在一个交换机上连接很多的设备(重申,我是说可能),接着您会观察到性能的下降,然后您将会把该网络划分为更小的逻辑部分。如果没有子网,我们将会拥有一个非常巨大的、扁平的网络空间,它比我们现在使用的分层式寻址的方式要慢得多。

1.2.2 IP分片
有时,IP数据报的大小比它将通过的物理介质所允许的最大大小要大。这个所允许的最大大小即是最大传输单元(Maximum Transmission Unit, MTU)。如果IP数据报大小比介质的MTU更大,这个数据报则需要在传输前被分为更小的块。对于以太网来说,MTU是1500字节。将IP数据报分割成更小的片的过程被称为分片(fragmentation)。

分片在OSI模型中的IP层(网络层)进行,因此它对于高层的协议诸如TCP、UDP而言是透明的。作为管理员,您应该关注分片,因为如果分片的某个大片段丢失了,那么这将影响应用程序的性能。另外,作为安全管理员,您应该理解分片,因为在过去,它是一种攻击的方式。然而,您应意识到在通信路径中的任何中介路由或任何其他设备都可能导致分片,而且可能您根本不知道分片的发生。

1.2.3 广播与组播
当一个设备想向该网段中的所有其他设备发送数据时,它可以发送数据到一个特定的地址以达到目的,这个地址便是广播地址。另一方面,组播则是发送数据到属于组播组的设备,它们有时被称为订阅者(subscriber)。

想象一个大型的、扁平的网络,在这个网络中所有的计算机和设备都互相连接。该环境下,每个网络设备都能看到其余的网络设备的流量。在这类网络里,每个设备在面对流量时都会决定是否让这个流量进入。换言之,每个设备都会检查该数据是发给它的,还是发给其他设备的。如果数据是发送给自己的,则它会将数据按照OSI模型向上层传递。在以太网的接口中,设备会检查自己的MAC地址,或是与网络接口相关联的硬件地址。要记住的是,IP地址仅与OSI模型中更高层次的协议相关。

除了寻址到这个设备本身的数据帧外,还有两类特殊的情况会导致接口接受数据并将数据传递到更高的层中。这两类特殊的情况便是组播和广播。组播可用于传递数据到订阅了该组播的某一组设备子集。

另一方面,广播则会被所有接收到广播的设备所处理。通常有两类广播可用:直接广播(directed broadcast)和受限广播(limited broadcast)。目前,直接广播更加常见。受限广播在那些试图通过DHCP、BOOTP以及其他预配置协议配置自身的设备中使用。受限广播被发送到地址255.255.255.255,并且从不会被路由所转发。对于控制路由器或其他路由设备(例如,路由防火墙)的人来说,这一点至关重要。如果您在外部的、面向互联网的接口中收到了一个寻址到255.255.255.255的数据包,则可能存在一个错误配置的设备,或(更有可能)有一个潜在的攻击者在尝试刺探您的网络。如果您有设备在启动时通过DHCP配置自身,那么您在路由器的内部接口上看到受限广播则不足为奇。

在任何网络中,直接广播都是最常见的广播形式。这是由于地址解析协议(ARP)使用广播来获得子网中一个IP地址对应的MAC地址。直接广播受发送广播的设备所在的网络或子网的限制。通常,当一个路由器接口遇到了一个直接广播,它不会将该数据报传递到可路由的其它子网中。大多数路由器可以进行配置以允许此行为;然而,您应当谨慎些,以免打开路由器中广播的转发,从而导致广播风暴。一个子网广播是一个发往给定子网的广播地址的数据帧。该广播地址依据所要发送到的子网的掩码不同而不同。在一个C类网络中(255.255.255.0或/24),默认的广播地址是该网络中最大的可用地址,因此结尾的数字为.255。例如,在192.168.1.0/24网络中,广播地址是192.168.1.255。

1.2.4 ICMP
ICMP位于IP层,有些人说它占据了一个特殊的位置。您或许对ICMP较为熟悉,因为ping使用了ICMP。ICMP或Internet控制报文协议(Internet Control Message Protocol)有很多用途。包括ping指令的底层实现在内,ICMP共有15种功能,每种功能都由一个类型码表示。例如,ICMP的echo请求(echo request,想想ping)的类型码是8;请求的回复,即echo响应的类型码是0。在不同的类型中,还存在代码以指示该类型里不同的状态。ICMP消息的类型和代码见表1.3。
screenshot
screenshot
screenshot
screenshot
ICMP消息的类型和代码包含在ICMP的报头部分,见图1.3。
screenshot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值