一、网络层概述
一、基本概念
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间传输。
若只有单个网络,只需要物理层和数据链路层即可。
不同的异构网络需要路由器将其互连,路由器的每一个接口代表一个不同的网络,也区分一个广播域。
我们以TCP/IP协议栈的网络层为例来学习网络层。
二、需要实现的任务
①向传输层提供可靠服务还是不可靠服务。
即在数据包传输过程中,可能误码、乱序、丢失之类的,网络层可以选择是否提供可靠传输功能。
如TCP/IP协议体系的网络层是提供的不可靠服务。
②网络层寻址问题
IP地址的前面相同部分是网络编号,后面是区分不同的接口。
③路由选择问题
传输数据包的时候,一个路由器如何选择它要传出的接口。
三、网络层提供的两种服务
数据交换方式的分组交换方式。
虚电路方式和数据报方式。
我们将学习的TCP/IP协议体系的网络层就是无连接的不可靠传输的网络层。
二、IPv4地址—32bit
一、概述
IPv4地址是因特网上的每一台主机(或路由器)的每一个接口分配的全球唯一的32bit的标识符。
IPv4地址采用点分十进制表示方法,即将32bit分为4个字节,每个字节的值表示成一个十进制用点分开。
二、IPv4地址的编制方法
对于每一个网络,分配网络地址的时候,每一个路由器接口都划分出一个网络号。
不管是哪种编址方式,一定要记住,每一个路由器的接口都是不一个不同的网络号,包括不同的子网!!
每一个主机和路由器的接口 都有一个IP地址,互不相同,同一个路由器接口下的网络,网络号相同。
一、分类编制的IPv4地址
A类地址,网络号占一个字节,网络号首位为0,则网络号有0~127
B类地址,网络号占两个字节,网络号前两位为10,则网络号有128.0~191.255
C类地址,网络号占三个字节,网络号前三位是110,则网络号有192.0.0~223.255.255
判别这三类地址只需要判断第一个字节的大小
0~128~192~224
A B C
分配给主机的IP地址的主机号不能为全0,也不能为全1,全0那表示一个网络地址,全1表示一个广播地址。
①A类地址
A类地址特殊在于网络号0和127(最大和最小的两个),都用于特殊作用。
最小的0不指派,最大的127用作本地环回测试地址,不指派。
②B类地址
没有特殊的网络号
③C类网络
没有特殊的网络号
④特殊IP地址
(1)全0的地址:0.0.0.0 用于没有分配IP地址的主机发送报文时作为自己的源IP地址
如果仅仅网络号是0,也是一样的作用
(2)广播地址:只可以做为目的地址
1°仅主机号全1的广播地址,表示在对应网络号下进行广播,可以跨路由器转发
2°IP地址全1的广播地址255.255.255.255,表示在本地网络下广播,路由器不转发
(3)环回地址:A类地址的127.
只要主机地址不是全0(网络地址),也不是全1(广播地址),那就可以当作环回地址既可以当作目的也可以当作源。
二、划分子网的IPv4的地址
我们可以在分类编址的基础上,给原来的网络划分子网。
利用主机号的一部分位作为子网的标识,并且注意子网号也将作为新的网络号。
子网号的识别可以用子网掩码来实现,即子网号的部分掩码位置全为1,其余部分为0,与IP地址相与 以及分类编址的情况,就可以知道主码有哪几位是分配给子网编制了。
在没有分配子网的网络中,会存在默认的子网掩码,那就是原来分类编址全为1的子网掩码。
以后网络地址就是子网的网络地址了。
三、无分类编址的IPv4的地址(CIDR)
同一个网络号的IP地址组成一个“CIDR块”。
同样的,对于一个网络号,主机号全0是网络地址,全1是广播地址!
CIDR方法在画路由表的时候更加节省空间!使用路由聚合的方法,可以在没有差错的情况下对IP地址求前缀。
三、IPv4地址的应用规划
①定长的子网掩码FLSM
使用同一个子网掩码来划分子网。
网络号+主机号→网络号+子网号+主机号(这里和划分子网的IPv4地址方法是一样的)
即申请到的C类网络地址被划分成8个子网,拿出5个分配给不同的网络即可。
②变长的子网掩码VLSM
实际上就是将CIDR地址块,划分成不同的小地址块,(这是不是也就是不同网络前缀会不一样的原因了!因为将最大的CIDR地址块一步一步划分,一步一步分配下来的!)
而这里所谓的子网掩码,其实就是/x中x位网络前缀全1其余全0的32位bit。
大的网络前缀+主机号→小的网络前缀+主机号
我们来举个栗子!
1°我们先看每个网络需要多少个主机号位(包括全0和全1)
2°然后我们进行极限分配(也就是说 要多少我们给他的刚好达标就可以)
右边的注意事项实际上就是,网络地址的主机号必须是全0的,所以比如/28的网络前缀划分的子块必须从低四位为0开始。
3°你会发现,咱们分配的时候是将218.75.230.0/24这个网络前缀为24位的大CIDR块下的IP地址分配给各网络,各网络的网络前缀可以不一样,但是他们分配的大CIDR块下的32位IP地址各不相同!
<这就解释了我们的疑惑:/22的地址分配的32位IP地址如何避免与/18的32位IP地址相同? 实际上他们都是从一个更大的CIDR块按序分配下来的,所以一定不相同~>
三、IP数据报
一、发送和转发过程
我们来讨论一下,为什么某个主机 对于一个IP地址 与 其自己的掩码相与就能判断是否是同一个网络。我们来讨论无分类编址的情况(这种情况包含了划分子网的情况):
①对于一个大CIDR地址块/24下 分配的两个 小CIDR地址块,/27和/28,对于/27的网络而言,它的后5位00000~11111都是它网络下的,所以对于/28,其前27位就不能和/27是一样的了,对于任意一个/(n+x)和/n都是如此。所以一定可以区分下来。
②我们对于每一个网络都要分配到它的子网之下,而不能使用/24作为它的掩码,就比如,一栋房子有四个卧室,不同的人住在不同的卧室,用卧室可以区分不同的人,但是用这栋房子就区分不了,既然我们要做的就是用每栋房子某个卧室区分人,那就不要再在房子已经区分卧室之后再用房子指代人了。同理,对于一个大的CIDR块,它之下的子网,都以子网号区分,不会再用大的CIDR块的网络号。 所以用①就可以证明所有问题。
一、主机发送数据报
主机需要发送的目的IP地址,与自己的子网掩码相与就可以知道目的IP地址是否与自己是同一个网络。因为当且仅当IP地址对应其子网掩码前面位数相同,相与之后得到的值才能是相同的,否则不相同。
每个主机都含有一个自己的IP地址和自己的子网掩码,它们之与就可以得到它所在的网络地址是多少,每个主机还有一个默认网关,这要求是对应路由器接口的IP地址,用于主机间接传给其他网络的人呢;每个路由器接口都有一个IP地址和自己的子网掩码。
在同一个网络中就可以直接用MAC地址寻址了。
二、路由器转发数据报
路由器对来的目的地址与其路由表中的各子网掩码相与,来判断它所在的网络。
相与之后,与对应目的网络作比较如果是一样的,那就说明该目的地址就是这个目的网络。