您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > III.Linux系统编程_36TCP/IP协议基础_5IP地址与路由
第36章TCP/IP协议基础5.IP地址与路由IPv4的IP地址长度为4字节,通常采用点分十进制表示法(dotteddecimalrepresentation)例如0xc0a80002表示为192.168.0.2。Internet被各种路由器和网关设备分隔成很多网段,为了标识不同的网段,需要把32位的IP地址划分成网络号和主机号两部分,网络号相同的各主机位于同一网段,相互间可以直接通信,网络号不同的主机之间通信则需要通过路由器转发。过去曾经提出一种划分网络号和主机号的方案,把所有IP地址分为五类,如下图所示(该图出自[TCPIP])。图36.9.IP地址类A类0.0.0.0到127.255.255.255B类128.0.0.0到191.255.255.255C类192.0.0.0到223.255.255.255D类224.0.0.0到239.255.255.255E类240.0.0.0到247.255.255.255一个A类网络可容纳的地址数量最大,一个B类网络的地址数量是65536,一个C类网络的地址数量是256。D类地址用作多播地址,E类地址保留未用。随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址。这种方式对网络的划分是flat的而不是层级结构(hierarchical)的,Internet上的每个路由器都必须掌握所有网络的信息,随着大量C类网络的出现,路由器需要检索的路由表越来越庞大,负担越来越重。针对这种情况提出了新的划分方案,称为CIDR(ClasslessInterdomainRouting)。网络号和主机号的划分需要用一个额外的子网掩码(subnetmask)来表示,而不能由IP地址本身的数值决定,也就是说,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关,因此称为Classless的。这样,多个子网就可以汇总(summarize)成一个Internet上的网络,例如,有8个站点都申请了C类网络,本来网络号是24位的,但是这8个站点通过同一个ISP(Internetserviceprovider)连到Internet上,它们网络号的高21位是相同的,只有低三位不同,这8个站点就可以汇总,在Internet上只需要一个路由表项,数据包通过Internet上的路由器到达ISP,然后在ISP这边再通过次级的路由器选路到某个站点。下面举两个例子:表36.1.划分子网的例子1IP地址140.252.20.688CFC1444子网掩码255.255.255.0FFFFFF00网络号140.252.20.08CFC1400子网地址范围140.252.20.0~140.252.20.255表36.2.划分子网的例子2IP地址140.252.20.688CFC1444子网掩码255.255.255.240FFFFFFF0网络号140.252.20.648CFC1440子网地址范围140.252.20.64~140.252.20.79可见,IP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围。IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0。如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都可以,但是RFC1918规定了用于组建局域网的私有IP地址,这些地址不会出现在Internet上,如下表所示。10.*,前8位是网络号,共16,777,216个地址172.16.*到172.31.*,前12位是网络号,共1,048,576个地址192.168.*,前16位是网络号,共65,536个地址使用私有IP地址的局域网主机虽然没有Internet的IP地址,但也可以通过代理服务器或NAT(网络地址转换)等技术连到Internet上。除了私有IP地址之外,还有几种特殊的IP地址。127.*的IP地址用于本机环回(loopback)测试,通常是127.0.0.1。loopback是系统中一种特殊的网络设备,如果发送数据包的目的地址是环回地址,或者与本机其它网络设备的IP地址相同,则数据包不会发送到网络介质上,而是通过环回设备再发回给上层协议和应用程序,主要用于测试。如下图所示(该图出自[TCPIP])。图36.10.loopback设备还有一些不能用作主机IP地址的特殊地址:目的地址为255.255.255.255,表示本网络内部广播,路由器不转发这样的广播数据包。主机号全为0的地址只表示网络而不能表示某个主机,如192.168.10.0(假设子网掩码为255.255.255.0)。目的地址的主机号为全1,表示广播至某个网络的所有主机,例如目的地址192.168.10.255表示广播至192.168.10.0网络(假设子网掩码为255.255.255.0)。下面介绍路由的过程,首先正式定义几个名词:路由(名词)数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。路由(动词)某个路由节点为数据报选择投递方向的选路过程。路由节点一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。接口路由节点与某个网络相连的网卡接口。路由表由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后一条是缺省路由条目。路由条目路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四部分组成,如果要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。缺省路由条目路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。假设某主机上的网络接口配置和路由表如下:$ifconfigeth0Linkencap:EthernetHWaddr00:0C:29:C2:8D:7Einetaddr:192.168.10.223Bcast:192.168.10.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:0errors:0dropped:0overruns:0frame:0TXpackets:10errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:0(0.0b)TXbytes:420(420.0b)Interrupt:10Baseaddress:0x10a0eth1Linkencap:EthernetHWaddr00:0C:29:C2:8D:88inetaddr:192.168.56.136Bcast:192.168.56.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:603errors:0dropped:0overruns:0frame:0TXpackets:110errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:55551(54.2Kb)TXbytes:7601(7.4Kb)Interrupt:9Baseaddress:0x10c0loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0UPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:37errors:0dropped:0overruns:0frame:0TXpackets:37errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:3020(2.9Kb)TXbytes:3020(2.9Kb)$routeKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIface192.168.10.0*255.255.255.0U000eth0192.168.56.0*255.255.255.0U000eth1127.0.0.0*255.0.0.0U000lodefault192.168.10.10.0.0.0UG000eth0这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络。路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发,因此下一跳地址处记为*号。如果要发送的数据包的目的地址是192.168.56.3,跟第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去,由于192.168.56.0/24正是与eth1接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。如果要发送的数据包的目的地址是202.10.1.2,跟前三行路由表条目都不匹配,那么就要按缺省路由条目,从eth0接口发出去,首先发往192.168.10.1路由器,再让路由器根据它的路由表决定下一跳地址。
本文标题:III.Linux系统编程_36TCP/IP协议基础_5IP地址与路由
链接地址:https://www.777doc.com/doc-2877218 .html