文章目录
- IP数据报格式
- IP数据报分片
- 例题
- IPv4地址
- 分类的IP地址
- 网络地址转换NAT
- 子网划分与子网掩码
- 无分类编址CIDR
主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层的传输单位是数据报,数据报是一个比较长的数据,分组是对数据报进行切割得到的一部分
功能:
- 路由选择与分组转发(最佳路径)
- 异构网络互联。4G,wifi,校园网等网络之间可以通信
- 拥塞控制。如果所有结点都来不及接收分组,而要丢弃大量分组的话,网络就处于拥塞状态,因此要采取一定措施,缓解这种拥塞
IP数据报格式
IP数据报的首部分为固定部分和可变部分,固定部分占20B
-
版本指明使用IPv4/IPv6
-
首部长度:单位是4B,占用4位,可以从0000到1111,如果为1111,对应十进制数15,15×4B=60B,即IP数据报的首部为60B,其中固定部分20B,可变部分40B。因为固定部分为20B,因此最小为5,对应二进制数0101。
可以看到可变部分最后有一个填充部分,为了把可变部分填充为4B的整数倍,否则无法用首部长度表示 -
区分服务:指示期望获得那种类型的服务
-
总长度:首部长度+数据长度,单位是1B,占16位,最大取值对应十进制数为 2 16 − 1 = 65535 2^{16}-1=65535 216−1=65535
-
标识、标志、片偏移后面讲
-
生存时间(TTL):IP分组的保质期,经过一个路由器-1变成0则丢弃。确保分组不会永远在网络中循环
-
协议:数据部分使用的协议
-
首部检验和:只校验分组的首部,而不校验数据部分,不重要
-
源地址和目的地址:各占32位
-
可选字段:0~40B,用来支持排错、测量以及安全等措施
-
填充:全0,把首部不成4B的整数倍
IP数据报分片
最大传送单元MTU:数据链路层数据帧可封装数据的上限,以太网的MTU是1500字节,也就是下图的数据部分
- 标识:同一数据报的分片使用同一标识。使分片知道自己是哪一家的
- 标志:占三位,只有后两位有意义
中间位DF:DF=1,(满足)禁止分片;DF=0,允许分片
最低位MF:MF=1,后面还有分片;MF=0,代表最后一片/没分片 - 片偏移:指出较长分组分片后,某片在原分组中的相对位置,以8B为单位。
占13位,如0……01,换成十进制即为1, 1 × 8 B = 8 B 1\times 8B=8B 1×8B=8B,也就是说这个分片从数据报的数据部分8B开始往后
除了最后一个分片,每个分片一定是8B的整数倍
总长度占16字节,单位是1B
片偏移占13字节,单位是8B
首部长度占4字节,单位是4B
例题
定义需要分片为长度不超过1420B的数据报分片
因为每一个分片都需要携带相同长度的首部,因此每个分片最大数据部分为1400B,
第一个分片数据部分为1400B,第二个1400B,第三个1000B
然后计算片偏移,第一个分片显然是从0B-1399B,因此片偏移为0;第二个分片从1400B-3799B,片偏移为
1400
B
8
B
=
175
\frac{1400B}{8B}=175
8B1400B=175,类似地,第三个分片片偏移为为350
]
IPv4地址
分类的IP地址
IP地址={<网络号>,<主机号>}
11011111.00000001.00000001.00000001=223.1.1.1(点分十进制)
上图共有6个逻辑上的网络
每个路由器总是有两个或两个以上IP地址,路由器的每个接口都会有不同网络号的IP地址
最前面固定的几位可以看做标志位
- 特殊IP地址
环回地址就是自己给自己发,检测设备是否可以正确的接受发送数据、网络层是否能正常工作等
- 常用的三种类别IP地址的使用范围
A的最大可用网络数要-2,减去的是全0和127(环回地址);每个网络中的最大主机数也要-2,减去全0和全1
B的最大可用网络数要-1,减去的是128.0不可指派,也就是全0;每个网络中的最大主机数也要-2,减去全0和全1
C的最大可用网络数要-1,减去的是192.0.0不可指派,也就是全0;每个网络中的最大主机数也要-2,减去全0和全1
- 私有IP地址
网络地址转换NAT
网络地址转换NAT:在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址
如果此时A要与B通信,A发出一个数据报,那么该数据报的源地址就是192.168.0.3,目的地址是213.18.2.4,端口号(假设)是30000,这时数据报到NAT路由器处,根据NAT转换表,需要将LAN端映射成WAN端,即该数据报的源地址就是172.38.1.5,目的地址是213.18.2.4,端口号是40001
端口号可以表明主机内的某一个进程
同理如果B向A发送一个数据报,那么该数据报的源地址就是213.18.2.4,目的地址是172.38.1.5,端口号(假设)是40001,这时数据报到NAT路由器处,根据NAT转换表,需要将WAN端映射成LAN端,即该数据报的源地址就是213.18.2.4,目的地址是192.168.0.4,端口号是30001
子网划分与子网掩码
分类IP地址的缺点:
- IP地址空间的利用率有时很低(某公司申请了一个B类网络,但是可能只有几台主机,但认为自己公司未来可能扩张,因此不想申请C类网络,但是很多IP地址实际上没用上,因此利用率很低)
- 两级IP地址不够灵活(单位要在一个新的地方马上开通一个新的网络,显然这是需要时间的)
申请到一个网络后,划分子网是自己的选择,不需要向运营商申请。虽然划分了一个网络,但是对外仍表现为一个网络,即外面的网络看不见本网络内子网的划分
子网号能否全0全1要看情况,主机号不能全0全1,全0就是本网络,全1就是广播
假设此时有一个外部网络的数据报要发给145.13.3.10
子网掩码是一个与P地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成。其中,1对应于IP地址中的网络号及子网号,而0对应于主机号。计算机只需将IP地址和其对应的子网掩码逐位“与”(逻辑AND运算),就可得出相应子网的网络地址。
例如:已知IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址
255是8个1,0是8个0,因此子网地址是141.14.xxx.0
192=11000000,72=01001000,与的结果是01000000即64
因此子网网址为141.14.64.0
如果子网掩码是255.255.224.0,求网络地址
结果一样141.14.64.0
但第一个子网掩码占了18位,剩下14位都是主机号,第二个子网掩码占了19位,剩下13位都是主机号
例:某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址是
子网网络地址为180.80.xxx.0
252对应11111100,这里可以看出子网掩码有8+8+6=22位,77对应01001101,取前6位进行与运算,得到01001100,对应76,因此子网掩码是180.80.76.0
现在需要进行广播,因此主机号全是1,之前说网络号占22位,剩下10位都是主机号,因此加上之前算的子网掩码后6位,即为180.80.010011 11.255,因此就得到了180.80.79.255
要注意子网掩码是11111111.11111111.11111100.00000000,因此第三部分被划分成了两块,前6位是网络号,后两位是主机号
使用子网掩码的情况
- 一台主机在设置IP地址信息的同时,必须设置子网掩码
- 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码
- 路由器的路由表中,所包含信息的主要内容必须有目的网络地址、子网掩码、下一跳地址
使用子网掩码时路由器的分组转发算法如下:
- 从收到的分组的首部提取目的P地址,记为D
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则将分组直接交付,否则间接交付,执行步骤3.
- 若路由表中有目的地址为D的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器:否则,执行4.
- 对路由表中的每一行(目的网络地址、子网掩码、下一跳地址)中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器:否则,执行步骤5.
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器:否则,执行步骤
- 报告转发分组出错。
无分类编址CIDR
无分类域间路由选择即CIDR
-
消除了传统A、B、C类地址划分
CIDR记法:IP地址后加上/,然后写上网络前缀(可以任意长度)的位数,e.g.128.14.32.0/20
-
融合子网地址与子网掩码,方便子网划分
CIDR把网络前缀相同的连续的IP地址组成一个CIDR地址块
128.14.35.7/20是某CIIDR地址块中的一个地址
变成二进制:10000000 00001110 00100011 00000111
最小地址:10000000 00001110 00100000 00000000
最大地址:10000000 00001110 00101111 11111111
地址块:128.14.32.0/20
地址掩码(子网掩码):11111111 11111111 11110000 00000000
应用
- 构成超网
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合
方法:将网络前缀缩短
例如,在如图所示的网络中,如果不使用路由聚合,那么R1的路由表中需要分别有到网络1和网络2的路由表项。不难发现,网络1和网络2的网络前缀在二进制表示的情况下,前16位都是相同的,第17位分别是0和1,并且从R1到网络1和网络2的路由的下一跳皆为R2。若使用路由聚合,在R1看来,网络1和网络2可以构成一个更大的地址块206.1.0.0/16,到网络1和网络2的两条路由就可以聚合成一条到206.1.0.0/16的路由。
例:某路由表中有转发接口相同的4条路由表项, 其目的网络地址分别为35.230.32.0/21、35.230.40.0/21、 35.230.48.0/21、 35.230.56.0/21, 将该4条路由聚合后的目的网络地址为,35.230.32.0/19
- 最长前缀匹配
在使用CIDR时,查找路由表可能得到几个匹配结果(跟网络掩码按位与),应选择具有最长网络前缀路由。前缀越长,地址块越小,路由越具体
例如:有三个网络地址206.0.68.0/22、206.0.71.128/25、206.0.71.0/25,现发出一个数据报,目的地址为206.0.71.130
与第一个网络的子网掩码进行与运算,结果为206.0.68.0/22,可以发送给第一个网络
与第二个网络的子网掩码进行与运算,结果为206.0.71.128/25,可以发送给第二个网络
与第三个网络的子网掩码进行与运算,结果为206.0.71.128/25,不可以发送给第三个网络
我们得到可以发给一、二两个网络,但是根据最长前缀匹配,显然第二个网络匹配了25位,长于第一个网络22位,因此发给第二个网络