计算机网络 4-2-1 网络层(IPv4)
-
2 IPv4分组
-
各协议之间的关系
-
IP协议(Internet Protocol, 网际协议)是互联网的核心!
ARP协议用于查询同一网络中的<主机IP地址,MAC地址>之间的映射关系
ICMP协议用于网络层实体之间相互通知“异常事件”
IGMP协议用于实现IP组播
-
-
2.1 结构<首部+数据部分>
-
看书的素图回忆各字段的作用
-
首部固定部分20B,可变部分0~40B
-
注意3个与“长度”相关的字段:418,首总偏
-
-
-
补充:
版本:v4:0100,v6:0110
首部长度:固定部分20B,则是5*4=20B,为0101;最大60B,则15*4=60B,为1111
一般首部长度默认为固定长度
实际传输过程中, “数据部分”的长度受下一段链路的最短/最长帧长限制
eg: 以太网帧有最短帧长、最长帧长限制
-
-
-
-
2.2 命题重点
-
2.2.1 分片问题
-
MTU (最大传送单元):一个链路层数据帧能承载的最大数据量
-
如果一个IP数据报的总长度大于下一段链路的MTU,就需要将“数据部分”分片
-
易错:除最后一个分片外,其他每个分片的“数据部分”必须是8B的整数倍
-
易混
-
标识16bit,用于区分每个分片原本属于哪个IP数据报
-
标记3bit, 关注最低位MF、次低位DF
-
MF=1,表示后面还有分片
-
MF=0, 表示这是最后一个分片
-
DF=1,表示不允许被分片
-
DF=0,表示允许被分片
-
-
-
-
-
注意:
·IP数据报的“分片”可能在源主机、或任何一个路由器中发生
·只有目的主机才会对分片进行“重组”
·各分片有可能乱序到达目的主机
·由于首部的“片偏移”字段是以×8B为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是8B的整数倍(片偏移表示的是这个IP数据报它自己承载的数据在原始数据报当中的位置。)
-
-
-
2.2.2 TTL字段
-
IP分组每经过一个路由器,TTL减1,如果已经减到0,该路由器就丢弃分组,并向源主机发送ICMP报文 (通知出现异常)
-
-
-
-
不可达:
TTL的初始值通常由源主机设置。
每经过一个路由器,路由器就将TTL减1, 如果TTL减到0,就直接丢弃分组,并向源主机发送ICMP报文
注:ICMP报文用于通知一个节点发生了某种“异常”
-
2.3 ip地址最初的分类方案
- 路由器和路由器连接的接口可以不分配IP地址,但路由器和其他节点连接的接口必须分配IP地址
- 从属于同一个网络的所有主机、路由器接口的IP地址“网络号”都相同
- 当一台新主机接入网络时,需要给它分配一个IP地址、并配置“默认网关”
H1给H7发送IP数据报(166.1.0.0--200.1.1.2):
这个IP分组需要发送到另一个网络上,先交给默认网关这台路由器(H1的内部已配置:166.1.0.5)当H1知道了这个默认网关的IP地址之后。通过ARP协议查询到默认网关的IP地址所对应的MAC地址。把这个IP数据包封装成帧,把这个帧的目的MAC地址直接写成b2接口所对应的MAC地址对;
接下来H1会把这个mac帧发送给交换机,交换机根据MAC地址逐层转发到路由器的b2这个接口,路由器检查目的网络的IP地址网络号,根据转发表查看,把这个数据报从b0接口转发出去。当转发这个IP数据报的时候,也会修改mac帧,把mac帧的目的地址修改为接口的MAC地址。所以会把这个IP数据包重新封装成帧,这个帧的目的MAC地址填写为c0。
把帧从b0接口转发出去。公司的路由器就收到了这个IP数据包。检查IP数据包的目的地址,查看转发表,确定这个IP数据包接下来从c2这个接口转发出去。那同样根据ARP协议查询对应Mac地址重新封装成帧。
H1给H6发送IP数据报(166.1.0.0--166.1.4.4):
先检查源IP和目的IP是否属于同网段,同属同网段就不需要转发到默认网关;h1通过ARP协议查询到h6对应的MAC地址,直接把这个数据包封装成mac帧,把帧发送给交换机,交换机根据mac帧,转交给下一台交换机,交换机再根据mac帧转发到下一个节点,
该结点是集线器。集线器收到帧之后,会把帧无脑的转发给与之相连的所有结点,h6收到帧查看确认是自己接收,H5查看不是自己不接收丢弃
注意:以上这些特殊地址不能指派给网路中的任何一台主机或路由器“私用”
重要结论:前两行说明,如果一个网络中,主机号占Nbit,那么这个网络中,最多支持
台主机&路由器
2.4 子网划分 & 子网掩码
-
2.4.1 子网划分技术
-
✅子网划分
-
原理:若某单位租用了一个IP地址段,假设原本主机号占 n bit,那么可以将前k bit抠出来作为子网号,用剩余的n-kbit作为主机号,这样就能划分出2^k个子网(每个子网包含的IP地址块大小相等)
-
子网划分前,IP地址为两级结构=<网络号,主机号>
-
子网划分后,IP地址为三级结构=<网络号,子网号,主机号>
-
注意:每个子网地址中,主机号不能分配为全0/全1
-
全0表示子网本身,全1为子网广播地址
-
-
-
-
子网划分作用:让一个很大的IP地址块划分成几个相互独立的这种地址块,从而提升IP地址资源的利用率。
-
✅子网掩码
-
作用
-
用子网掩码、IP地址“逐位与”,算出<网络号,子网号>(可合称为“网络前缀”)
-
只有网络前缀相同的IP地址,才归属于同一个网络 (或子网)
-
-
注意
-
如果一个网络内部进行了子网划分,那么这个网络中的每台主机、每个路由器接口都需要配置IP地址、默认网关、子网掩码
-
如果一台路由器支持子网划分技术,那么在它的转发表中, 需要包含<目的网络号,子网掩码,转发接口>
-
-
-
✅默认子网掩码
-
如果一个传统网络 (A/B/C类)内部没有进行子网划分,那么可以将对应此网络的转发表项设置为“默认子网掩码”
-
A类默认255.0.0.0 B类默认255.255.0.0 C类默认255.255.255.0
-
-
-
✅默认路由
-
默认路由 (默认转发表项)设置:<目的网络号全0,子网掩码全0>
-
在路由器转发表中,如果所有表项都不匹配,那么将从“默认路由”转发出去
-
-
-
2.4.2 主机发送IP数据报的过程
-
一、判断目的主机和本机是否属于同一个网络
-
①检查本机IP地址和目的IP地址的网络前缀是否相同(需要用本机配置的子网掩码“逐位与”)
-
②若网络前缀相同,说明目的主机和本机属于同一个网络;若网络前缀不同,说明不属于同一网络
-
-
二、将IP数据报封装成MAC帧并发送到链路上
-
如果目的主机与本机属于同一个网络,就通过ARP协议找到目的主机的MAC地址,再将IP数据报封装成帧,并将帧发送给目的主机
-
如果目的主机与本机不属于同一个网络,就通过ARP协议找到默认网关的MAC地址,再将IP数据报封装成帧,并将帧发送给默认网关
-
-
-
2.4.3 路由器转发一个IP数据报的过程
-
一、路由器的某个接口收到一个IP数据报
-
二、对IP数据报首部进行校验,并从中找到目的IP地址
-
三、查“转发表”
-
转发表的表项包含<目的网络号,子网掩码,转发接口>
-
检查目的IP地址与每个表项能否匹配(将目的IP地址、子网掩码“逐位与”,匹配表项中的目的网络号)
-
注:至少“默认路由”表项一定是可以匹配成功的
-
-
四、转发
-
根据查转发表的结果,将IP数据报从匹配的接口转发出去
-
注:如果匹配的“转发接口”和该IP数据报的入口相同,就不用再把IP数据报转发回去
-
-
训练一:H3→H6(同一子网内的两台主机):在局域网的内部就完成了IP数据包的传送
H3要检查目的地址与源是否从属于同一个网络:用配置的子网掩码和目的地址逐位相与。网络前缀都相同这个目的地址和源从属于同一个网络之内。h3直接把这个IP数据包封装成mac帧,并且在mac帧当中直接说明h6的这个MAC地址。到达集线器,集线器会把帧无脑的转发给h5和h6两台主机。h5主机不会接收这个mac帧,因为目的地址和自己的mac地址不相同,而h6主机会接收这个帧,拆掉mac帧的首部和尾部,得到IP数据包。由于IP地址和自己的IP地址是匹配的,所以h6这台主机就会接收这个IP数据包
训练二:H1→H3(不同子网内的两台主机)
要判断目的地址和的源IP地址是否同属于同一个网络,把目的地址和源的IP地址和本机内配置好的子网掩码进行逐位与运算,得到两个IP地址的网络前缀。由于二者的网络前缀不相等。
所以就说明这个目的结点和源不在同一个网络内。于是h1需要把这个IP数据包发送给默认网关,让他帮忙转发。转发给b3路由器
路由器的网络层需要决定这个地址应该往哪转发。首先要和转发表的子网掩码进行相与。相与的结果再和目的网络号进行比较,可以看出和第二行匹配,就会从b2接口把这个IP数据包转发出去。
训练三:H1→H7(采用子网划分技术的网络→传统网络)
如果它没有进行子网划分,设置默认子网掩码
训练四:H7→H1(传统网络→采用子网划分技术的网络)
训练五:主机H1发往Internet的某个IP数据报如何传输?(设目的IP地址=111.2.3.4)
-
2.5 CIDR无分类编址
-
2.5.1 基本原理
-
取消了IP地址传统的A/B/C/D/E 分类。采用无分类编址CIDR,IP地址块分配更灵活,利用率更高,一定程度上缓解了IP地址耗尽 (时代背景:1993年)
-
IP地址={<网络前缀>,<主机号>},其中网络前缀不定长
-
CIDR记法
-
128.14.32.153/30, 表示在这个IP地址中,网络前缀占30bit, 主机号2bit
-
-
-
-
-
2.5.2 CIDR地址块的子网划分
-
定长子网划分
-
在一个CIDR地址块中,把主机号前k bit抠出来作为定长子网号,这样就能划分出2^k个子网 (每个子网包含的IP地址块大小相等)
-
缺点:每个子网都一样大,不够灵活,IP地址利用率低,浪费有限的IP地址资源
-
-
变长子网划分
-
在一个CIDR地址块中,划分子网时,子网号长度不固定(每个子网包含的IP地址块大小不同)
-
-
注意:在每个子网中,主机号全0、全1的IP地址不能分配给特定节点私用
-
-
2.5.3 子网划分解题技巧
-
CIDR地址块的子网划分技巧:可以利用类似于“从根到叶构造二叉哈夫曼树”的技巧
-
⚠️原始CIDR地址块作为根节点(假设可以自由分配的主机号占 h bit)
-
⚠️每个分支节点必须同时拥有左右孩子,左0,右1(反过来也行)
-
⚠️每个叶子结点对应一个子网,根据根节点到达叶子结点的路径来分析子网对应的IP地址块范围
-
⚠️整棵树的高度不能超过h-1(因为即便最小的子网也至少要保留2bit主机号)
-
-
-
例子:
![]()
注意:路由器和主机相连的链路,需要给路由器节点也分配一个ip地址
-
2.6 路由聚合
-
-
对于一个路由转发表,如果几条路由表项的转发接口相同,部分网络前缀也相同,那么可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网。
-
-
缺点:
● 路由聚合可以减少路由表的大小。● 路由聚合可能会引入额外的无效地址。
-
-
-
存在1: 目的IP地址和转发表多个表项匹配--最长前缀匹配原则
目的地址128.14.32.131与路由器转发表均匹配,则采用最长前缀匹配原则进行匹配,表项2匹配的长度最长,则从G3转发出去