IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(即4字节)为单位来描述。
P128页详情图
首部的前一部分固定长度(共20字节),在首部的固定部分的后面是一些可选字段,其长度是可变的。
首部 = 固定长度(20字节)+可选字节
(1)版本(占4位)就是指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPV4)。
(2)首部长度(占4位)可表示的最大十进制数值是15。注意首部长度的单位是1代表4个字节(即32位),因为IP首部的固定长度是20字节,所以首部长度的最小值为5(二进制位0101)。而当首部字节为最大值1111时(即15),代表首部的长度已到达15个4字节,即60字节。因此IP数据报的数据部分永远在4字节的整数倍时开始,不是4字节的整数倍是,必须利用最后的填充字段加以填充。
(3)区分服务 (占8位)用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
(4)总长度(占16位) 指首部和数据之和的长度**,单位为字节**。一位代表一个字节,总长度字段为16位,因此数据报的最大长度为2^16-1 = 65535字节。实际上传送这样长的数据报在现实中极少遇到的。
在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU。若所传送的数据报长度超过链路层的MTU值,就必须把过长的数据报进行分片处理。每一个IP数据报越短,路由器转发的速度就越快、
数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
(5)标识 (占16位)IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。这个"标号"并不是序号。当数据报由于长度超过网络的MTU而必须分片时,这**个标识字段的值就被复制到所有的数据报片的标识字段中。**相同的标识字段的值使分片后的各数据报最后能正确地重装称为原来的数据报。
(6)标志flag (占3位)目前只有两位有意义
(7)片偏移(占13位)片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。所以,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间(占8位)也就是TTL(Time To Live)表明这是数据报在网络中的寿命。目的是防止无法交付的数据报无限制地在互联网中兜圈子。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL的值减1.当TTL值减为0,就丢弃这个数据报。
(9)协议 (占8位)协议字段指出此数据报携带的数据是使用何种协议(TCP,IP,UDP,ICMP…)。
(10)首部检验和 (占16位)这个字段只检验数据报的首部,但不包括数据部分。
在发送方,先把IP数据白首部划分为许多16位字的序列,并把检验和字段置零。反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。
接收方收到数据报后,将首部的所有16位字再使用反码算术相加一次,和取反码,若首部未发生任何变化,则此结果必为0,则保留这个数据报,否则认为出差错,并将此数据报丢弃。
(11)源地址 (占32位)
(12)目的地址(占32位)
很多路由器都不考虑IP首部的选项字段,这里就不详述。
在互联网上转发分组时,是从一个路由器转发到写一个路由器。在路由表中,每一条路由最主要的是以下两个信息:(目的网络地址,下一跳地址)。我们就根据目的网络地址来确定下一跳路由器。
在今天看来,在ARPANET的早期,IP地址的设计确实不够合理。
第一:IP地址空间的利用率有时很低。IP地址的浪费,还会使IP地址空间的资源过早地被用完。
第二:给每一个物理网络分配一个网络号会使路由表变大因而网络性能变坏。
第三:两级IP地址不够灵活。我们希望有一种方法,使一个单位能随时灵活地增加本单位的网络,而不必事先到互联网管理机构去申请新的网络号。
为了解决上述问题,从1985年起在IP地址又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址。这种做法叫做划分子网,或子网寻址或子网路由选择。
划分子网的基本思路如下:
(1)一个拥有许多物理网路的单位,可将所属的物理网络划分为若干个子网。本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络。
(2)划分子网的方法是从网络的主机号借用若干位作为子网号,当然主机号也就相应减少了同样的位数。于是两级IP地址在本单位内部就变为三级IP地址:网络号,子网号和主机号。
IP地址 ::={<网络号>,<子网号>,<主机号>}
(3)凡是从其他网络发给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付目的主机。
路由器是如何把一个数据报(目的地址是145.13.3.10)转发到子网呢?使用子网掩码。
我们要知道使用子网掩码的好处就是,只要把子网掩码和IP地址进行诸位的“与”,就能得出要找的子网的网络地址。
比如,目的IP地址145.13.3.10,,将其与相应的子网掩码,255.255.255.0(这里只是举例使用的默认子网掩码,完全有可能子网掩码为具体的一个ip如:255.255.192.0)想与,就能得到145.13.3.0,
当然要是目的IP地址为145.13.3.10的前16位为网络号加子网,那么子网掩码就为255.255.0.0,想“与”就能得到145.13.0.0。
如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。这样可以不用查找该地址的类别位就能知道这是哪一类(A,B,C类)的IP地址。
A类地址的默认子网掩码为:255.0.0.0
B类地址的默认子网掩码为:255.255.0.0
C类地址的默认子网掩码为:255.255.255.0
子网掩码是一个网络或一个子网的重要属性。
划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
同样的IP地址和不同的子网掩码可以得出相同的网络地址。但是不同的掩码的效果是不同的,可划分的子网数和每一个子网中的最大主机数都是不一样的。
使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
CIDR最主要的特点:
CIDR消除了传统的A类、B类和C类地址以及划分子网的概念。CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀”指明网络,后面部分用来指明主机。因此CIDR使IP地址从二级编址(使用子网掩码)又回到了两级编码,但这已是五分类的两级编址。
IP地址 ::={<网络前缀>,<主机号>}
CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”
128.14.35.7/20 这里的20表明前二十位 为一个CIDR地址块
所以这里也可以有个地址掩码的概念,前二十位为1后面12位为0的地址掩码11111111111111111111000000000000
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由。路由聚合也称为构成超网。
10.0.0.0/10 可简写为10/10 或00001010 00*
每个项目由“网络前缀”和“下一跳地址”组成。但是在查找路由表时可能会得到不止一个匹配结果。如11111110000000… 11111111111110000…都可以匹配前者。
这时候应当从匹配结果中选择具有最长网络前缀的路由。这就是最长前缀匹配。
见P146,简单来首也就是构建一个关于最长前缀的二叉线索树。
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告。
ICMP是互联网的标准协议。但ICMP不是高层协议。
ICMP报文是装在IP数据报中,是IP层的协议。
两种:ICMP差错报告报文和ICMP询问报文
ICMP差错报告报文:终点不可达,时间超过,参数问题,改变路由
ICMP询问报文:
VPN:利用公用的互联网作为本机构各专用网之间的通信载体。所有通过互联网传送的数据都必须加密。VPN只是在效果上和真正的专用网一样,一个机构要构建自己的VPN就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。
NAT:网络地址转换NAT,这种方法需要在专用网连接到互联网的路由器上安装NAT软件。它至少有一个有效的外部全球IP地址,这样们所有本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。