互联网分组的转发2014年4月9日郑烇互联网结构•从网络层的角度来看,Internet是由一个个网络通过IP路由器互连而成,都是IP网络•不同网络分属不同机构•底层的物理网络技术也可能各不相同–以太网–DDN–FDDI–FR•最边缘:以太网,WLAN,3G•核心部分:可能是一些只有2节点的链路(2路由器,一个通信链路)•也可能是:WAN从网络层来看都是IP网•IP网络的顶视图,从IP层次看都是IP网络•都带着IP这样的小红帽从网络层以下看,各不相同的物理网络•IP网络的剖视图,支撑各个网络的物理网络各不相同•IP小红帽子下面站着穿着不同颜色衣服的人IP地址•主机的ip地址:用于编址主机和网络接口(网卡、网络适配器和网络交界处)32位网络层标示•路由器的IP地址:编址:路由器和网络接口–路由器可能有多个网络适配器–每个适配器和不同的物理网络(网线)都有接口–IP地址对这个接口进行编址IPv4地址的点分十进制表示法223.1.1.1223.1.1.2223.1.1.3223.1.1.4223.1.2.9223.1.2.2223.1.2.1223.1.3.2223.1.3.1223.1.3.27223.1.1.1=11011111000000010000000100000001223111一开始的IP地址分类IP地址分类–ClassA:126networks,16millionhosts–ClassB:16382networks,64Khosts–ClassC:2millionnetworks,254host–ClassD:multicast–ClassE:reservedforfuture网络层4-8特殊IP地址–一些约定:子网部分:全为0---本网络主机部分:全为0---本主机主机部分:全为1--广播地址,这个网络的所有主机–特殊IP地址4.4IP协议-〉IPv4编址-〉特殊IP地址有一些特殊的IP地址一般不被用于分配;网络层4-9特殊IP地址–一些约定:子网部分:全为0---本网络主机部分:全为0---本主机主机部分:全为1--广播地址,这个网络的所有主机–特殊IP地址内网(专用)IP地址•专用地址:地址空间的一部份供专用地址使用•永远不会被当做公用地址来分配,不会与公用地址重复•路由器不对目标地址是专用地址的分组进行转发•专用地址范围–ClassA10.0.0.0-10.255.255.255MASK255.0.0.0–ClassB172.16.0.0-172.31.255.255MASK255.255.0.0–ClassC192.168.0.0-192.168.255.255MASK255.255.255.0IP子网(一个网络)•在一个IP子网内部,其IP地址有这样特点–IP地址的前1个(A类),2个(B类)或3个(C类)字节相同;最后几个字节不同–在一个子网内的通信不需要借助路由器,可能需要经过2层设备如交换机–一种物理网络技术将其连接•以太网•802.11WLAN•FDDI223.1.1.1223.1.1.2223.1.1.3223.1.1.4223.1.2.9223.1.2.2223.1.2.1223.1.3.2223.1.3.1223.1.3.27LAN路由器的作用•互连多个IP子网(可能相同或者不同的物理网络)–通过2个或者更多网卡,连接两个或者更多物理网络–每个物理网络都是一个IP子网•在不同IP网络之间进行分组的转发•收分组:从一侧的链路卡中取出分组(IP数据报);•处理分组:–对IP数据报的DA查询路由表;–决定将分组通过合适的链路卡转发出去;–目的是将分组交给下一个网络的某个路由器;逐跳到达目标网络,目标主机;•转发分组:将分组交给链路卡,在链路层将其封装在所对应的帧中;•分组存储、查表、转发过程:–解封装,处理,再封装(可能是不同的帧)–处理:解析IP数据报格式,提出DaIP地址;匹配路由表,找到输出链路卡号–如何匹配?待续–路由表结构,如何通过路由选择协议计算而来的?待续,路由的内容R路由器对分组的逐跳转发•第一跳:源主机将分组发给配置好的默认网关;通常是末端网络的出口路由器•第二跳及中间若干跳:路由器从一侧收来分组,根据转发表,通过合适的输出端口放出去;要知道这个网络的下一跳IP地址–因为通过这个接口(链路卡)放出去,对应的是一个网络,具体哪个节点要指定–通常指定的是连接到这个网络的某个路由器接口的IP–从而完成一跳的接力,交个了下一个路由器•最后一跳:连接到目标主机的路由器收到分组,知道分组到了目标网络;发给具体目标主机;逐跳转发-为什么吓一跳路由器转发分组的依据,转发表•依据:–分组的目标地址DA–转发表•转发表是由实现路由协议的软件计算得到的;如何得到的是路由的原理问题;再说•我们希望的路由器转发表的结构是:目标ip,吓一跳,接口号目标主机IP地址下一跳接口号原始设计的转发表的问题•规模太大,IPv440亿表项;很难传输、计算和查询;•有无办法减少路由表的表项•有关于红色网络内的所有目标IP,该网络以外往这些IP地址发送是不是都可以是一个方向•这个网络路由信息在路由表中应该是一个表项,而不是多个表项;大大压缩;•对于该网之外的IP分组转发而言,只使用网络号;subnet:ABC类(子网掩码后面再说)•主机号只是在最后一跳的时候有用,用于区分目标网络中的具体主机;改进之后的转发表只认网络号•匹配转发表:–到来分组的DA–如果A类,将DA的后3字节变成0,匹配表项–如果B类,将DA的后3字节变成0,匹配表项–如果C类,将DA的后1字节变成0,匹配表项目标网络号(主机号为0)下一跳接口号仔细看ABC类IP地址无类域间路由CIDR•A类地址想都不要想,一瞬间被分完•B类地址太大,一个机构申请并分得一个B类地址,几乎用不掉;大部分浪费了•C类地址有太小,一个结构申请一个C类地址不够用•如何解决这个问题:–地址不再分类,按需分配地址段,不会浪费•如原来B类地址的一部分,B类网络的子网;几个连续的C类地址(前若干位相同,前22bit相等)等,超网;–不再根据第一个字节的前几个bit来判断,哪里是网络号;哪里是主机号–如何判断哪里是一个网络的网络号(用于查路由表);哪里是一个IP的主机号呢–与地址配对使用子网掩码子网掩码•32bits,每一位为0;或为1–1:bit所在位置表示子网部分–0:bit所在位置表示主机部分•原始的A、B、C类网络的子网掩码分别是–A:255.0.0.01111111100000000000000000000000–B:255.255.0.01111111111111111000000000000000–C:255.255.255.011111111111111111111111100000000•另外的一种表示子网掩码的表达方式–/#–例:/24:表示前面24个bit为子网部分真正的转发表和转发算法获得IP数据报的目标地址,对于转发表中的每一个表项如(IPDesaddr)&(mask)==destination,则按照表项对应的接口转发该数据报如果都没有找到,则使用默认表项转发数据报匹配的主要目的是用掩码抽出网络号,判断DA是不是落在表项所在的地址范围内如果分组到了最后一个路由器,到了目标网络所依附的某个路由器,nexthop为-;匹配表项之后,路由器知道该找目标主机ip地址对应的MAC地址,从而将分组直接发送给目标主机了DestinationSubnetNumMaskNexthopInterface202.38.73.0255.255.255.192IPxLan1202.38.64.0255.255.255.192IPyLan2……Default-IPzLan0IP数据报在网络中的逐跳转发•源主机法向最近的路由器(通常是出口路由器,默认网关)•第一个路由器转发,只用其DA中的网络号•第二个路由器转发,只用其DA中的网络号•……•最后一个路由器收到,到达目标网络(当然这个路由器知道其到家了,Router连接哪些目标IP子网它很清楚),这个路由器连接到了目标网络•目标网络的路由器,将分组通过物理网络交付给主机吓一跳肿么用•根据下一跳IP地址;由ARP协议得到下一跳路由器IP的MAC地址;•将分组和mac地址交给链路卡(网络适配器)•链路卡将分组封装在帧中–目标MAC地址:下一跳路由器接口对应的MAC地址–源MAC地址:本网卡的MAC地址–分组:原来的那个分组;IP地址为目标主机的IP地址802.3以太网帧结构前导码帧开始符MAC目标地址MAC源地址802.1Q标签(可选)以太类型或长度负载冗余校验帧间距101010107个octet101010111个octet6octets6octets(4octets)2octets46–1500octets4octets12octetsR分组MAC地址再说子网•严格的子网概念–网络地址高位相同–相互之间不用路由器,直接通信;•稍微宽松一点的IP子网的概念–一个机构申请了一个连续的地址段,前20为相同–将这连续的地址段分为几(8)个小的地址段,前23相同–每一段分给其下的小机构;当然可以再细分–机构之间使用路由器之间相联–这个大机构所在的大网络对于外界来说也可以称之为一个子网;–这个子网内部的不同子子网之间的通信是要通过机构内部的路由器的;但是我们也认为是一个(宽泛的)子网;–这个大子网以外的网络路由器,有关这个大子网的表项就一项–(也为了保密性质)–但是在这个大子网内部的路由器的表项中,有有关具体子子网如何走的更详细的信息子网路由信息的聚集“Sendmeanythingwithaddressesbeginning200.23.16.0/20”200.23.16.0/23200.23.18.0/23Fly-By-Night-ISPIPXOrganization0IP0Organization7IP3InternetOrganization1IP1“Sendmeanythingwithaddressesbeginning199.31.0.0/16”200.23.20.0/23Organization2IP2......200.23.30.0/23ISPs-R-UsIPYDesMKNextInf200.23.16.020IPxwan0199.31.0.016IPywan1DesMKNextInf200.23.16.023IP0Lan0200.23.18.023IP1Lan1200.23.30.023IP7lan7说一点点的路由•IP协议转发分组依据的是转发表(路由表)•路由表如何而来?–路由器可能需要自己测量一些路由信息,我周边有哪些网,到这些网代价是多少–路由器和其他路由器按照路由协议交换路由信息(XX子网,代价,如何走等);包括自己测的,别人给的–按照路由算法算出自己的路由表:•子网,掩码,下一跳,链路接口路由聚集•路由器对收到的路由信息,能够聚集的就聚集到一起;压缩•从而向外边通告的就是这个聚集之后的路由信息;减少路由器中表项的数量•聚集可能是严格的聚集;也可能是大概齐的聚集路由聚集网络层4-27ISPs-R-Us拥有一个对组织1更加精确的路由“Sendmeanythingwithaddressesbeginning200.23.16.0/20”200.23.16.0/23200.23.18.0/23200.23.30.0/23Fly-By-Night-ISPIPxOrganization0Organization7InternetOrganization1ISPs-R-UsIPy“Sendmeanythingwithaddressesbeginning199.31.0.0/16or200.23.18.0/23”200.23.20.0/23Organization2......DesMKNextInf200.23.16.023IP0Lan0200.23.20.023IP2Lan1200.23.30.