文章目录
4.1 网络层提供的两种服务
OSI体系的支持者极力主张在网络层使用可靠传输的虚电路服务。
而TCP/IP体系的网络层提供的是数据报服务(传送IP数据报)。
虚电路服务和数据报服务的主要区别。
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信靠网络来保证 | 可靠通信靠用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电信号 | 每个分组都有终点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当结点出故障时 | 所有通过故障结点的虚电路均不能工作 | 出故障的结点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点的时间不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
4.2 网际协议IP
这里说的IP是指IP的第4个版本,记为IPv4。
与IP协议配套使用的协议:
- 地址解析协议ARP (Address Resolution Protocol)
- 网际控制报文协议ICMP (Internet Control Message Protocol)
- 网际组管理协议IGMP (Internet Group Management Protocol)
与ARP协议配套使用的还有逆地址解析协议RARP (Reverse Address Resolution Protocol),但现在RARP已经不使用了
下面给出了三种协议与网际协议IP的关系:
ICMP和IGMP要使用IP协议,所以放在上部。
IP协议要使用ARP协议,所以将ARP协议放在下面。
4.2.1 虚拟互连网络
由于参加互连的计算机网络都使用相同的网际协议IP,因此可以把互连后的计算机网络看成一个虚拟互连网络。
将网络互连起来要使用一些中间设备。根据中间设备所在的层次,可以有以下几种 中间设备:
- 物理层使用的中间设备叫转发器 (repeater)
- 数据链路层使用的中间设备叫做网桥或桥接器 (bridge)
- 网络层使用的中间设备叫桥接器 (router)
- 在网络层以上使用的中间设备叫网关 (gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换
互联网就是在覆盖全球的IP网的上层使用TCP协议。
4.2.2 分类的IP地址
1.IP地址及其表示方法
整个互联网是一个单一的、抽象的网络。
什么是IP地址?
IP地址就是给互联网上的每一台主机(或路由器)的每一个接口分配一个32位的在世界范围内唯一的标识符。
IP地址的编址方法有哪些?
IP地址的编址方法经过了三个阶段。
- 分类的IP地址
- 子网的划分
- 构成超网
什么是分类的IP地址?
就是将IP地址分为若干类,包括A,B,C,D,E类。
其中A,B,C类地址都是由两个固定长度字段组成
即: 网络号 (net-id) + 主机号 (host-id) 。
网络号标识主机连接到的网络,一个网络号在整个互联网中必须是唯一的。
主机号标识该主机(或路由器),一个主机号在它前面的网络号所指出的网络范围内必须是唯一的。
因此一个IP地址在整个互联网范围内是唯一的。
IP 地址 ::= {<网络号>,<主机号>}
IP地址分类图示:
各类地址特点:
- A类、B类和 C类地址的网络号字段分别为1个、2个、3个字节长,在网络号字段的最前面有1-3位的类别位,其数值分别规定为0(A),10(B),110(B)。
- A类、B类和 C类地址的主机号字段分别为3个、2个、1个字节长。
- D类地址(前4位是1110)用于多播(一对多通信)。
- E类地址(前4位是1111)保留为以后用。
IP地址的表示方法是使用点分十进制记法。如:128.11.3.31。
常用的三类IP地址(A,B,C类)的特点?
A类地址网络号字段占一个字节,只有7位可以使用(看上方图示,第一位固定为 0)。可以指派的网络是126个(2^7 - 2),为什么要减 2 呢?或者说这个 2 减的是什么东西?
第一,因为IP地址中的全 0 的意思表示 “这个”。因此,网络号为全0(高位固定0 + 后7位都为0)的IP地址表示是本网络。
第二,网络号为127 (即01111111) 保留作为本地软件环回测试本主机进程间的通信之用。若主机发送一个目的地址的为环回地址的(例如 127.0.0.1)的IP数据报,本主机中的协议处理软件就处理数据报中的据,而不会将它发送到任何网络。目的地址为环回地址的IP数据报不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。
主机号
全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址。
而全1的主机号字段表示该网络上的所有主机。
IP地址的重要特点
-
每一个IP地址都由网络号和主机号两部分构成。
解释:从这个意义上说,IP地址是一个分等级的地址结构。分等级的好处:第一,IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号由得到该网络的单位自行分配。这样就方便了IP地址的管理。第二,路由器仅根据目的主机所连接的网络号来转发分组(不用考虑目的主机号),这样可以大幅减少路由表中的项目数,从而减少了路由表所占的存储空间以及查找路由表的时间。 -
实际上IP地址是标志一台主机(或路由器)和一条链路的接口。
当一台主机连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应该有两个不同的IP地址。 -
按照互联网的观点,一个网络是指具有相同网络号 net-id 的主机的集合,因此用转发器(物理层的中间设备)或网桥(数据链路层的中间设备)连接起来的若干个局域网仍为一个网络。
-
在IP地址中,所有分配到网络号的网络都是平等的。
4.2.3 IP地址与硬件地址
从层次的角度上来看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。
发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了,MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个地址都写在MAC帧的首部中。
注意点:
- 在IP层抽象的互联网上只能看到IP数据报
- 路由器只根据目的站的IP地址的网络号进行路由选择
- 在局域网的链路层,只能看见MAC帧
- 互连在一起的网络的硬件地址体系各不相同,但IP地址层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。
4.2.4 地址解析协议ARP
说一下ARP?
说ARP之前我想先说一下ARP使用的背景;因为我们在网络层使用的是IP协议,IP协议会给每一个主机和路由器的接口一个唯一的IP地址,IP地址实际上是将实际网络抽象成一个IP层上的虚拟互联网,我们只使用IP地址是无法在主机和主机,主机和路由器之间传送信息的,要在实际网络的链路上传送信息必须使用该网络硬件地址,ARP协议就是帮助我们将IP地址解析成硬件地址。
知道了一个机器(主机或者路由器)的IP地址,需要找出其相应的硬件地址,就可以使用ARP地址解析协议。
ARP是属于哪一层?
首先,由于IP协议使用了ARP协议,通常把ARP协议划归到网络层。但是,ARP协议的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址,所以也可以把ARP协议划归在数据链路层。
ARP协议怎样将IP地址解析为对应的硬件地址?
地址解析协议ARP的解决办法是通过在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
每一台主机都设有一个ARP高速缓存(ARP cache),里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表。
举例说明ARP的运行过程?
当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往其硬件地址。
当查不到主机B的IP地址项目时,这可能是因为主机B刚入网,也可能是主机A刚刚通电,其高速缓存是空的。在这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址。
- ARP进程在本局域网上广播一个ARP请求分组,ARP请求分组的内容是:“我的IP地址是209.0.0.5,硬件地址是 00-00-C0-15-AD-18。我想知道IP地址为209.0.0.6的主机的硬件地址。”
- 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址。其余所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。注意,ARP请求分组是广播发送的,而ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
- 当主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
这个过程中有几个点需要注意:
- 主机A发送的ARP请求分组时,会把自己的IP地址到硬件地址的映射写入ARP请求分组。当主机B收到主机A的请求分组时,就把主机A的这一地址映射写入主机B自己的ARP高速缓存中。如果不使用ARP高速缓存,那么任何一台主机进行一次通信,都要发送一次ARP请求分组,这就使网络上的通信量大大增加。
- ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间。凡是超过生存时间的项目就从高速缓存中删除掉。比如:主机A和主机B通信,A的ARP高速缓存中保存有B的硬件地址。但B的网络适配器突然坏了,B就更换了一块,因此B的硬件地址更换了。假定A还要和B继续通信。由于B原先的硬件地址已经失效了,因此A无法找到主机B。但过了一段不长的时间,A的ARP高速缓存中已经删除了B原先的硬件地址,于是A重新广播发送ARP请求分组,又找到了B。
- ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题。如果要找的主机和原主机不在同一个局域网上,就需要通过路由器来转发。(比如先通过和源主机连接在同一局域网的路由器转发,然后通过中间路由器转发,然后通过和目的主机连接在同一局域网的路由器转发,最后转发到目的主机)
ARP的四种典型情况:
- 发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一台主机(如H2)。这时H1发送ARP请求分组(在网1上),找到目的主机H2的硬件地址。
- 发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如H3或H4)。这时H1发送ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)
- 发送方是路由器(R1),要把IP数据报转发到与R1连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP分组(在网2上广播),找到目的主机H3的硬件地址。
- 发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R1发送ARP请求分组(在网2上传播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由R2完成。
4.2.5 IP数据报的格式
IP协议提供不可靠无连接的数据报传输服务,IP层提供的服务是通过IP层对数据报的封装与拆封来实现的。IP数据报的格式分为报头区和数据区两大部分,其中报头区是为了正确传输高层数据而加的各种控制信息,数据区包括高层协议需要传输的数据。
IP数据报的格式如下:
注意,上图表示的数据,最高位在左边,记为0位;最低位在右边,记为31位。在网络中传输数据时,先传输07位,其次是815位,然后传输1623位,最后传输2431位。由于TCP/IP协议头部中所有的二进制数在网络中传输时都要求以这种顺序进行,因此把它称为网络字节顺序。在实际编程中,以其他形式存储的二进制数必须在传输数据前使用网络编程API相应的函数把头部转换成网络字节顺序。
IP数据报各字段功能如下:
1)版本号:占用4位二进制数,表示该IP数据报使用的IP协议版本。目前Internet中使用的主要是TCP/IP协议族中版本号为4的IP协议。
2)头长度:占用4位二进制位,此域指出整个报头的长度(包括选项),该长度是以32位二进制数为一个计数单位的,接收端通过此域可以计算出报头在何处结束及从何处开始读数据。普通IP数据报(没有任何选项)该字段的值是5(即20个字节的长度)。
3)服务类型(TOS、type of service):占用8位二进制位,用于规定本数据报的处理方式。服务类型字段的8位分成了5个子域:
(1)—优先权(0-7)数越大,表示该数据报优先权越高。网络中路由器可以使用优先权进行拥塞控制,如当网络发生拥塞时可以根据数据报的优先权来决定数据报的取舍。
(2)—短延迟位D(Delay):该位置1时,数据报请求以短延迟信道传输,0表示正常延时。
(3)—高吞吐量位T(Throughput):该位置1时,数据报请求以高吞吐量信道传输,0表示普通。
(4)—高可靠位R(Reliability):该位置1时,数据报请求以高可靠性信道传输,0表示普通。
(5)—保留位。
目前在Internet中使用的TCP/IP协议大多数情况下网络并未对TOS进行处理,但在实际编程时,有专门的函数来设置该字段的各域。一些重要的网际应用协议中都设置了建议使用的TOS值:
从上表可以看出,对于与用户直接交互的应用,一般使用短延时;对于有大量数据需要进行传输的应用,一般选用高吞吐量;对于数据报要传输控制信息的应用,一般选用高可靠性。在数据报的生存期内不支持TOS的,TOS字段就设置为0x00。
4)总长度:占用16位二进制位,总长度字段是指整个IP数据报的长度(报头区+数据区),以字节为单位。利用头部长度字段和总长度字段就可以计算出IP数据报中数据内容的起始位置和长度。由于该字段长度为16位二进制数,因此理论上IP数据报最长可达65536个字节(事实上受物理网络的限制,要比这个数值小很多)。
5)生存时间(TTL,time to live):占用8位二进制位,它指定了数据报可以在网络中传输的最长时间。实际应用中把生存时间字段设置成了数据报可以经过的最大路由器数。TTL的初始值由源主机设置(通常为32、64、128或256),一旦经过一个处理它的路由器,它的值就减1。当该字段为0时,数据报就丢弃,并发送ICMP报文通知源主机,因此可以防止进入一个循环回路时,数据报无休止地传输下去。
6)上层协议标识:占用8位二进制位,IP协议可以承载各种上层协议,目标端根据协议标识就可以把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了。
常用网际协议编号:
7)校验和:占用16位二进制数,用于协议头数据有效性的校验,可以保证IP报头区在传输时的正确性和完整性。头部检验和字段是根据IP协议头计算出的检验和,它不对头部后面的数据进行计算。
原理:发送端首先将检验和字段置0,然后对头部中每16位二进制数进行反码求和的运算,并将结果存在校验和字段中。 由于接收方在计算过程中包含了发送方放在头部的校验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该是全0。
8)源地址:占用32位二进制数,表示发送端IP地址。
9)目的地址:占用32位二进制数,表述目的端IP地址。
IP数据报分片和重组
最大传输单元:
IP数据报在互联网上传输时,可能要经过多个物理网络才能从源端传输到目的端。不同的网络由于链路层和介质的物理特性不同,因此在进行数据传输时,对数据帧的最大长度都有一个限制,这个限制值即最大传输单元MTU(Maximum Transmission Unit).
同一个网络上的两台主机之间通信时,该网络的MTU值是确定的,不存在分片问题。分片问题一般只存在于具有不同MTU值的互联网中。由于现在互联网主要使用路由器进行网络连接,因此分片工作通常由路由器负责。
当两台主机之间的通信要通过多个具有不同MTU值的网络时,MTU的瓶颈是通信路径上最小的MTU值,它被称为路径MTU。由于路由选择不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此,路径MTU在两个方向上不一定是一致的,下表是几种常用网络的MTU值:
分片:
把一个数据报为了适合网络传输而分成多个数据报的过程称为分片,被分片后的各个IP数据报可能经过不同的路径到达目标主机。
一个IP数据报在传输过程中可能被分片,也可能不被分片。如果被分片,分片后的IP数据报和原来没有分片的IP数据报结构是相同的,即也是由IP头部和IP数据区两个部分组成:
分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移:
(1)—标志:在IP数据报头部有一个叫“标志”的字段,用3位二进制数表示:
不分片DF(Do not Fragment)标志如果被置1,则数据报在传输过程中不能被分片,如网络连通性测试命令ping就可以用-F参数设置为在数据传输时不分片,但这样当数据不能通过MTU较小的网络时,将产生数据不可达的错误。
片未完MF(More Fragment)标志如果被置1,说明该数据报不是分片后的最后一个数据报,最后一个数据报的该位被置0。
(2)—片偏移:IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。
重组:
当分了片的IP数据报到达最终目标主机时,目标主机对各分片进行组装,恢复成源主机发送时的IP数据报,这个过程叫做IP数据报的重组。
在IP数据报头部中,标识用16位二进制数表示,它唯一地标识主机发送的每一份数据报。在一个数据报被分片时,每个分片仅把数据报“标识”字段的值原样复制一份,所以一个数据报的所有分片具有相同的标识。
目标端主机重组数据报的原理是:
(1)—根据“标识”字段可以确定收到的分片属于原来哪个IP数据报;
(2)—根据“标志”字段的“片未完MF”子字段可以确定分片是不是最后一个分片;
(3)—根据“偏移量”字段可以确定分片在原数据报中的位置。
4.2.6 IP层转发分组的流程
分组转发算法如下:
- 从数据报的首部提取目的主机的IP地址D, 得出目的网络地址为N。
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址 D 转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错。
路由表并没有给出到某个网络的完整路径(即先到哪一个路由器,再到哪一个路由器,等等)。路由表支出,到某个网络应该先到哪一个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找路由表,知道再下一步应该到哪一个路由器,这样一步步地查找下去,直到最后到达目的网络。
4.3 划分子网和构造超网
4.3.1 划分子网
子网划分理论基础
为什么进行子网划分
减少网络流量,无论什么样的流量,我们都希望它少些,网络流量亦如此。如果没有可信赖的路由器,网络流量可能导致整个网络停顿,但有了路由器后,大部分流量都将呆在本地网络内,只有前往其他网络的分组将穿越路由器。路由器增加广播域,广播域越多,每个广播轻松划分子网域就越小,而每个网段的网络流量也越少。
优化网络性能,这是减少网络流量的结果。
简化管理,与庞大的网络相比,在一系列相连的小网络中找出并隔离网络问题更容易。
有助于覆盖大型地理区域,WAN链路比LAN链路的速度慢得多,且更昂贵;单个大跨度的大型网络在前面说的各个方面都可能出现问题,而将多个小网络连接起来可提高系统的效率。
##明确需求
我们创建子网的时候,一定是根据一定的要求创建的,这个要求就是我们实际的网络需求。一般我们按如下步骤来明确我们的网络需求:
(1)确定需要的网络ID数:
每个LAN子网一个;
每条广域网连接一个。
(2)确定每个子网所需的主机数:
每个TCPIIP主机一个;
每个路由器接口一个。
(3)根据上述需求,确定如下内容:
一个用于整个网络的子网掩码;
每个物理网段的唯一子网ID;
每个子网的主机范围。
知识点
- ip地址:我们需要知道网络地址分为A,B,C三类,并且知道ip地址是由网段号(net_id)+主机号(host_id)组成的
- 子网掩码:要让子网划分方案管用,网络中的每台机器都必须知道主机地址的哪部分为子网地址,这是通过给每台机器分配子网掩码实现的。子网掩码是一个长32位的值,让IP分组的接收方能够将IP地址的网络ID部分和主机ID部分区分开来。网络管理员创建由1和0组成的32位子网掩码,其中的1表示lP地址的相应部分为网络地址或子网地址。
并非所有网络都需要子网,这意味着网络可使用默认子网掩码。这相当于说IP地址不包含子网地址。下表列出了A类、B类和C类网络的默认子网掩码。
- CIDR:( Classless Inter-Domain
Routing,元类域间路由选择).我们需要了解这种网络表示法。形式如:192.168.10.32/28。前面的数字是我们的网络地址,后面的28表示用28位来表示网络位,用32-28=4位来表示主机位。通过这种记法,我们能明确两个信息: - 网络地址:192.168.10.32
- 子网掩码:255.255.255.240
通过下表我们能明确子网掩码和斜杠表示法之间的关系
其中/8-/15只能用于A类网络,/16-/23可用于A类和B类网络,而/24-/30可用于A类、B类和C类网络。这就是大多数公司都使用A类网络地址的一大原因,因为它们可使用所有的子网掩码,进行网络设计时的灵活性最大。
子网划分常见问题
-
选定的子网掩码将创建多少个子网?
2^x个,其中x是子网掩码借用的主机位数。如:192.168.10.32/28,我们知道C类ip的默认子网掩码为:255.255.255.0,而由上文的CIDR知识,我们了解到这个ip的实际子网掩码是:255.255.255.240。原本最后一个字节应该是0(00000000),现在却是240(11110000)。故其借用了主机位4位来充当网络位。 -
每个子网可包含多少台主机?
2^y-2台,其中y是没被借用的主机位的位数。-2是因为,主机位全为0的部分是这个子网的网段号(Net_id),全为1的部分是这个网段的广播地址。 -
有哪些合法的子网? 算出子网的步长(增量)。一个例子是256-192 =
64,即子网掩码为192时,步长为64。从0开始不断增加剧,直到到达子网掩码值,中间的结果就是子网,即0、64、128和192。 -
每个子网的广播地址是什么?
主机位全为1就是该子网的广播地址。一般我们这样计算:广播地址总是下一个子网前面的数.前面确定了子网为0、64、128和192,例如,子网0的广播地址为63,因为下一个子网为64;子网64的广播地址为127,因为下一个子网为128,以此类推。请记住,最后一个子网的广播地址总是255 -
每个子网可包含哪些主机地址?
合法的主机地址位于两个子网之间,但全为0和全为1的地址除外。例如,如果子网号(网段号)为64,而广播地址为127,则合法的主机地址范围为65-126,即子网地址和广播地址之间的数字。
子网划分实例精析
C类子网划分实例分析
首先我们要知道C类可使用的全部子网掩码:
已知网络地址和子网掩码,求子网划分结果
- 案例一:
255.255.255.128 (/25)
128的二进制表示为10000000,只有1位用于定义子网,余下7位用于定义主机。这里将对C类网络192.168.10.0进行子网划分。
网络地址=192.168.10.0
子网掩码=255.255.255.128
回答五大问题:- 多少个子网? 在128( 10000000 )中,取值为1的位数为1,借用了一位主机位,因此答案为2^1=2。
- 每个子网多少台主机? 有7个主机位取值为o( 10000000),还剩下7位主机位,因此答案是2^7-2= 126台主机。
- 有哪些合法的子网? 256 -128 = 128。也就是子网的增量是128.因此子网为0和128
- 每个子网的广播地址是什么?
在下一个子网之前的数字中,所有主机位的取值都为1,是当前子网的广播地址。对于子网0,下一个子网为128,因此其广播地址为127 - 每个子网包含哪些合法的主机地址?
合法的主机地址为子网地址和广播地址之间的数字。要确定主机地址,最简单的方法是写出子网地址和广播地址,这样合法的主机地址就显而易见了。
下面我分别用图表和图画来表示该子网划分,以希望大家能有一个更深刻的理解。
- 案例二:
255.255.255.192 (/26)
在第二个示例中,我们将使用子网掩码255.255.255.192对网络192.168.10.0进行子网划分。
网络地址=192.168.10.0
子网掩码=255.255.255.192
下面来回答五大问题 - 多少个子网? 在192(11000000)中,取值为1的位数为2,因此答案为2^2=4个子网。
- 每个子网多少台主机?有6个主机位的取值为o(11000000),因此答案是2^6-2=62台主机。
- 有哪些合法的子网? 256 -192 = 64。所以子网的步长[增量]为64,因此子网为0、64、128和192
- 每个子网的广播地址是什么?
在下一个子网之前的数字中,所有主机位的取值都为1,是当前子网的广播地址。对于子网0,下一个子网为64,因此其广播地址为63。以此类推。 - 合法的主机地址有哪些?
合法的主机地址为子网地址和广播地址之间的数字。要确定主机地址,最简单的方法是写出子网地址和广播地址,这样合法的主机地址就显而易见了。
下面我分别使用图表和图画来更形象的展示这五大问题的答案。
使用子网时分组的转发
在划分子网的情况下,路由器转发分组的算法如下:
- 从收到的数据报的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和 D
逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把 D
转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。 - 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错。
4.3.2 构造超网
为什么要构造超网?
我们知道,在地址分类的方法里面,不管哪一类地址,网络号和主机号所占的长度都是固定不变的,只要你确定了这个网络号,那就是固定长度的,这样用起来就很不灵活,而且也直接导致了IP地址资源的浪费,因此,伟大的工程师们又提出了构建超网的算法。
IPv4地址的编址方法经历了三个历史阶段:
路由转发
路由表必须包含以下三项内容:目的网络地址,子网掩码和下一跳地址
最长前缀匹配
网络前缀,应当从匹配结果中选择具有最长网络前缀的路由,叫做最长前缀匹配。
使用二叉线索查找路由表
(为了提高二叉线索的查找速度,使用压缩技术)
网际控制报文协议ICMP
ICMP协议是一个网络层协议。
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。
所以我们就需要一种协议来完成这样的功能–ICMP协议。
ICMP协议的功能
ICMP协议的功能主要有:
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
如下图所示:
我们需要注意几点:
1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议
2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6
ICMP的报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。
如下图:
字段说明:
- 类型:占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文
- 代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型
- 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错(其计算方法与在我们介绍IP报头中的校验和计算方法是一样的)
ICMP大概分为两类报文:
一类是通知出错原因 ;一类是用于诊断查询
类型及含义如下:
类型(十进制) | 内容 |
---|---|
0 | 回送应答 |
3 | 目标不可达 |
4 | 原点抑制 |
5 | 重定向或改变路由 |
8 | 回送请求 |
9 | 路由器公告 |
10 | 路由器请求 |
11 | 超时 |
17 | 地址子网请求 |
18 | 地址子网应答 |
常见的ICMP报文
相应请求
我们用的ping操作中就包括了相应请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。
过程:
一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。
目标不可达,源抑制和超时报文
这三种报文的格式是一样的。
(1)目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。
例如:我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。
常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。
(2)源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
(3)无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。
超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。
时间戳请求
时间戳请求报文(类型值字段13)和时间戳应答报文(类型值字段14)用于测试两台主机之间数据报来回一次的传输时间。
传输时,主机填充原始时间戳,接受方收到请求后填充接受时间戳后以类型值字段14的报文格式返回,发送方计算这个时间差。
(有些系统不响应这种报文)
ping命令
用法如下:
注意, 此处 ping 的是域名,不是url,域名可以通过DNS解析成IP地址
ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。
问题:
telnet是23端口,ssh是22端口,那么ping是什么端口?
答:ping命令是基于ICMP,是在网络层。
而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。
traceroute
traceroute也是基于ICMP协议实现的。
功能:
打印出可执行程序主机,一直到目标主机之前经历多少路由器。
举例如下:
traceroute的工作原理
是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推…当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。
4.5.2 内部网关协议RIP
路由协议的介绍
自治系统(AS):在网络通信中,一个自治系统是指由若干个二层网络及若干台路由器组成的集合,集合中的这些网络及路由器均属于同一个管理机构。但是由于规模大小的不同,一个internet可能只包含一个自治系统,也可能包含多个自治系统。
路由协议的分类:
- IGP——内部网关协议:成员有RIP协议、OSPF协议、IS-IS协议等等其他的协议。
- EGP——外部网关协议:成员现在只有BGP协议。
通常情况下,一个自治系统中的所有路由器需要运行同一种具体的、由该自治系统的管理机构指定的IGP协议(有时也会运行不同的IGP协议)。同时,IGP协议的运行,将使自治系统中的每一台路由器都能发现通往本自治系统内各个目的网络的路由。在一个由多个自治系统组成的internet中,通常还需要发现通往本自治系统内各个目的网络的路由,而且还要能够发现通往其他自治系统中的目的网路的路由。
二。路由协议的基本原理
(1)
- RIP——路由信息协议:是一种基于距离矢量(DV)算法的IGP协议,它的优先级的值为100。
- RIP协议只能以“跳数”来定义路由的开销。“跳数”:指到达目的地所需要经过的路由器的个数。
- RIP协议规定,跳数等于或大于16的路由将被看成是不可达的路由,所以呢,限制了该协议只能应用在规模较小的网络中。
- 运行RIP协议的路由器被称为RIP路由器。若一个自治系统选定了RIP协议作为IGP协议,那么该自治系统内的所有路由器都是RIP路由器,该自治系统也被称为一个RIP网络。
- RIP路由器除了拥有IP路由表外,还要单独创建并维护一个RIP路由表,该路由表是专门来存放该路由器通过运行RIP协议而发现的路由。
路由交换过程:
一台RIP路由器在创建自己的RIP路由表之前,是只包含了该路由器自动发现的直连路由。在一个RIP网络中,每台RIP路由器都会每隔30s向它所有的邻居路由器发布它最新的RIP路由表中国的所有路由信息,同时也会不断的接收它的邻居路由器发来的路由信息,并根据这些接收到的路由信息来更新自己的RIP路由表。该过程是反复循环进行的。
在经过RIP路由的收敛时间后,每台路由器的RIP路由表中的路由信息不再发生变化,每台路由器的RIP路由表都包含了该路由器去往整个RIP网络的各个目的网络的路由信息。
强调:在稳定的状态下,路由交换过程是仍然会进行的。当网络的结构发生变化后,稳定状态被打破时,随着路由交换过程的进行,经过足够长的时间之后,每台路由器的RIP路由表便又会达到新的稳定状态。
RIP路由表
RIP消息的格式
RIP路由器之间是通过交换RIP消息来实现路由信息的交换过程的。
RIP消息的分类:
RIP请求消息:在RIP路由器开始启动之后,立即向它的所有的邻居路由器发送RIP请求消息,以便快速获得关于整个RIP网络的路由信息;运行中的RIP路由器也可以随时的根据自身的需要向它的所有的邻居发出RIP请求消息。
RIP响应消息:RIP路由器在接收到RIP请求消息后,会立即发出RIP响应消息进行回应。RIP路由器总是会每隔30秒的时间向它的所有的邻居路由器周期性的发送RIP相应消息,而该消息中携带了该路由器的RIP路由表中的最新的路由信息。
RIP-1(RIPv1):以下是RIP-1消息的通用格式
(1)命令:取值为1时表示该消息是一个请求消息;取值为2时表示该消息是一个响应消息。
(2)版本:取值为1时表示该消息是一个RIP-1消息;取值为2时表示该消息是一个RIP-2消息。
(3)协议簇:表示所使用的协议簇。相对于TCP/IP协议簇来讲,该值应为2。
(4)网络地址:表示一个路由项的目的网络地址。但是,该协议簇字段后面的14个字节都是用来表示一个路由项的目的网络地址的。相对于TCP/IP协议簇来讲,一个网络地址只需要4个字节来表示,其余都为0。
(5)跳数:表示该路由项的Cost。Cost的最小取值为1,最大取值为16.若Cost>=16,则表示该路由不可达。
(7)一个RIP消息中最多可包含25条路由信息。
RIP请求消息的分类:
(1)用来请求关于某一些指定的路由信息;
(2)用来请求关于整个RIP网络的路由信息的;
在RIP路由刚启动时,向其邻居路由发送的便是第二种RIP请求信息,请求关于整个RIP网络的路由信息的。
总结:RIP协议的特点:
(1)仅和相邻路由器交换信息。【注】如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。RIP协议规定,不相邻的路由器不交换信息。
(2)路由器交换的信息是当前本路由器所知道的全部信息,即自己的路由表。【注】交换的信息是:“我到本自治制系统中所有网路的(最短)距离,以及到每个网络应该经过的下一跳路由器。”
(3)按固定的时间间隔交换路由信息。【注】每个30秒,然后路由器根据收到的路由信息更新路由表。当网路拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。 RIP协议的优点: 对于小型网络,RIP就所占带宽而言开销小,易于配置、管理和实现。
4.5.3 内部网关协议OSPF
度量是带宽、距离。时延、费用等,开放式的,支持多区域的,触发式更新(不定时更新,对时间友好)。使用IP数据报传送
有三个表:
- 邻居表:(10秒一次)相互发hello,确定邻居有哪些,确保邻居是可达的,邻居没有宕机,并相互交换邻居表(这样所有路由都知道彼此的连接情况了)
- 链路状态表:根据邻居表算出来的,在路由知道所有邻居表以后,就确定了一个图了,使用最短路径算法(以当前节点开始,每次找最短路径(以带宽为度量)能到达的点,再以连接成的树的所有节点找下一个最短路径(起点直接到或者过某些点到中的最短),依次使所有点可达以后构成一颗树并记录下来,最后从当前路由出发,沿着树结构到达其他路由都只有一条路径,且最短)(迪杰斯特拉最短路径算法)
协议特点:
- 向本自治系统中所有路由器(其实只发给了邻居,但邻居会转发)发送信息,使用洪泛法
- 发送的信息就是与本路由器相邻的所有路由器的链路状态(路由器知道的部分信息) 只有当链路状态变化时,路由器才会使用泛洪法发送这些信息
- 为了方便管理,OSPF还将自治系统划分为若干个区域。这样洪泛就只发生在区域内,而不是整个自治系统,减少了网络上的通信量。
为了确保链路状态数据库与全网状态保持一致,OSPF每隔一段时间(如30分钟),也要刷新一次数据库中的链路情况。
OSPF的分组类型
- 类型1,问候 (Hello) 分组,发给邻居确定邻居状态
- 类型2,数据库描述 (Database Description)分组,给邻居发自己的链路状态表的摘要信息
- 类型3,链路状态请求 (Link State Request)分组,请求对方发送其链路状态表的摘要信息
- 类型4,链路状态更新 (Link State Update)分组,用洪泛法对全网更新链路状态。
- 类型5,链路状态确认 (Link State Acknowledgment)分组。 对更新进行确认
4.5.4 内部网关协议BGP
一般指的是最新版BGP-4
作用:力求寻找一条从当前网络到目的网络的比较好的路径(并不是寻找最佳路径,不兜圈子即可),而每个自治系统都至少要选择一个路由作为其“BGP发言人”。
此时可以把每个自治系统当做一个节点,边界路由的连接作为边构成一个新的图。
- BGP 所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。
- 当 BGP 发言人互相交换了网络可达性的信息后(使用TCP连接,相当于交换路由表),各 BGP
发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。 - BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP
路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销都有好处。
4.5.5 路由器的构成
作用:连接不同的网络,选择最优的传输路线,提高通信速度等
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的转发分组正是网络层的主要工作。
路由器结构可划分为两大部分:
- 路由选择部分
- 根据所选定的路由选择协议构造出路由表(并维护更新)
- 分组转发部分
- 交换结构 (switching fabric):根据转发表 (forwarding table)
对分组进行处理。(转发是指根据选择表选择合适的输出端口,而路由选择是根据路由表选择合适的路由,转发表是从路由表得出的。) - 输入端口
- 物理层、数据链路层和网络层的处理模块。
- 队列:数据链路层剥去帧首部和尾部后,分组在网络层的队列中排队等待处理。
- 查找和转发功能。
- 交换结构 (switching fabric):根据转发表 (forwarding table)
- 输出端口
- 物理层、数据链路层和网络层的处理模块。
- 缓冲区(队列),来不及发送的分组就必须暂时存放在这个队列中。
- 数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
分组丢弃:路由器会丢弃错误数据,而在向路由中发送数据过多,导致缓冲区溢出也会导致丢包。
4.5.6 IP多播
概念:在因特网上进行多播就叫做IP多播(广播的形式),多播可以明显的减少网络上资源的消耗。
(例子:群组聊天,大家都能收到消息)(多播并不是说分别发送多次消息给多个人,而是实现发一次消息所有人都收到)
多播的IP数据报
因为是多播,所以发送的IP数据报中IP目的地址使用的是D类地址,D类地址对应一个群组,从而实现了可以多播,且依然使用IP数据报。
这时,IP数据报首部中类型字段值为2,表示接下来使用的是IGMP协议。
多播的路由器
多播路由器涵盖了普通路由器的特点,且在物理层进行了拓展,使用硬件复制数据包并发送
IGMP协议
作用:多播组中路由表的维护,标识一个群中,各个主机所在网段,将群号与网段号作为映射存入路由表,并维护更新路由表,多播路由器转发多播消息时会根据路由表决定复制多少份消息,并分别转发到那些网段
(注:不标注群组中各台主机的位置,而是标识群组成员都在那些网段上)
维护主机的加入和删除时
- 加入时,主机向多播地址发送IGMP报文声明加入,多播路由器看其网段在路由表中是否存在,不存在就添加网段,存在不变化,并转发主机的组成员关系到其他路由器(让其他多播路由更新)
- 删除时,看对应网段内是否还有其他成员,有就不删除网段,没有就删除这个网段
- 组存活判断:多播路由器周期性弹出本地局域网上的主机,只要组群中有一个主机回应,就表示组是活跃的,若几次探测都没有回应,就认为组消失了,不再把组的成员转发给其他路由器