在学习协议时要记得协议的英语缩写,在各种场合用的基本都是英语缩写,不会用中文全称!
要是要网络层的任务,需要解决以下问题:
在不同网络体系结构中提供的服务可能是不同的,在因特网所使用的TCP/IP协议的网络层中使用的是无连接、不可靠的数据报服务。
ATM、帧中继和X.25的网络层使用的都是面向连接的、可靠的虚电路服务。
在图中,各个路由器接口都有不同的IP地址来进行识别,根据其IP地址(网络编号)来识别其路由器接口,就能解决寻址问题。
在图中,从最左端到最右端右多个路径可以选择,如何解决路径选择也就成了网络层的第三个问题。
但是在路由器中,路由器收到数据后是一句什么来决定将数据包从自己的哪个接口发送出去的,这里就引出了路由器中的路由表:
路由表中记录了目的网络以及各级跳的路由器端口,以此来选择走哪个路由器到达端口。
路由记录表的记录有两种情况生成:
- 由用户或网络管理员进行人工配置。这种方法只适用于规模较小且网络拓扑不改变的小型互联网。
- 实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网
解决以上问题就能实现网络层的功能。
网络层(网际层)除了 IP协议外,还有之前介绍过的地址解析协议ARP(详细请看第三章数据链路层),还有网际控制报文协议ICMP,网际组管理协议IGMP。
例如:
通信双方在通信过程中先建立一条虚电路连接,数据沿着这条虚电路有序传输。
目的主机的地址仅在建立连接阶段使用,之后每个分组的首部只需携带一条****虚电路编号(构成虚电路的每一段链路都一个虚电路编号)。
这种通信方式再使用可靠传输的网络协议便可使分组最终正确到达接收方。
通信结束后释放虚拟连接。
其路径的选择类似分组交换。
因此每个分组的首部必须携带目的主机的完整地址。
这种通信方法所传送的分组可能会产生分组差错(误码、丢失、重复、失序|具体请看第三章文章)。
由于网络本身不提供端到端的可靠传输服务,因此网络中的路由器可以做的比较简单,造价低廉(与电信网种的交换机相比)。
因特网采用了这种设计思想。
将复杂的网络处理功能至于因特网的边缘(用户主机和其内部的运输层)。
相对简单的分组交付功能尽最大努力的至于因特网核心。
好处:
使得网络造价大大降低。
运行方式灵活,能够适应多种应用。
我国用户可向亚太网信息钟信申请IP地址,但是不对个任开放,需要缴费。
2011年2月3日,互联网号码分配局宣布,IP地址已经分配完毕。
我过在2014至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开展商用部署IPv6。
IPv4地址由于采用了32比特的记录,不方便用户阅读,记录,以及输入,因此IPv4地址采用了点分十进制标识方法以方便用户使用。
例如:
对于8位无符号二进制数转十进制整数,用每个位数权值相加的方法。
十进制数转为8位二进制数的常用方法是:
除2取余法:
例如:
每次对数字进行除2取余,当被除数变为0时,停止。并且将所有的余数由下往上取出,便是该十进制数转换后的二进制数。
IPv4地址按照分配分为5类:
A类地址网络号的两个不可指派(分配)的值:
1.最小网络号0,此时网络号位数全部取0,保留不指派。
2. 最大网络号127,此时网络号位数全部取1,作为本地环回测试地址,不指派。
根据其主机号的位数可以得出:
最小的本地环回地址为127.0.0.1(主机号为全0是网络号,因此最小为1)
最大的本地环回地址为127.255.255.254主机号为全1是广播地址,因此最小为1)
A类地址网络号的可指派(分配)的最小值和最大值:
2多少次幂取决于可以改变的二进制数字有多少。在这里网络共有8个二进制数,减去首位固定为0,因此为8 - 1 = 7
B类地址:
B类地址网络号的不可指派(分配)的值与A类相同。
B类地址网络号的可指派(分配)的最小值和最大值:
C类地址网络号的不可指派(分配)的值与A类相同。
C类地址网络号的可指派(分配)的最小值和最大值:
D类地址为多播号,不区分网络地址和主机地址
D类地址前4位为1110
E类地址:
E类地址为保留地址,保留为今后使用
一些特殊的IPv4地址:
一般不适用的IP地址:
小练习题:
关于分配地址,寻找网络个数的练习题:
题目中要求要节约IP地址,也就是网络号的比特数要尽量大,主机比特尽量小(这样子可分配的网络树增大,就可以实现解决IP地址)因此:
对于黄色区域主机个数为65534台,B类地址和C类主机地址个数都不能满足要求,只有A类地址的主机号足够,因此分配A类网络号。
蓝色区域需要254台,此时C类主机地址不足够,B类主机地址足够使用,因此分配B类地址给蓝色块。
同理,可得:
IP 地址的一些重要特点
第一,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
- 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址。
首先先明确为何要引出划分子网的概念:
在 ARPANET 的早期,IP 地址的设计确实不够合理:
例如:
随着单位的发展,该单位需要将原来的网络划分成三个独立的网络:
此时只能选择为子网申请新的网络号,但是申请新的网络号会带来以下弊端:
这是就提出了一种解决办法,从多余的主机号中借用一部分作为子网号。而不用申请新的网络地址。
这是就提出了一个概念,子网掩码。
子网掩码的存在是为了确定有几位数被主机号被网络号借用,使其成为了网络号。
首先明确,子网掩码有两部分组成,一部分是1,一部分是0,可以理解为1部分就是经过掩码后的网络号,0部分就是经过掩码后的主机部分。
1的部分由IPv4地址的原网络号+借用的主机号(图中的子网号)。
0的部分就是IPv4的主机号减去被借用位数。
那么如何计算经过子网掩码后的网络地址呢?
此时也要明白一个数字逻辑基础知识:1与任何数字相与都为任何数,0与任何数相与都为0。
因此对子网掩码与IPv4地址进行逻辑与运算,所有的主机号就会被归零,原有的网络号和借用主机号作为网络号的地址就会被保留。
也就是运算后会消去经过掩码的主机号,只保留掩码后的网络号。
因此逻辑与运算后得出的就是掩码后的网络号。
PS:已经尽量讲明白了,若有不清楚请评论讨论。
在题目中,由于其网络地址由2开头(C类地址前三位为110,才可能出现2开头)。可以确定其为C类网络地址。
回顾C类网络地址的特点:网络位为24位,主机号为8位,既未进从主机号借位的子网掩码的二进制应为:11111111 11111111 11111111 00000000,采用点分十进制表示为:255.255.255.0。
很明显,其题目中子网掩码数量不止255.255.255.0,其位255.255.255.128。说明主机号中有部分被借用做网络号,也就是其主机号8位已不再是全为0,有位数被借用做网络号,因此在子网掩码中显示为1。
很清晰可以看出,其后八位二进制数用点分十位表示法为128。
将其转为二进制:128 -> 10000000
说明其有1位被借用做网络号!
此时与前面的合起来可得其总的子网掩码为:
11111111 11111111 11111111 10000000
很明显,原C类地址子网掩码后八位主机号为0,现在有一位为1,这位就是借给IPv4作为网络号的位数。
对于1个二进制数,可以划分除2^1个子网数量,也就是2个子网。
因为主机号中有1位被分为网络号,只剩下7位可分配数字。
因此每个子网可分配地址数量为:2^7 - 2 = 126 (0为网络号,128为广播地址)
PS:已经尽量讲明白了,若有不清楚请评论讨论。
总结:
对于划分子网掩码的计算网络地址:
确定IPv4地址是什么类型,有几个网络号(原网络号)。
看子网掩码中有多少个数是原有网络号。(可以直接转为二进制数直接消去原网络号)
确定有几个数属于从主机中借用的。
对于要求让我们划分子网,设计子网掩码就是这个的逆过程。
不过只要记住一个结论:
子网掩码与IPv4地址进行逻辑与运算就是网络地址。
划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。
对于未分配子网的可分配地址数:
分配子网后的情况:
例题:
各位自己进行理解,欢迎留言讨论。
划分子网在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网因为其地址(主机地址)空间太小没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
因此因特网工程任务组IETF又提出了无分址编址方式来解决地址紧张的问题。
1993年,IETF发布了无分类域间路由选择(CIDR),其主要的特点:
CIDR消除了传统的A类、B类和C类地址,以及划分子网的概念。
CIDR可以更加有效分配IPv4的地址空间(使地址空间分配不再被主机号所限制,做到自由的根据主机规模分配),并且可以在新的IPv6使用之前允许因特网的规模继续增长。
CIDR使用各种长度的网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
CIDR使用斜线记法,或称之为CIDR记法。即在IPv4地址前面加上斜线”/“,在斜线后面写上网络前缀所占比特数量(就是分类地址中的网络号和子网号)。
例如:
根据IPv4的地址可以看出,其CIDR的网络前缀数量为20,因此将其第一、第二个子节保持不变,将其第三个子节以二进制表示出来:
128.14.35.7.20 —>128.14.0010|0011.00000111
其分割线部分前就是其最长前缀码,这部分就是该地址的网络部分。
固定其网络部分,改变其主机号部分,可以很简单得出其最小地址为:128.14.32.0
最大地址为:128.14.47.255
因为其剩余的主机号位数为12位,则其可以分配的地址数量为2^12个
其聚合的C类网的数量为2^12 / 8
其地址掩码为:11111111.11111111.11110000.00000000(跟子网掩码一样)
路由聚合(构建超网):
对于图中R1连接了5个网络,若R1要将这五个网络信息发送给R2,就需要发送5个路由信息给R2(也就是需要5个网络编号)
很显然,这五个网络网络号中由很多部分是共同前缀的,那么这部分能不能采用CIDR路由聚合成一个网络再发送给R2来降低路由表大小呢,显然是可以的。
因此其聚合地址块为:
若这是对于因特网地址管理机构的一次网络号申请,这样子就将5个小的网络号合成了1个大的网络号,减少了IPv4地址的分配,为IPv4地址的继续使用做出了贡献,这也是无分类编制IPv4的意义。
在路由过程中,我们可以得出两个结论:
IPv4的应用规划有两种,也就是我们上面讲诉的两种:定长的子网掩码划分FLSM、变长的子网掩码划分VLSM。
定长的子网掩码划分:
例如:
首先可以根据图中的子网情况,计算出所需各子网的网络数量需求。
要注意的是,除了主机以外,路由器、网络地址和广播地址都需要一个地址。
根据网络的情况知道,有5个网络,根据定长分配子网的规则,只能划分2^3 = 8个子网才能最合适的满足需求。因此有:
对于各个划分子网的细节:
由此例可以看出,划分的子网个数只能为2^n个,此例子中为8个,但是实际上只需要5个。
子网分的主机地址个数也为固定的32个,对于网络5只需要4个地址,造成了浪费。
- 为了减少这种地址浪费的情况,也就引出了变长地址子网掩码分配的情况(也就是上面说的不分类编码)
变长的子网掩码:
同上面的例子:
在地址块的分配原则中:
每个子块的起点位置不能随意选取,只能选取块整数倍的地址作为起点,也就是比特位置上2^n的位置。
最好是先给大的子块分配
若有不懂,欢迎留言讨论。
首先要考虑第一个问题:
这时就要用到我们上面子网掩码学习过程中用到的知识:
子网掩码和IP地址做逻辑与运算便为网络号
对比网络号,相同为直接交付,不同为间接交付。
- 如果目的网络地址和源网络地址相同,就是在同一个网络中,属于直接交付
- 如果目的网络地址和源网络地址不相,就不在同一个网络中,属于间接交付,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发
此时若判断出为不同网络,就会出现第二个问题:
为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为默认网关
例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关
发送到其他网络的数据报都需要经过默认网关进行转发
当数据包到达默认网关后,就出现了第三个问题:
路由器收到IP数据报后主要几个步骤:
- 检查IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有出错,则进行转发
- 根据IP数据报的目的地址在路由表中查找匹配的条目
- 若找到匹配的条目,则转发给路由器表条目中指示的下一个路由器
- 若找不到,则丢弃该数据报并通告源主机
在此例中:
假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值。
路由器对该IP数据报进行查表转发:
- 逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址。
- 与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
- 这种人工配置方式简单、开销小,但是不能及时适应网络状态(流量、拓扑等)的变化
- 一般只在小规模网络中使用
- 配置错误
- 聚合了不存在的网络
- 网络故障
首先在路由器表中会自动生成直连的接口地址。
再根据实际的需求,人工使用路由命令设置一些静态的路由器表项,如R1的静态表项192.168.2.0/24项
默认路由:
例如:
对于除了确定的条目,其他的路由条目都会被默认路由处理。
除此之外,还有个特定路由条目的概念:
特定路由条目:
路由器配置可能产生的路由环路问题:
在R2的路由表中的192.168.1.0.24表项,其下一条是10.0.0.1接口,通过10.0.0.1接口传输到R1,R1根据其路由表找到对应地址在接口0,网络号成功对应,数据报传输成功。
当R2的路由表中的192.168.1.0.24表项被错误的设置成了10.0.1.2接口时,目的主机应该在10.0.0.1接口转发,但是此时根据路由表会将该数据包错误的发给10.0.1.2接口,传输到R3路由器,此时根据R3路由器的路由表,又将其传回了R2路由器,此时R2路由器根据其路由表又将其传回了R3路由器,此时出现了网络环路的情况。也就是出现了反复横跳。
无疑在这种情况下会造成网络资源的浪费。
因此,为了防止IP数据报在环路中永久兜圈,在IP数据报首部设置了生存时间TTL字段其初始化为某值,每次进入路由器-1,若TTL为零,则不转发,丢弃。
对于出现路由器的环路不只是配置了错误的接口,还有以下几种情况:
聚合了不存在的网络导致数据环路:
在R2的路由表中,对R1连接的两个主机的网络号进行了聚合,根据由于其网络号的情况,可以看出需要借用2个主机号进行聚合,也就是会产生4个子网。
但是在实际只有两个子网,此时若路由器接收到人工聚合的地址中存在,但是实际上不存在的网络地址会怎么样呢?
此时若R2要转发地址为192.168.3.0/24的地址,这在本网络中是不存在的,但是根据聚合路由表,要将该IP数据报传输的10.0.0.1接口,传输到R1,此时R1查询该IP网络地址,发现找不到该具体网络地址,此时就会通过默认路由地址进行转发。此时很明显,又会被转发回到R2路由器,此时就出现了路由环路。
解决方法:
对于这种数据环路的情况,可以通过设置黑洞路由,将路由器聚合存在,但是实际不存在的路由设置一个NULL0接口(路由器内部的虚拟接口,就像是一个黑洞,IP数据报转发进去后有进无出)
网络故障导致路由环路:
根据路由器的工作机制,当检测到某路由器故障时,会将该路由表删除。
若此时R2路由器要转发到该故障的网络地址,就会出现像上面没有该网络地址的转发情况,出现路由环路。
解决方法:
对于这种情况,可以像上面解决网络聚合出现环路的步骤一样,对该网络故障接口设置黑洞接口,当检测到路网络障后设置,当检测到网络正常后将该黑洞接口设置为失效状态。
路由器的选择协议分为两种:
因特网(最大的网络)所选择的路由选择协议有三个特点:
自治系统之间称为域间路由选择,自制系统内称为域内路由选择。
自治系统之间称为内部网关协议,自制系统内称为内部网关协议。
- 此处的网关就是路由器,只不过是路由器早期的名称。
路由协议就是一个名称,并不是一个具体的协议。
网关协议之间并没有关联
常见的路由协议:
路由器是具有多个输入端口和输出端口的专用计算机,其任务是转发分组。
路由器主要由两部分组成:
- 路由选择部分:
核心构件是路由选择处理机,根据路由器选择协议,周期性的和其他路由器进行路由信息交互,构建路由表。- 分组转发部分:
分组转发部分主要有三部分组成:交换结构、一组输入端口一组输出端口。
路由器的基本工作过程:
物理层将其信号转变成比特流,送交数据链路层处理。
数据链路层从比特流中识别出帧,去掉帧头和帧尾后送交网络层处理。
网络层中接收后判断其分组类型,若是普通的数据分组,会将其发送到分组处理机构中。
分组机构会根据其分组首部地址中的目的地址进行查表转发,若找不到目的地址,则进行丢失分组,否则转发到下一对应端口。
输出端口网络层会更新数据分组首部中某些字段的值,例如将数据分组生存时间-1。然后送交数据链路层处理 。
数据链路层封装成帧,交给物理层处理。
物理层将帧转为对应的比特流,在转换成电信号进行发送。
则会将该路由报文转发给路由处理机,路由处理机根据分组报文更新自己的路由表。
初次之外还有两个要点:
输入缓冲区用于存储新进入路由器但还来不及处理的分组。
输出缓冲区用来存储已经处理完毕但是还来不及发送的分组
在这种情况下,两条路由长度相等,因此进行等价均衡负载。
RIP协议的三个要点:
RIP的基本工作过程:
在C要把路由表信息转发给D时。
路由器C的表到达各目的网络的下一条都记为问号,可以理解为路由器D并不需要关心路由器C的这些内容。
假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中的相关路由信息封装到RIP更新报文中发送给路由器D
在D接收到C发送来的数据报后,首先会对C发送过来的路由表进行改造,改造主要是:
将路由表的所有下一跳改为C(因为是C发来的路由表,要走该路由表路径,下一条必须为C)
将所有距离+1,同上理由,要走该条路径,必须再走到C,而C是相邻路由器,距离要+1。
D接收到数据报后,第二步就是要更新路由表,更新规则如下:
- 当目的网络、下一跳相同时,新的数据替代旧的数据。(说明是下一条路径的最新数据,有利于数据正确转发,更新)
- 当出现了新的目的网络,添加一条新的数据。(能够到达新的目的网络有,有利于转发,更新)
- 当目的网络相同,下一跳不同,并且距离小于路由表已有数据时,更新数据。(能够到达的目的网络有了新的、更短的距离路径,有利于提高转发效率,更新)
- 当目的网络相同,下一跳不同,并且距离等于路由表已有数据时,添加数据。(有利于进行等价均衡负载,提升效率,添加)
- 当目的网络相同,下一跳不同,并且距离大于路由表已有数据时,不进行更新。(不利于提高转发效率,不进行处理)
RIP协议存在“坏消息传得慢”的问题:
由于N1出现故障,RI路由器将N1的距离设置为16(16距离就是认为的不可到达距离)。
此时R2根据以前RIP协议获得的路由器情况,发送更新请求给R1,而此时R1的更新情况,也就是N1的更新情况还没发给R2。
此时R1的路由器表先收到R1的路由器表后会根据上面说的更新规则进行更新,将N1到R2的距离更新为3。此时数据就是被谣言误导的。
此后,两路由器之间会一直以被误导的数据进行循环更新路由数据,指导双方距离达到16(认为不可达)时,才会选择放弃传输。
在此过程中,就会出现路由环路,导致路由器间被占用长达数分钟的时间
RIP协议小结:
基本原理
**“开放”**表明OSPF协议不是受某一家厂商控制,而是公开发表的。
最短路径优先,是因为使用了迪杰斯特拉的最短路径算法SPF(最小生成树)
代价用来表示费用、距离、时延、带宽等等。这些都由网络管理人员来决定。
- 值得注意的是,代价计算都由网络管理员来决定,没有统一。
关于Hello分组:
直连网络的链路状态信息
邻居路由器的链路状态信息
每个使用OSPF的路由器都有一个链路状态数据库LSDB,用于存储LSA
通过各路由器洪范发送封装有自己LSA的LSU分组,各路由器的LSDB最终将达成一致
实际构建过程如下:
OSPF的基本工作过程:
主要可以看成三个部分:
- 通过发送问候分组建立和维护邻居关系
- 链路状态数据库同步:
先发送数据库描述分组,将自己链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由。
路由器发送自己缺失某些链路状态摘要信息中的详细信息,就会向相邻路由发送链路状态请求分组。
相邻路由器收到链路更新请求后会返回路由状态更新分组。
发送请求的网络收到更新分组后会返回确认分组,一次更新数据过程结束。- 同步状态后的链路状态数据库同步:
在30分钟后或者链路状态发生变化后,会进行新的更新状态过程,如第2点所说。
区域之间分为主干区域和区域。
在图中可以看到有4种路由器:
- 区域内路由器(IR):只用于区域内通信。
- 区域边界路由器(ABR):用户区域间通信。
- 自治系统边界路由器(ASBR):用于和其他自治系统通信。
- 主干路由器(BBR):位于主干区域的路由器
边界网关协议BGP基本原理:
接下来我们就要学习用于外部网关的网关信息协议,外部网关信息协议(EGP):
外部网关协议:
网布网关协议主要用于不同自治系统之间采用代价计算原则不同导致的自制系统之间寻求最佳路由错误。
但是这些考虑是由网络管理员设置的,并不是网络协议本身。
BGP刚刚运行时,BGP的临站会交换整个BGP路由表,以后只需要在路由情况发生变化时更新有变化的部分。
这样做对节省网络带宽和减少路由器的处理开销都有好处。
为了表示方便,以下IPv4数据报检查简称为IP数据报。
在IP协议中分为两部分:
固定部分:
由20子节组成,是每个IP数据报都必须包含的部分。
可变部分:
可选字段,由40个子节组成,用来增加IP数据报的功能。
IP数据报的首部的每一行都由32个比特(4个子节)组成。
在图中的每个小个子称为字段或者域。每个字段或者某个字段的组合用来表示IP协议的相关功能。
相关字段功能解释:
因为IP地址首部的可选字段的长度为1个子节到40个子节不等。为了确保首部长度整体是4字节的倍数,因此需要用首部填充字段进行填充。
在该IP数据报中,由首部和数据载荷部分组成,这两部分是怎么跟IP数据报首部格式联系起来的呢?
例如:
IP数据报首部长度字段值为:0101(十进制为5)。总长度字段为000000111111100(十进制为1020).
值得注意的是:
首部字段以4子节为单位,在计算时要乘以4
总长度包括首部长度,因此在计算数据载荷长度时要减去首部长度,即:
数据报分片:
对于该数据报,长度为数据载荷子节+固定首部子节 = 3800子节。
若在以太网进行传输时,明显是超过以太网MTU的,此时便无法正常封装成帧,因此需要对其及进行分片。
在分片时,首先给数据载荷个字节进行编号。
编号完毕后根据合适的大小将其进行分组
分组完毕后再给其加上一个新的首部。
然后就要开始填写分组各首部的数据,也就是图中表格的填写。
首先回忆一下各个标识的含义:
MF:标识后面还有没有分片数据报,即自己是不是最后一个分片。
DF:标识可否进行分片。
片偏移:记录片偏移的地址量(就是分片首部地址编号跟原首部地址的编号偏移了多少个地址)
我们对分片数据报1的首部各个字段进行解释:
总长度字段:由于分片长度为数据载荷长度+分片首部 = 1400 + 20 = 1420
标识字段:用于标识本个分片,设置为12345
MF:由于这是分片1,后面还有分片2,因此该标识位为1
DF:该分片可以继续分片,因而其值为0
片偏移量:
标识分片首部相对于原数据报首部的偏移地址,计算方式为:分片首部地址/片偏移量单位。
因此此处的数据为0/8 = 0,标识标识与原数据报的首部地址偏移地址为0,也就是没有偏移。
表格中其他数据大同小异,不再进行赘述。
此时若需要,还可以对某分片进行再度分片,例如,对分片2进行再度分片:
例如:
在此图中,由于人工设置静态路由条目出现错误,很明显会出现路由环路问题,导致IP数据报在路由环路之间循环传输,永久兜圈。
此时TTL就可以在一定时间走过后没有到达目的路由器就会将其进行丢弃,防止IP数据报出现永久兜圈。
若协议字段为1,则其为ICMP封装的协议数据单元。
值得注意的是,由于其计算过程耗时,在IPv6中已不再计算首部校验和。
源IP地址、目的IP地址字段:
ICMP中差错报文共有5种,分别是:
当H1要发送数据给H2时,若R1没有网络N3的路有记录、默认路由以及H2的特定主机路由时,就不知道怎么发送该报文,只能将其丢弃,并且发送ICMP差错报文(终点不可达)。
原来H1 -> H2的路径如图红线所示,当R1检测到到H2有更合适的路径时,就会发送改变路由报文。
之后便会开始走新的路径。
回送回答和回答报文:
时间戳请求和回答:
分组网间探测PING:
用来测试主机或路由器之间的连通性
应用层直接使用网际层的ICMP(没有经过运输层的TCP或UDP)
使用ICMP回送请求和回答报文
跟踪路由traceroute实现原理:
发送第一个TTL = 1 ,到达第一个主机后回送时间超过报文,此时源主机就能知道第一个路由器
发送第二个TTL = 2 ,到达第二个主机后回送时间超过报文,此时源主机就能知道第二个路由器
首先先思考一个问题:
如何让两个专用网络进行通信?
第二种方式就是将两个网络通过英特网进行通信,但是他们之间的IP地址又如何分配?
首先明确一个概念:
这些地址就可以在本地自由分配,不会在因特网中造成冲突。私有地址只能用作本地地址,不能用作全球地址。
本地地址与全球地址
本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请。
在因特网中得到所有路由器,对目的地址的IP数据报一律不进行转发。
为了使两个部门的网络能够跟因特网联通,因此还需要两个路由器具有合法的全球IP地址,这样子才能实现通过因特网通信。
首先对本地数据报进行加密,加密后发送到因特网,经过因特网传输到目的专用网,解密数据后发送到目的主机。
由于两个专用网内的主机间发送的数据报实际上是通过了公用的因特网,但在逻辑上就好像是在本机构的专用网上传送一样
因此这种通信方式又称为IP隧道技术
对于很多同学在家访问校园内网时,实际上就是远程VPN技术。
NAT概述:
使用私有地址的主机要给因特网上使用全球IP地址的另一台主机发送IP数据报:
通过NAT机制,将本地地址转换成NAT路由器的全球地址,并且将数据报首部的目的地址也改成NAT路由器的全球地址,进行发送。
并且该次转换存在NAT转换表中。
NAT路由器接收到数据报告,根据首部的目的在地址,查找NAT转换表后进行转换,转换成目的主机本地地址后进行传输。
此时会出现一个问题:
这部分内容涉及到运输层,暂时不多解释。
此时就有了一个问题:
答案是不行。