概述
内容简介
不能直接对接那咋办?用路由器。
终端和路由器称为跳。终端A的下一跳就是路由器,路由器的下一跳就是终端B。
下面是学习重点:
这一章的学习内容包括网络接口层和网际层。
学习的目标:
网络互连机制
本小节的学习内容:
南京到芝加哥没有直连。所以通过上海来中转一下。
然后把它对应到我们的网络中来:
相对于信件有独立与任何运输系统之外的编址方式,我们可以给终端、路由器一个独立于任何传输网络的地址,我们称之为IP地址。相对于信件我们设计了一种独立于任何传输网络的IP分组。
这就是网际协议-IP的基本思想。
注意啊,给路由器的每个端口都能配置一个不同的IP地址。
终端A查找自己的路由表,发现吓一跳是IP R11路由器。然后就封装成以太网的MAC帧传输到路由器。然后路由器又查找自己的路由表,发现吓一跳是IPB。然后转换成PPP帧转发出去。
总结:
IP------分类编址
学习内容:
现在还没推行IPv6,所以主要学习IPv4就可以了。
那么IPv4怎么表示IP地址呢?
每8位分隔一下,为了方便记忆用点分十进制来表示。
先看看生活中的一些常见号码代表的含义:
所以说一串码并不都是顺序码。在网络中也是这样的。
比如有两个网络,需要标识这是哪一个网络里的终端,还需要标识这是某个网络的哪一台终端。所以我们引入了网络号和主机号。我们把主机号和网络号表示IP地址的方式称为分层编址,意思就是IP地址由网络号和主机号两层组成。那么,多少位表示网络号,多少位表示主机号呢?
分类编址是把IP地址分成不同的类,每一类的IP地址网络号和主机号不一样。
单播:1对1
组播:1对多
广播:1对网段内所有
IP地址为什么要分类呢?主要的原因是网络规模的不同。(也就是说网络中的终端数量)
分类搞明白了,那么IP地址为什么要分层呢?
先搞明白什么是分类、分层。
分类就是分成A类、B类、C类、D类。
分层就是把IP分为网络号和主机号。
那么IP地址为啥要分层?????
1、根据终端IP地址确定终端连接的网络
2、减少路由项
网络互连就是要把不同类型的网络互联在一起,互联设备就要知道某个IP地址是属于哪个网络的。比如下面这个网络:
以太网的网络地址是192.1.1.0,现在有一个终端的IP地址为192.1.1.1,那我们根据分层思路确定终端A的IP地址的网络号是192.1.1
分层原因之一:
分层原因之二:
比如这是R1的路由表:
但是分层之后,可以简化路由表:
网络地址可以减少路由项的原因:
IP地址配置原则
IP地址分类的缺陷
1、IP地址浪费严重
2、不能更有效的减少路由项
3、C类地址使用率低
经过分析,发现R2路由表还可以进行合并:
小结:
IP-无分类编址
分类编址是为了适用于不同规模的网络,但是不太好用。无分类编址就很好的解决了这个问题。
学习内容:
什么是无分类编址?
那要怎样辨别IP地址中作为网络号的二进制位数呢???
还有更简单的表示方法:
下面来看一下怎么样来有效精简路由项的问题
这是之前讨论过的一张网络拓扑图:
路由表长这样:
究竟什么叫CIDR呢????我的理解就是,一坨IP地址的集合。它可以分配给同一网络,也可以分配给不同的网络。
CIDR分配给单个网络的规则:
下面来看一下CIDR地址块的用途:
1、聚合路由项
2、将CIDR地址块划分成多个网络地址
1、我们先来看一下R2的路由表:
前两项的下一跳和输出接口都是一样的,根据前面的讨论,可以合并成CIDR地址块来表示。
这样就有效的精简了路由器的路由项。
2、将CIDR地址块划分成多个网络地址
下面来看一下分配原则:
首先找主机网络最多的网络:子网3有45台,大于2的5次方,小于2的6次方。
下面来看一下分配IP地址的过程:
我们说了刚刚的CIDR高24位是网络前缀,大家都一样,所以不用写出来了。主要就是看低八位。
因为终端数量最多的是子网3,有45台主机,所以应当占用6位二进制位,8-6=2,剩余高两位。 2^2=4,所以把高两位分成4个段:00,01,10,11
所以把00段给了子网3.
step1:
再往下找最多的,发现子网4和子网1分别是27台和20台,用5位二进制位可以表示。
对于剩余的01,10,11段来说,用个01就够了。而且它们用5位二进制位,01开头的有6位,所以把01再分为010和011。分别分配给子网4和子网1.
step2:
接着继续往下找主机最多的,子网2有12台,子网6有11台。用4位二进制位就可以了。
现在剩余的段还有10和11,它们分别剩余6位二进制位。6-4=2. 2^2=4.所以把10段分成4段,分别是1000,1001,1010,1011。然后将1000,1001分配给子网2和子网6即可。
step3:
还剩一个子网5,只需要3位二进制位即可。对于1010来说还剩下4位未分配。 4-3=1 1^2=1 所以把1010分成2个段,10100,10101即可。把10100分配给子网5.
step4:
然后剩余的IP地址可以分配给其他的网络来使用,避免了IP地址的浪费。
最终结果:
如果把刚刚的网络连接成这样一个网络拓扑图的话,那么路由器R1的路由表之中只需要有一个路由项即可。
R2由于每个网络都连接在它不同的端口中,因此它有6个路由项。
如果子网6想提高访问外网的速度,又不想改变原来连接的结构,那么它可以从子网6到R1之间直接拉一根线,那么R1中的路由表就增加了一项直接到子网6的路由项。这时如果有一个目的终端的IP地址是192.1.2.150的话,到了路由器R1的时候,R1路由表中的两项都是符合的,那么它会怎么选择路由项呢?它会选择直接相连的路由项。当然啦,就是因为这个,子网6才直接拉了一根线。不然何必呢?
这就是用最长前缀匹配原则。因为它的前缀是28,上面那个前缀是24,所以选它。
默认路由项:
这种情况下,在Internet中有许多的网络,如果这些网络都在R2当中写上相应的路由项,那么R2的路由项就非常的多。(这种情况是R2右面的3个网络想发送到Internet) 那么这个时候我们可以设置一个默认的路由项。
也就是说,如果目的IP在路由表中找不到,就通过默认路由项进行转发。
小结:
IP-分组格式
网际协议IP主要包括两部分内容,一部分是设计一套独立于任何传输网络的编址方式,就是IP地址,另一部分就是设计一套独立于任何网络的封装格式。就是IP分组。下面我们来学习一下IP分组的格式。
学习内容:
之前学过这个:
它是在上一层的数据之上加一个IP首部,形成一个IP分组。所以说IP分组就是包括两部分。
一个是IP首部,另一个就是上层数据。
IP首部分为两部分,一个是20个字节的固定部分,一个是可变部分。
咱们是为了好理解把这些字段弄成了一个二维的格式。但是事实上这些控制字段没有二维关系,实际运行过程是这样的:
下面我们来看一下这些具体字段的功能和含义。
表示IPv4的是0100. 4位的意思就是4个二进制位。
为什么要有一个首部长度字段呢?因为IP分组首部包含可变部分,所以要有一个首部长度字段表明首部有多长。
这里就是指的二进制位的位数。 每行4个字节。一共5行,所以首部最小值是20字节,。什么叫以4个字节为单位呢???意思就是比如0001 ,代表4个字节。0010,代表8个字节。1111代表15*4=60个字节。所以首部最大是60个字节。
服务类型:
优先级从0到7,优先级是0代表普通报文,优先级是7代表了网络控制报文。优先级高的优先提供服务。
因为数据长度和首部长度都是可变的,所以给一个总长度字段来控制一下。
这3个字段是将IP分组进行分片的时候来用的。
来自同一分组的标识是一样的,有利于IP分组的重新组合。
对于片偏移:
以8个字节为单位的意思就是,如果是0000 0000 0000 1 就代表了8个字节。
每经过一跳,这个值就减1.
这是为了防止IP分组长期在网络中漂流的情况。
当TTL值减为0的时候,就丢弃这个分组。并且给源终端一个信息。
为什么每经过一跳就要计算一次呢?因为每经过一跳,TTL(生存时间)的值就改变了,所以首部也变了,所以得重新计算。
我们来看一下具体的数据分片的方法:
那么我们怎么来确定数据片的长度呢???
前面的,都设置成1480(因为首部是20,加起来要小于等于1500,因为取最大值,所以设置成1480),剩下的最后一个自己看着办。
小结:
路由器屏蔽可选部分是为了安全考虑。
IP分组传输过程
学习内容:
注意,同一个路由器的不同接口的IP地址的网络号是不一样的。
从图中可以看出来,终端A想要给终端B发送数据,有两条路径。
对于传输过程来说,先要判断终端A和终端B在不在同一个网络中(意思就是看终端A和终端B的IP的网络号是否相同)。
根据计算,网络号不同,所以不在同一个网络。因此,终端A首先要把IP分组根据默认网关找到第一跳路由器。把数据封装成一个IP分组,这个分组的目的地址是终端B的地址,源地址是终端A的地址。
然后沿着以太网1传输给R1。
R1根据分组中的目的地址去自己的路由表中查找路由项,根据路由项确定下一跳的路由器。
R3发现这个目的地址跟自己是同一个网络的,所以就直接交付给终端B了。
实现IP分组传输过程的思路:
人工配置静态路由项
路由器传输IP分组主要是根据路由表和IP首部中的目的地址。
所以怎么做出来路由表是重点。
学习内容:
路由项有3种类型:
下面我们来看一下直连路由项的生成过程。
只有直连的才被加入到路由表中。
比如,R2直连的是以太网2和R1、3。没有跟以太网1和以太网3直连,所以以太网1和以太网3就不在R2的路由表中。
没有那咋办?我们可以通过手工来进行配置。
举个例子:
R2到达以太网1有两条路径,经过分析发现经过R1走,这条路径是最短的。
然后我们手工给它配置上。
再来一个,R2到以太网3.如法炮制。
路由协议与动态路由项
学习内容:
之前说了人工配置路由表。这只适用于规模比较小的网络,对于大型网络就不好使了。
大型网络应该根据路由协议动态生成路由项。
举个例子:
这样就传输给了R2。假如R2种没有到达LAN1的路由项,那么就加入到自己的路由表中。
再举个例子:
初始状态是这样的:
然后R1把它自己的路由信息封装起来以后,传输给R2。
然后这就是R1给R2传输的路由信息的处理过程。
R3传给R2也是一样的道理。
IP over 以太网
TCP/IP体系结构的成功之处就是IP分组可以通过网络接口层在不同的传输网络中传输。下面我们学习IP分组怎么通过以太网来传输。
在实际的应用中,我们往往只知道目的终端的IP地址,而不知道目的终端的MAC地址。那怎么样通过目的终端的IP地址来获取目的终端的MAC地址,并将它来封装成MAC帧呢?
这就是IP over以太网的核心内容。
ARP协议首先要广播一个ARP请求帧。这个ARP请求帧的格式:在数据部分,比如终端A要发送一个ARP请求帧,那么它就把终端A的IP地址,终端A的MAC地址,加上目的终端的IP地址(比如终端B)作为数据,然后源MAC地址设置成自己的MAC地址(MACA),然后将目的MAC地址设置成一个广播地址(全1的地址)。然后数据类型设置成ARP。
然后把封装好的MAC帧发送出去。
ARP地址解析过程:
然后跟终端A所互联的网络当中所有的终端都能接收到这个MAC帧。服务器B也一样接收到这个MAC帧。接到之后,它就去查找它的ARP缓存区,如果它的ARP缓存区中没有终端A MAC地址和IP地址的对应信息,那么它在ARP缓存区中增加一项这个对应信息。
终端A接收到这个MAC帧以后,它也会去查自己的ARP缓存,肯定是没有的。为啥?因为要是自己的ARP缓存有,它何必去发送这个请求帧呢?
因此它把IPB MACB这个对应信息加入到自己的ARP缓存中。这个地址就解析出来了(将IP地址解析成MAC地址)
下面我们来看一下IP分组在以太网当中的传输过程
假定现在要从终端A到终端B传送数据。
因为终端A和终端B不在同一个网络中,所以首先终端A要把数据传输给默认网关–路由器R1。因此它就根据默认网关的IP地址,根据ARP协议,解析出R1与以太网1相连的接口的MAC地址为R11。
然后封装成一个MAC帧。帧结构如下:
MAC帧的数据部分是一个IP分组。
把这样一个数据传输给路由器R1以后,路由器根据它的目的IP地址,查找自己的路由表,找到路由项,确定下一跳的地址。
因此R1根据ARP协议又解析出了R2的端口1的MAC地址R21。
因为R1和R2之间又是一个以太网,所以又封装成一个MAC帧。
然后通过以太网3传输给路由器R2。
路由器R2又根据目的IP地址去查找自己的路由表,发现目的IP地址在自己直连的网络当中。
因此又根据ARP协议解析出终端B的MAC地址MACB。然后封装成一个MAC帧后直接传输给终端B。
在传输的过程当中,IP分组始终没有改变。
多端口路由器实现VLAN间通信过程
学习内容:
现在来看一下从终端A到终端C的IP分组传输过程
根据目的IP和源IP发现它们不在同一个网络中。
于是先把数据传输给默认网关。然后根据ARP协议,把路由器端口1的MAC地址解析出来,然后终端A把这个IP分组封装成MAC帧传输给路由器的端口1.
然后路由器根据目的终端IP地址,去查找自己的路由表。发现连在端口3上。然后用ARP协议解析出终端C的MAC地址C,然后再传输。
单臂路由器实现VLAN间通信过程
学习内容:
我们把这种单端口实现VLAN互联的方式称为单臂路由。
然后为每个逻辑接口配置一个IP地址和子网掩码。
然后就能给每台终端配置了。
都配置好以后,路由器的路由表就自动生成了这么3个直连路由项。我们可以看到,在路由表中,它们的数据接口是相应的VLAN。
现在我们来看一下从终端A到终端C的IP分组传输过程:
首先呢,根据默认网关,利用ARP协议解析到路由器的MAC地址MACR。
然后打包成MAC帧,传输给共享端口。
共享端口在原来的MAC帧的基础上增加一个VLAN标记。
把这个MAC帧再传输给路由器。
路由器接收到MAC帧以后,根据VLAN标记,把MAC帧传输给相应的逻辑接口。
然后路由器根据路由表中的目的MAC地址去查找它的路由表,查找到路由项,目的终端是连接在VLAN4当中。因此路由器把IP分组封装成MAC帧,然后加上VLAN标记VLAN4。
然后共享端口接收到带有VLAN4标记的MAC帧以后,去掉VLAN标记,通过VLAN4再传输给终端C。这就是通过单臂路由的方式来传输IP分组的过程。
为什么带来了路由器和交换机之间链路带宽瓶颈的问题?
因为所有的VLAN之间的互联都是通过同一个链路来传输数据的。之前是3条,现在一条,不够用。
三层交换机实现VLAN间通信过程
学习内容:
为啥要用三层交换机?因为多端口路由器和单臂路由器都不好使。
为啥叫三层交换机?因为它有第三层的功能。
三层交换机就是在原来的交换机的基础上增加了一个功能模块。所以三层交换机由一个二层交换结构+路由模块来组成。路由模块和二层交换结构通过背板总线来进行数据传输。
下面我们来看一下三层交换机的配置过程:
对三层交换机来说,它接到MAC帧以后,首先要判断通信的这两个终端是在同一个VLAN还是不同的VLAN,因此对于IP接口要有一个特殊的MAC地址来标识。如果它的目的地址是IP接口所对应的特殊的MAC地址,说明两个终端在不同的VLAN里。因此对于两个接口要有一个特殊的MAC地址。
1、VLAN内通信过程
每一个交换机的每一个VLAN都有一个转发表。
下面我们来看一下终端A到终端B的通信过程
终端A和终端B都属于VLAN2,它都属于VLAN2,因此是在VLAN内部的通信。在转发表中有MACB。
封装成MAC帧,发送到交换机上,从端口5转发出去,端口5添加了VLAN2的VLAN标记以后,发送到3层交换机上。3层交换机根据目的MAC地址根据转发表也找到了MACB的转发项,不是IP接口所对应的特殊的MAC地址,说明是在同一个VLAN内部的两个终端之间的通信,不需要经过路由模块。直接从端口2转发出去。交换机2接收到这个MAC帧以后也根据目的MAC地址MACB查找自己的转发表转发给终端B。
注意,VLAN内通信过程是不需要经过路由模块的。
2、VLAN间通信过程
终端A和终端C的网络地址不一样,因此它们是在不同的VLAN之间,那么终端就要根据它的默认网关地址解析出VLAN所对应的IP接口的MAC地址。终端A根据默认网关地址发送到3层交换机,然后3层交换机把VLAN2对应的MAC地址发送给终端1.(ARP过程)
发送到3层交换机以后,交换机根据目的MAC地址是MACR1断定这个MAC帧是要交给路由模块的,
到了路由模块以后,它把这个MAC帧进行解封装,取出IP分组中的目的MAC地址,然后到路由表当中查找到一项路由项,直连的输出端口为VLAN3。然后根据ARP过程得到终端C的MAC地址MACC,所以它把IP分组进行重新封装成一个MAC帧,这个MAC帧的目的地址应该是终端C的MAC地址。
封装好MAC帧以后把他传输到3层交换机的VLAN3当中,读取VLAN3的转发项,转发给交换机2的端口5.注意,现在的MAC帧是带着VLAN标记的。
到了端口5以后,它把MAC帧的VLAN标记去掉,然后转发到交换机的VLAN3当中去查找它的转发表,发现了有一项转发项是MACC的转发项,输出端口是端口4,因此就把MAC帧传输给终端C。
就完成了转发的过程。
小结:
三层交换机实现VLAN间通信过程演示
三层交换机的配置命令:
互联设备之间的区别
学习内容:
ICMP协议
下面我们来看两个典型的ICMP应用实例
tracert执行过程:
终端A先发送TTL为1的数据,拿到R1的超时响应之后再发送TTL为2的数据,以此类推,直到回送响应的地址是目的终端的IP地址为止。
这样就可以得到终端A和终端B之间所有的路由器的IP地址了。
案例设计
这是第三讲弄过的:
回顾一下设计要求:
首先要对3层交换机定义IP接口。
从图中可以看出,三层交换机s6要分别连接5个IP接口。
三层交换机s7要连接4个IP接口。
三层交换机s8要连接6个IP接口。
比如这样配置:
配置完了之后,VLAN的网络号就出来了:
配置好了以后,RIP生成的每一个路由器的路由表应该是这样的:
例题分析
我们来看一下这3个地址块的地址范围:
前面两个地址快我们能看出来高两位是相同的,第六位的值正好是连续的从全0到全1.因此我们能把前两个地址块聚合成这样:
根据主机地址是将网络号全置为0,冰将主机地址写成二进制形式,得到下图:
红色字部分肯定不是网络号。但是从这儿也不能得出x
就全是网络号的结论。因为没有主机号的前几位是0也是被允许的。
同时,根据最大可用IP地址可知,红色字肯定是网络号,为啥呢?因为最大的IP地址是全1的IP地址-1(即将最后一位置为0).但是这里并不能说明x全部是主机号,因为网络号的后几位是1也是被允许的。
综合两点考虑,我们就得到了网络号的位数,从而拿到了IP地址和子网掩码。
IP地址就是主机地址的主机号加上最大可用IP地址的网络号。
当VD报文到了的时候,同步时每个都+1。
即为3 4 5 5.
而R1更新后成了0 4 4 3
所以第2个值被VD报文覆盖了,另外两个值没被覆盖。
所以原来的值应该是x,4,3 x >= 4 选择C。
由于有6个输出接口,所以应该对应这6个网络:
转换成二进制数之后发现,它们的后8位中的高6位是相同的。
所以我们可以假设高6位全部是网络号,所以网络号应该有30位:
但是网络号不一定有30位那么多,可以继续往前分析,比如29位。
这样的话,IP地址的范围就包含了右边的网络的地址范围了。这样是不行的,因为路由器是连接两个不同网络的。所以第一个网络的网络号只能是29位。
同样,如法炮制:
看上去高6位是相同的,但是这并没有什么用,为啥呢?因为如果后两位是主机号的话,163的主机号是全1了,它是不能作为某一个主机的IP地址的。因此最起码也得往前再挪一位。
但是这也不是唯一解。
最后
以上就是殷勤自行车为你收集整理的0x04-IP和网络互联的全部内容,希望文章能够帮你解决0x04-IP和网络互联所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复