四、网络层(三)IPv4
目录
3.1 IPv4地址
3.1.1分类编址
3.1.2子网划分与子网掩码
3.1.3无分类编址CIDR
3.1.4网络地址转换(NAT)
3.2 IPv4分组
3.2.1 IP分组(IP数据报)的格式
3.2.2 IP数据报分片
3.3 地址解析协议(ARP)
3.4 动态主机配置协议(DHCP)
3.5 网际控制报文协议(ICMP)
3.1 IPv4地址
IPv4即现在普遍使用的IP协议(版本4)。IP协议定义数据传送的基本单元:IP分组及其确切的数据格式。IP协议也包括一套规则,指明分组如何处理、错误怎样控制。特别是IP协议还包含非可靠投递的思想,以及与此关联的分组路由选择的思想。
IPv4地址就是因特网上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
3.1.1分类编址
- 只有A、B、C类地址可分配给网络中的主机或路由器的各接口。
- 主机号为全“0”的地址是网络地址,不能分配给主机或路由器的各接口。
- 主机号为全“1”的地址是广播地址,不能分配给主机或路由器的各接口。
- A类地址中网络号为0的地址为保留地址;网络号为127的地址为环回自检地址。
- 255.255.255.255表示整个TCP/IP网络的广播地址,又称受限广播地址。实际使用时,由于路由器对广播域的隔离,等效为本网络的广播地址(各路由器均不转发)。
IP地址有以下重要特点(部分)
- IP地址是一种分等级的地址结构。分等级的好处是:IP地址管理机构在分配IP地址时只分配网络号,而主机号则由得到该网络号的组织自行分配,方便了IP地址的管理;路由器仅根据目的主机所连接的网络号来转发分组,从而减少了路由表所占的存储空间。
- IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,其网络号是不同的,即这台主机属于两个逻辑网络。
- 路由器总是具有两个或两个以上的IP地址,路由器的每个端口都有一个不同网络号的IP地址。
3.1.2子网划分与子网掩码
两级IP地址的缺点:
- IP地址空间的利用率有时很低
- 给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏。
- 两级的IP地址不够灵活
在IP地址中增加一个“子网号字段”使两级IP地址变成了三级IP地址。这种方法为子网划分。子网划分已成为因特网的正式标准协议。
子网划分的基本思路如下:
- 子网划分纯属一个组织内部的事情。该组织对外仍然表现为没有划分子网的网络。
- 从主机号借用若干位作为子网号,当然后主机号也就相应减少了相同的位。三级IP地址的结构为:IP地址={<网络号><子网号><主机号>}。
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是先根据IP数据报的目的网络号找到连接到本单位网络上的路由器;然后该路由器在收到IP数据报后,按目的网络号和子网号找到目的子网;最后把IP数据报直接交付给目的主机。
划分子网会减少主机的数量(占用了部分主机号),但不增加网络的数量(对外仍表现为没有划分子网),只增加子网的数量,减少广播域的大小。
子网掩码
为了告诉主机或路由器对一个A类、B类、C类网络进行了子网划分,使用子网掩码来表达对原网络中主机号的借位。
默认的子网掩码是指在未划分子网时使用的子网掩码。
3.1.3无分类编址CIDR
无分类域间路由CIDR是在变长子网掩码的基础上提出的一种消除传统A、B、C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址的划分方法。
CIDR使用“网络前缀”的概念代替子网络的概念,网络前缀的位数不是固定的,可以任意选取,CIDR的记法为:
IP::={<网络前缀>,<主机号>} 或 IP地址/网络前缀所占比特数 (如128.14.32.5/20)。
将网络前缀都相同的连续IP地址组成“CIDR地址块”一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或称构成超网。路由聚合使得路由表中的一个项目可以表示多个原来传统分类地址的路由,有利于减少路由器之间的信息的交换,从而提供网络性能。
最长前缀匹配(最佳匹配):使用CIDR时,路由表中的每个项目由网络前缀和下一跳地址组成。在查找路由表时可能会得到不止一个匹配结果。此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀最长,其地址块最小,路由就越具体。
CIDR查找路由表的方法:为了更加有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次式数据结构中,然后自上而下地按层次进行查找。这里最常用的数据结构就是二叉线索。
3.1.4网络地址转换(NAT)
IPv4地址空间有限即将耗尽(实际上2011年已经分配完毕)。网络地址转换NAT用来缓解IPv4地址空间不足的问题。
NAT能使得整个专用网只需要一个全球IP地址就可以与因特网连通,由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗。
这种采用私有IP地址的互连网络称为专用互联网或本地互联网。私有IP地址也可称可重用地址。
在专用网络连接到因特网的路由器上安装NAT软件(变为NAT路由器),它至少要有一个有效的外部全球地址IP。这样,所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成外部全球地址IP。
普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号。
3.2 IPv4分组
3.2.1 IP分组(IP数据报)的格式
注:不需记忆IP数据报的首部,只需熟悉IP数据报首部各个字段的意义和功能。 TCP、UDP首部也是如此。
- 版本:指IP协议的版本,目前广泛使用的版本号为4(即IPv4)
- 首部长度:占4bit。以4B为单位,4位二进制数最大为15,因此首部长度最大为60B(15×4B)。最常用的首部长度是20B,此时不使用任何选项(即可选字段)。
- 总长度:占16bit。首部和数据部分的总长度,单位为1B,因此数据报的最大长度为65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据)一定不能超过下面的数据链路层的MTU值。
- 标识:占16bit。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接的数据报服务) 。当一个数据报的长度超过网络的MTU时,必须分片,此时每个数据报分片都复制一次标识号,以便能正确重装成原来的数据报。
- 标志:占3bit。标志字段的最低位为MF,MF=1表示后面还有分片,MF=0表示这是最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片。
- 片偏移:占13bit。它指出较长的数据报在被分片后,某片在原数据报中的相对位置。片偏移以8B为偏移单位。除最后一个分片外,每个分片(分的是数据载荷部分)的长度一定是8B的整数倍。
- 生存时间(TTL):标识数据报在网络中可通过的路由器数的最大值,以确保数据报不会永远在网络中循环。路由器在转发数据报之前,线把TTL减1。若TTL被减为0,则该数据报必须丢弃。
- 协议:占8bit。指出此分组携带的数据使用何种协议,即分组的数据部分应上交给哪个协议进行处理,如TCP、UDP等,其中值为6表示TCP,值为17表示UDP。
- 首部校验和:占16bit,首部校验和只校验分组的首部,而不校验数据部分。
- 源地址字段:占32bit,标识发送方的IP地址。
- 目的地址字段:占32bit,标识接收方的IP地址。
- 可选字段:长度从1B到40B不等,用来支持排错、测量以及完全措施等功能。注意当可选字段不为4B的整数倍时,需要填充字段为全0进行填充,因为首部长度是以4B为单位的。
注意:标志(凌云壮志,标志中DF=0允许分片)和标识加以区分,协议和版本加以区分。
3.2.2 IP数据报分片
3.3 地址解析协议(ARP)
- 在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变。
- 在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变。
如果仅使用MAC地址进行通信,则会出现以下主要问题:
- 如果仅使用MAC地址进行通信,因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。
- 如果仅使用MAC地址进行通信,手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。
- 如果仅使用MAC地址进行通信,包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。
故因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。
查表转发的结果可以指明IP数据报中下一跳路由器的IP地址,但无法指明该IP地址所对应的MAC地址。因此,在数据链路层封装该IP数据报成为帧时,帧首部中的目的MAC地址字段就无法填写,该问题需要使用网际层中的地址解析协议ARP来解决。
每台主机都设有一个ARP高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称ARP表。使用ARP来动态维护此ARP表。
从IP地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程。只要主机或路由器和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地将这个IP地址解析为数据链路层所需要的MAC地址。
3.4 动态主机配置协议(DHCP)
常用于给主机动态地分配IP地址,它提供了即插即用的联网机制。是应用层协议,放在应用层介绍。
3.5 网际控制报文协议(ICMP)
为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文(Internet Control Message Protocol,ICMP)。
主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送。
ICMP差错报告报文:用于目标主机或到目标主机路径上的路由器先源主机报告差错和异常情况。
- 终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
- 时间超过:当路由器收到生存时间(TTL)为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据报首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路径(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
不应发送ICMP差错报告报文的几种情况
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有组播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文有4种类型
- 回送请求和回答报文、时间戳请求和回答报文。(这两种常用)
- 掩码地址请求和回答报文、路由器询问和通告报文
ICMP常见应用
分组网间探测PING(用来测试两台主机之间的连通性):使用了ICMP回送请求和回答报文(询问报文)。
Traceroute/Tracert(用来跟踪分组经过的路由):使用了ICMP时间超过报文(差错报文)。
注意:PING工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP或UDP。
而Traceroute/Tracert工作在网络层。