Internet网络层中的重要协议——IP协议
一、Internet网络层
Internet网络是典型的数据报网络,数据报网络主要实现的是 路由 和 转发 :
路由器通过运行路由协议,根据路由算法,计算路径信息
路径选择
2、IP协议(寻址、数据报格式、分组格式)
IPv4数据报(分组)格式:
①版本号:ip协议的版本,字段占4位
②首部长度:字段占4位,给出的最大值为15。但是,从图中我们可以看到,首部有5行,每行为32位4个字节(未包括可变的选项字段),总共有20个字节,最大值15肯定是无法满足的,所以规定,首部长度这四位,是以4字节位为单位的(需要乘以4)字节
③服务类型tos:指示期望获得哪种类型的服务,一般情况下不死好用,通常ip分组该字段的值为00H
④总长度:占16位,ip分组的总字节数(首部+数据)
最大ip分组的总长度,65535B;
最小的ip分组首部:20B;
最大的ip封装数据:65535-20=65515B
注意,在实际中不会有这种理想情况
⑤生存时间TTL:占8位,IP分组在网络中可以通过的路由器数或跳步数
路由器每转发一次分组,TTL减1
当TTL=0,说明寿命到了,路由器将丢弃该IP分组
⑥协议:指示ip分组封装的是哪个协议的数据包
可以实现复用/分解
6为TCP,表示封装的是TCP段
17为UDP,表示封装的是UDP段
⑦首部校验和:占16位,实现队IP分组首部的差错检测
计算校验和时,该字段置全0(与UDP差错检测是一样的)
关键:采用反码算数运算求和(进位1加到第一位),和的求反码作为首部校验和字段,结果全为1则是正确的
注意,因为首部校验和是对首部进行校验,每一次路由器转发分组时,TTL都会减1,所以每次都要重新计算
⑧源IP地址和目的IP地址:各占32位4个字节
发送分组的源主机/路由器(网络接口)
接收分组的目的主机/路由器(网络接口)
⑨选项字段:长度可变,范围在1~40B之间
用于网络的探测,可以携带安全、源选路径、时间戳、路由记录等内容
注意,这个字段实际上很少使用,因此,典型的ip数据报是20个字节(4个字节x5行)
⑩填充:首部是以4字节位单位的,因此要补足
2-1、IP分片与重组
(1)
最大传输单元MTU:链路层数据帧可以封装数据的上限,不同链路的MTU是不一样的。
由上图,大IP分组向较小MTU、链路转发时,可以被“分片”,fragmented
将一个IP分组分为多片IP分组;
注意,并不是一定要分片,路由器发现有的IP分组不允许分片,此时则被丢弃。
重组:reassembled
ip分片到达目的主机后才进行重组,
因为路由器不负责重组
(2)
目的主机假如要正确地重组,则需要ip首部的相关字段参与,
用于标识分片(是否分片)以及确定分片的相对顺序
(总长度、标识、标志位、片偏移)
①标识ID,用于标识一个IP分组
IP协议利用一个计数器,每产生IP分组,计数器便加1,作为该IP分组的标识
②标志位,占3位
DF:dont fragment
=1,禁止分片;=0允许分片;
MF:more fragment
=1,非最后一片;=0,最后一片(或根本没有分片)
Q:当MF=1的时候,是分片的哪一片;当MF=0,怎么知道是最后一片还是没有分片
A:考虑片偏移量
③片偏移,占13位
首先,没有分片,偏移量为0;
一个ip分组分片封装原ip分组数据的相对偏移量:数据的哪一个字节开始分,最后一片肯定MF=0
注意,片偏移量字段以8字节为单位,与首部长度以4字节为单位的原理一致
所以,在ip分组分片过程中,除了最后一片,所有分片封装的数据字节数一定是8的倍数
IP分片过程:
2-2、IP编址addressing
一个ip数据报,需要两个重要的IP地址:源IP地址和目的IP地址
Q:源IP地址哪里发出来的?目的IP地址要发到哪里去?
A:源主机的接口interface和目的主机的接口interface
接口:interface
主机/路由器与物理链路的链接
- 实现网络层功能的接口
- 路由器通常为了转发需要多个接口
- 作为端系统,通常要实现五层的功能,包括网络层,因此也需要接口,主机通常只有一两个接口(如有线的以太网接口和无线的802.11接口)
IP地址:32比特(IPv4)的二进制数
通过IP地址,唯一标识网路中的主机、路由器的接口
或者说,IP地址与每一个接口关联
怎么样给接口分配IP地址?
把IP地址分为两部分:网络号+主机号
基本原则:
保证分配到某一个网络区域中的这些接口的IP地址,其网络号是相同的,如下图
具有相同网络号的接口集合——IP子网
利用他们相同的网络号,来描述这个区域的网络
IP子网的特点:
①具有相同的网络号
②所有的接口是不跨越路由器的,彼此之间是物理联通的
IP子网的作用
有了IP子网,我们就可以在路由器的转发表中,比如存储向哪个网络转发数据的时候, 就可以不用去记录具体的主机的IP地址,只需记录这个区域的网络的子网地址就可以了
(利用一个特殊地址,来描述一个ip子网的整体,如下图)
ip协议在传输和处理分组过程中,难免会出现差错,此时需要把差错信息传输给一些主机和路由器,就需要新的协议——icmp协议
因此,假如要实现IP协议传输分组,离不开icmp协议。