IP网
网络层应该向运输层提供什么样的服务?互联网采用的思路是这样的:网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报(这里的数据报就是IP分组)服务。网络层不提供服务质量的承诺,也就是说,所传送的分组可能出错,可能丢失也可能重复或者失序。
网际协议IP是是TCP/IP协议中最重要的两个协议之一,与IP协议配套的还有三个协议:
- 地址解析协议(ARP协议)
- 网际控制报文协议(ICMP协议)
- 网际组管理协议(IGMP协议)
虚拟互连网
从一般的概念上来讲,将网络互连起来需要一定的中间设备,根据中间设备所在的位置,可以大致分成下面四种:
- 物理层使用的中间设备称为集线器。
- 数据链路层使用的中间设备称为交换机或者网桥。
- 网络层使用的中间设备称为路由器。
- 网络层以上的中间设备称为网关。
所谓虚拟互连网络,也就是逻辑互联网络,如果参加的计算机网络都使用相同的网际协议IP,我们利用IP协议就可以使这些性能各异的网络在网络层看起来像是一个统一的网络。如果在这样的IP网的上层使用TCP协议,那么就是我们如今的互联网。根据分组转发的概念,同一个网络下的数据报是进行直接交付的,因为塔不需要经过任何路由器,不同的网络下的数据报是间接交互的吗,因为数据报需要转发到路由器中送到其他网路。
IP地址
IP地址就是给互联网的每一台主机(或路由器)的每一个接口分配一个在全球范围内是唯一的32位的标识符(注意IP地址是由软件生成的,不是硬件地址!),IP地址现在由ICANN进行分配。
IP地址的编码方式经历了下面的三个阶段:
- 分类的IP地址
- 子网的划分
- 构成超网
分类的IP地址(重点)
所谓分类的IP地址,就是将IP地址分成若干的类,每一类的地址由两个字段组成,分别为网络号,主机号。一个网络号在互联网范围内是唯一的,而主机号在该网络号的范围内必须是唯一的。
这样的两级IP地址可以记为:
下图是ABCDE类地址的分布情况(要很熟悉):
分类IP地址结构分析
这里暂时只分析其中的一个类别的地址,拿A类地址说。网络地址前面都有个类别位,分别为0,10 ,110, 1110,1111。其中最常使用的是ABC三类的地址。IP地址都是32位的二进制数,为了方便分析,提高可读性,我们常常把32位二进制数分成每8位一组,每组的二进制数转换成十进制数,这样就便于观察了,这样的记法称为点分十进制法。
下面分析A类地址:
- 网络号
由于前面的8位网络号已经固定了一位,所以,网络号能表示的范围为(二进制表示):0 (7个0) - 0 (7个1)。
转换成十进制就是 0 - 127.通常,全0或者全1的地址我们不用,全1的地址是个保留地址,意思是本网络。而网络号为127的地址,用作环回地址,用于本主机本地通信(也就是本地地址)。如127.0.0.1,这就是当我们连接本地数据库的时候,你可以输入主机名可以输入local,也可以输入127.0.0.1。所以A类可以表示 (2^7) - 2 个网络。 - 主机号
主机号中,由于32位的IP地址中前面的8位已经被网络号占用,剩下的32 -8 = 24位可以用作主机号,一般的全0全1不用,所以最大主机数为(2^24) -2.
其他类型的地址可以按上述的办法分析,但是这里注意,在网络号上,由于前面被固定了至少两个值,所以怎么都不可能出现网络号全0或者全1的情况,因此不存在减2的问题,但实际上除开固定位,全0的网络号我们也是通常不指派的,因此表示的网络号要减1(比如B类的地址,(2^14)-1 )。
整个A类地址的IP空间为(2^31)个地址,占总IP地址的50%。
整个B类地址的IP空间为(2^30)个地址,占总IP地址的25%。
整个A类地址的IP空间为(2^29)个地址,占总IP地址的12.5%。
特点:
- IP地址管理机构在分配IP地址的时候,只分配网络号。
- 路由器根据目的主机所连接的网络号来转发分组
- 一台主机连接到多个不同网络的时候,应该有相应的多个不同的IP地址(典型的如路由器)
- 同一个网络 具有相同的网络号,且一个局域网有且只有一个路由器。
ARP协议
路由器把分组送到指定的网络后,就需要将该网络的数据送到指定的主机。ARP协议就是将网络层中的IP地址转换成数据链路层中的MAC地址。
ARP协议在主机的ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个表经常动态的更新,以应付局域网中主机的增加和减少。ARP的主要工作原理为:
- ARP向局域网内的主机广播一条ARP请求分组,内容大致是,“本机的IP,mac地址分别是xxx,现在想知道IP地址为yyy的主机,其mac地址是多少?”
- 局域网内的所有主机都将收到这个信息,但是只有对应ip地址为yyy的主机会响应,且该主机向发起方返回一个响应报文(此时为单播,因为1的时候已经知道了发起方的ip和mac地址),告知其本主机的mac地址。
- 如果要找的主机跟源主机(也就是发起方),不在同一个网络,那么发送方仍然是广播一个请求,但是寻找的是局域网内路由器的mac地址,由路由器将此请求转发到下一个网络进行ARP广播。直至找到目的主机的MAC地址。
下图包括了上述的几种情况,自行分析:
注意,这里APR协议只是解决同一局域网上的主机或者路由器的IP地址到mac地址的映射问题,并且主机用户对这种解析过程是透明的。
IP数据报格式
我们之前已经学过了TCP协议的数据报头部,这里直接拿IP协议的头部来学习:
一个IP数据包由两部分组成,首部跟数据部分。其中首部有20字节部分内容是固定长度的。
各字段长度分析
- 版本:略,表示IP协议的版本
- 首部长度:占4位,也就是最大只能表示十进制数位为15,但是注意,这里首部长度的单位是 4字节。也就是如果这里填的是5,那么首部长度为 5 X 4字节 = 20字节。又因为首部固定长度为20字节,所以这里最少填5,同理最大填15的话,有15 x 4字节 = 60字节,也就是IP数据报的首部的最大长度为60字节.通常使用固定首部20字节。
- 区分服务:略,一般网络安全才用到,考研不考
- 总长度:即首部+数据部分的总长度,最长可以表示[(2^16)-1)]个字,也就是65535个字节(除8)。
- 标识:略
- 标志:MF(more fragment) = 1,表示后面“还有分片”,MF = 0表示“没有分片”。DF(dont fragment) = 0时才允许分片。
- 片偏移:较长的分组分片后,某片在原分组后的相对位置。片偏移以8个字节为偏移单位。
- 生存时间:即TTL,执行ping命令的时候都会返回这个参数。表面数据报在网络中的寿命,此数值由发送方设置,数据报每经过一个路由器,TTL就自动减1,当TTL= 0的时候,就丢弃这个报文。
- 协议:指出数据报使用的协议,以便目的主机的IP层知道应该将数据报交付给哪个协议进行处理。(常见的有UDP TCP ICMP等等)
- 首部校验和:这里只校验首部而不校验数据部分。
- 源地址和目的地址:略
下面解释一下分片的概念:
IP下的数据链路层是以帧为单位进行传输的,它们规定了每一个数据帧的最大长度,即最大传送单元(MTU,通常是1500字节),若传输的数据报长度大于1500字节,就要将多出的字节进行分片。IP协议规定,所有互联网路由器以及主机都要能接受不超过576字节的数据报。分片后的每段数据报都应该加上首部,其中分片后数据报的长度字段应当是此分片的首部加上数据部分的总长度。
分组转发
我们前面知道,要将网络互连起来,在网络层要使用到的设备是路由器。网络层中的路由器通过路由表来转发分组。路由表指出某个主机到某个网络应该怎么转发。也就是在互联网上转发分组实际上是从一个路由器转发到下一个路由器。
路由表中,最重要的两条信息:
下图的路由表说明了路由表中的转发过程:
这样数据报就可以根据路由表的下一跳地址,交付其数据。比如10.0.0.7,从网3的数据报要发送到网一,那么下一跳是到20.0.0.7,路由器把数据报送到10.0.0.7所在的网络后(也就是间接交付),由本网络进行数据交付到目的主机(即直接交付)。由此可知,互联网中的分组转发都是基于目的主机所在的网络的,经过转发(可能多次间接交付),最终数据报一定可以找到目的主机所在的路由器。
当一个网络很少对外连接的时候,默认路由可以减少路由表的空间和搜索路由表所用的时间。(事实上,很多企业,单位的内网就是这么做的)。这个时候,路由表中除了指明的几个已知的网络(即内网),其他的所有目的网络都交付给默认路由(即互联网)。当然有时候,对于一些比较特殊的主机(比如服务器),就可以直接在路由表中指明下一跳的IP地址,这种路由称为特定主机路由。
分组转发算法如下:
- 从数据报首部提出目的主机的IP地址D,得出网络地址N。
- 如果N就是与路由器直连的某个网络地址,便进行直接交付,否则转3
- 如果路由表中有到目的地址为D的特定主机路由,则将数据交付给该条目的下一跳地址。否则转4
- 如果路由器中有到某个网络地址N的路由,那么将数据交付给指明的下一跳地址。否则转5
- 如果路由表中有设置默认路由,那么将数据交付给指明的默认路由器地址。否则转6
- 分组转发出错。
注意:路由表不给出具体的转发路径,只给出下一步数据报应该怎么走。