一、Internet网络层
Internet网络层是典型的数据报网络。主要功能是进行路由和转发。
二、IP数据报格式
- 版本号:4 bit,版本为4或6。
- 首部长度:以4个字为单位。
- 服务类型:8 bit,指示期望获得那种类型的服务。只有在网络提供区分服务(DiffServ)时使用。一般不使用。
- 总长度:16 bit,表示IP分组的总字节数(首部+数据)。
- 标识:16 bit,标识一个IP分组。IP协议利用一个计数器,每产生IP分组,计数器加1,作为该IP分组的标识。
- 标志位:3 bit,第一个bit位保留;
第二个DF(Don’t Fragment)比特位,标识路由器是否允许分片。
DF=1:禁止分片;DF=0:允许分片。
第三个MF(More Fragment)比特位,
MF=1:非最后一片;MF=0:最后一片(或未分片)。 - 片偏移:13 bit,以8个字节为单位。一个IP分组分片封装原IP分组数据的相对便宜量。未分片时,偏移量为0。根据片偏移大小就可以判断MF=0时具体是哪种情况。
- 生存时间:8 bit,表示IP分组在网络中可以通过的路由器数(或跳步数)。路由器转发一次分组,TTL减1。如果TTL=0,路由器则丢弃该IP分组。
- 协议:8 bit,指示IP分组封装的是哪个协议的数据报。6为TCP,表示封装的是TCP段;17为UDP,表示封装的是UDP数据报。
- 首部校验和:16 bit,实现对IP分组首部的差错检测。每次路由器转发时都重新校验。即采用逐跳校验。
- 源IP地址:32 bit,标识发送分组的源主机/路由器(网络接口)的IP地址。
- 目的IP地址:32 bit,标识接收分组的主机/路由器(网络接口)的IP地址。
- 选项:长度可变,范围在1~40 B之间,携带安全、源选路径、时间戳和路由记录等内容。实际很少使用。
- 填充:长度可变,1~3 B之间,目的是补齐整个首部,符合32位对齐。即保证首部长度是4字节的倍数。
三、IP分片
MTU(最大传输单元):链路层数据帧可封装数据的上限。
不同链路的MTU不同
当大IP分组向较小MTU链路转发时,可以被“分片”(fragmented),IP分片到达目的主机后进行“重组”(reassembled)。
若不允许被分片,则丢弃分组。
注意:路由器只分片不重组,只有目的主机能进行重组。如果传输过程中有分片丢掉,目的主机收不全分片,则会把所有分片丢掉。
与分片有关的字段:总长度,标识,标志位,片偏移。
IP分片过程:
假设原IP分组总长度为L,待转发链路的MTU为M
若L>M,且DF=0,则可以/需要分片
分片时每个分片的标识复制原IP分组的标识
通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片
一个最大分片可封装的数据应是8的倍数,因此,一个最大分片可封装的数据为(公式中的20位首部长度):
d
=
⌊
M
−
20
8
⌋
×
8
d =\lfloor\frac{M - 20}{8}\rfloor×8
d=⌊8M−20⌋×8
需要的总片数为:
n
=
⌈
L
−
20
d
⌉
n =\lceil\frac{L - 20}{d}\rceil
n=⌈dL−20⌉
每片的片偏移字段取值为:
F
i
=
d
8
×
(
i
−
1
)
,
1
≤
i
≤
n
F{_i} =\frac{d}{8}×(i-1),\quad\quad1\leq i \leq n
Fi=8d×(i−1),1≤i≤n
每片的总长度字段为:
L
i
=
{
d
+
20
1
≤
i
<
n
L
−
(
n
−
1
)
d
i
=
n
L{_i}=\left\{ \begin{aligned} d+20\quad\quad\quad1\leq i < n \\ L-(n-1)d\quad\quad i = n \end{aligned} \right.
Li={d+201≤i<nL−(n−1)di=n
每片的MF标志位为:
M
F
i
=
{
1
1
≤
i
<
n
0
i
=
n
MF{_i=\left\{ \begin{aligned} 1\quad\quad1\leq i < n \\ 0\quad\quad\quad\quad i = n \end{aligned} \right.}
MFi={11≤i<n0i=n
四、IP编址(addressing)
接口(interface):主机/路由器与物理链路的链接。
接口能实现网络层功能。路由器通常有多个接口,主机通常只有一个或两个接口。
IP地址:32比特(IPv4),编号标识主机、路由器的接口。
IP地址与每个接口关联。
IP地址:
网络号(NetID)- 高位比特
主机号(HostID)- 低位比特
IP子网:
IP地址具有相同的网络号的设备接口。
不跨越路由器(第三及上层网络设备)可以彼此物理联通的接口。
“有类”编址:
特殊IP地址:
私有IP地址:所谓私有地址就是在A、B、C三类IP地址中保留下来为企业内部网络分配地址时所使用的IP地址。
私有地址主要用于在局域网中进行分配,在 Internet上是无效的。这样可以很好地隔离局域网和 Internet。私有地址在公网上是不能被识别的,必须通过NAT将内部IP地址转换成公网上可用的IP地址,从而实现内部IP地址与外部公网的通信。公有地址是在广域网内使用的地址,但在局域网中同样也可以使用,除了私有地址以外的地址都是公有地址。
Class | NetIDs | Blocks |
---|---|---|
A | 10 | 1 |
A | 172.16 to 172.31 | 16 |
A | 192.168.0 to 192.168.255 | 256 |
五、子网划分与子网掩码
子网划分:没有划分子网时,IP地址是两级结构。划分子网后IP地址变为三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
IP地址:
网络号(NetID)- 高比特位
子网号(SubID)- 原网络主机号部分比特
主机号(HostID)- 低比特位
子网掩码:从IP数据报首部无法看出源主机或目的主机所连接的网络是否进行了子网划分,因此引用子网源码进行区分。
形如IP地址,有32位,点分十进制形式;NetID、SubID位全取1,HostID位全取0。
例如:
A网的默认子网掩码为:255.0.0.0
B网的默认子网掩码为:255.255.0.0
C网的默认子网掩码为:255.255.255.0
借用3比特划分子网的B网的子网掩码为:255.255.224.0
作用:分割网络;计算网络号。
例如:
子网201.2.3.0,255.255.255.0划分为等长的4个子网,分别是:
201.2.3.0 , 255.255.255.192
201.2.3.64 , 255.255.255.192
201.2.3.128 , 255.255.255.192
201.2.3.192 , 255.255.255.192
此时SubID占2个比特位
Q:路由器如何确定应该将IP分组转发到哪个子网?
A:将IP分组的目的IP地址与子网掩码按位与运算,提取子网网络地址。
使用子网时分组的转发
使用子网划分后,路由表必须包含以下三个内容:目的网络地址、子网掩码、下一跳地址。
在划分子网情况下,路由器转发分组算法如下:
- 从收到的数据报的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发出去),转发任务结束。否则就是间接交付,执行3。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4。
- 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行5。
- 若路由器中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6。
- 报告转发分组出错。
六、无分类编址CIDR
CIDR记法:在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
CIDR的主要特点:
- CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。前面部分是“网络前缀”,用来指明网络,后面的部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了二级编址,但这已经是无分类的二级编址。
- CIDR把网络前缀都相同的连续IP地址组成一个“CIDR地址块”。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合又称为构成超网。
Q:如何进行路由聚集?
A:选择更具体的路由,最长前缀匹配优先。
参考文献:
哈尔滨工业大学网课《计算机网络之探赜索隐》李全龙
《计算机网络第六版》谢希仁