网际协议版本4(Internet Protocol version 4,IPv4),又称互联网通信协议第四版,是网际协议开发过程中的第四个修订版本,也是此协议第一个被广泛部署的版本。IPv4是互联网的核心,也是使用最广泛的网际协议版本,其后继版本为IPv6,直到2011年,IANA IPv4位址完全用尽时,IPv6仍处在部署的初期。
1.版本:指IP版本,目前广泛使用的版本号是4(IPv4)
2.首部长度:占4位,基本单位为4B。4位从0000-1111,若1111即15,乘单位4B=60B,此时取得首部长度最大值。固定部分20B,因此首部长度至少20B,20B/4B=5,即0101,因此范围0101~1111。若首部长度不是4B的整数倍,则使用填充字段,将其填充至4B的整数倍。最常用的首部长度是20B(即只有固定部分,没有可变部分)。因此首部长度可变。
3.区分服务:指示期望获得哪种类型的服务
4.总长度:=整个IP数据报的长度=首部长度+数据部分,占16位。基本单位为1B。最大长度216-1=65535B
5.生存时间TTL:占8位。IP分组的保质期,经过一个路由器-1,变成0时丢弃,保证分组不会在网络中循环。生存时间字段值表示一个分组可以经过的最多的跳数。
6.协议:占8位。指出该分组使用的协议(6为TCP协议 17为UDP协议)
7.首部校验和:占16位。只校验分组的首部,而不校验数据部分
8.源地址字段:占32位。标识发送发的IP地址
9.目的地址字段:占32位。标识接收方的IP地址
10.可选字段:0~40B。用来支持排错、测量以及安全等措施。
11.填充:把首部长度补成4B的整数倍。
以下三个字段(标识、标志、片偏移)与分片和重组相关↓
12.标识:占16位。一个数据报长度超过了链路层的MTU,就要进行分片(目的主机对分片后的数据报重组),每个分片都使用同一标识,是一个计数器用于保证数据报片能够正确组装称为原来的数据报。
*最大传送单元MTU:链路层数据帧可封装数据的上限,以太网的MTU是1500B
*当路由器准备将IP分组发送到网络上,而该网络又无法将整个分组一次发送时,路由器必须将该分组分片,使其长度能满足这一网络对分组长度的限制。IP分片可以独立地通过各个路径发送,而且在传输过程中仍然存在分片的可能(不同网络的MTU可能不同),因此不能由中间路由器进行重组。分片后的IP分组直至到达目的主机后才能汇集在一起,并且甚至不一定以原先的次序到达。这样,进行接收的主机都要求支持重组能力。
13.标志:占3位,只有2位有意义(x_ _),最高位保留。中间位DF=1禁止分片,DF=0允许分片;最低位MF=1代表后面还有分片,MF=0代表这是最后一片/不需要分片(没有超过MTU)。DF=0时MF才有意义。
片
*注:如果分组长度超过MTU,当DF=1时,丢弃该分组,并且用ICMP差错报文向源主机报告(ICMP下面讲)
14.片偏移:占13位,基本单位为8B。指出较长分组分片后,某片在原分组中的相对位置。如0000000000001,表示该分片在原来数据报中的相对位置是8B字节开始。除了最后一个分片,每个分片长度一定是8B的整数倍。
例:对下面的数据报分片,MTU 1420B
DF=0(允许分片)
MF=0(是个整体,最后没有分片了)
片偏移=0
总长度3820B
第一片1420B,除去首部20B,剩余1400B数据部分
第二片1420B,除去首部20B,剩余1400B数据部分
第三片剩余3800B-2×1400B=1000B
分别加上首部
设原数据报数据部分从0B开始
①第一段:0B~1399B
片偏移0B/8B=0B
标识与原始数据报相同
DF=0(允许分片)
MF=1(非最后一个)
②第二段:1400B~2799B
片偏移1400B/8B=175B
标识与原始数据报相同
DF=0(允许分片)
MF=1(非最后一个)
③第三段:2800B~3799B
片偏移2800B/8B=350B
标识与原始数据报相同
DF=0(允许分片)
MF=0(最后一个)
串记
总长度单位1B
片偏移单位8B
首部长度单位4B
1.IP地址 Internet Protocol Address:互联网协议地址,又译为网际协议地址。全世界唯一的32位(4字节)标识符,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。(路由器的每一个接口都会分配一个唯一的IP地址)
组成:<网络号>,<主机号>
如
11011111 00000001 00000001 00000001
分别转为十进制
----223---------1--------------1---------------1
即233.1.1.1
2.分类的IP地址
1.A类
网络号1B:第0位是0,剩余8-1=7位
(1)最大可用网络数-2:
①网络号1-7位:0000000
②网络号1-7位:1111111(127环回地址)
(2)可用范围
00000001~01111110
即1~126
(3)主机号24位-2
①全0(本网络)
②全1(广播地址)
2.B类
网络号2B:第0位1,第1位0,剩余16-2=14位
(1)最大可用网络数-1:
网络号2-15位:00000000000000
(2)可用范围
10000000 00000001~10111111 11111111
即128.1~191.255
(2)主机号16位-2:
①全0(本网络)
②全1(广播地址)
3.C类
网络号3B:第0位1,第1位1,第2位0,剩余24-3=21位
(1)最大可用网络数-1:
网络号3-23位:000000000000000000000
(2)可用范围
11000000 00000000 00000001~11011111 11111111 11111111
即192.0.1~223.255.255
(2)主机号8位-2:
①全0(本网络)
②全1(广播地址)
特殊的IP地址
(1)0.0.0.0:只可以作为源地址。表示本网范围内的主机
(2)网络号全0,主机号特定值:只可以作为源地址。表示本网范围内的某个特定主机
(3)255.255.255.255:只可以作为目的地址。表示本网络内的广播地址
(4)网络号特定值,主机号全0:既不能做源地址,也不能做目的地址。表示一个网络。如202.98.174.0
(5)网络号特定值,主机号全1:只可以作为目的地址。直接广播地址,对特定网络上的所有主机进行广播。如202.98.174.255
(6)网络号127,主机号任意(非全0/1)。既可以做源地址,也可以做目的地址。此地址表示任意主机本身,用于本地软件环回测试,目的地址为环回地址的IP数据报永远不会出现在任何网络上
私有的IP地址
只适用于内部网络,不允许出现在因特网上,路由器对目的地址是私有IP地址的数据报一律不进行转发。
在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址。
采用网络地址转换(NAT),可以使一些使用本地地址的专用网连接到因特网上,进而使得一些机构的内部主机可以使用专用地址,只需给此机构分配一个IP地址即可,并且这些专用地址是可重用的——其他机构也可使用,所以大大节省了IP地址的消耗。
若A向B发数据报,在网络层加上源IP地址(A:192.168.0.3)和目的IP地址(B:213.18.2.4),在传输层封装加上端口号(30000)。传到路由器,源IP地址改为路由器的IP地址(172.38.1.5)和端口号(改为40001)
可以看出:公网的IP不变,专用网的IP需要换成路由器IP(通过NAT)
NAT转发表
WAN端 | LAN端 |
---|---|
172.38.1.5(40002) | 192.168.0.4(30001) |
*注:NAT表项需要管理员添加
若B向C(192.168.0.4的主机)发数据报,在网络层加上源IP地址(B:213.18.2.4)和目的IP地址(专用网的代表人物是路由器IP:172.38.1.5),在传输层封装加上端口号(40002)。传到路由器,目的IP地址改为C的IP地址(192.168.0.4),端口号改为30001
NAT转发表
WAN端 | LAN端 |
---|---|
172.38.1.5(40002) | 192.168.0.4(30001) |
本地地址的主机和外界通信时,NAT路由器使用NAT转换表将本地地址转换成全球地址,或将全球地址转换成本地地址。普通路由器(仅工作在网络层)在转发IP数据报时,不改变其源IP地址和目的IP地址;NAT路由器在转发IP数据报时,需要查看和转换传输层的端口号,一定要更换其IP地址。
1.两级IP地址的缺点:IP地址空间的利用率有时很低、两级的IP地址不够灵活、会使路由表变得太大而使网络性能变坏
因此引入了三级IP地址:把主机号较高的一部分拿出来作为子网号。某单位划分子网后,单位对外仍然表现为没有划分子网的网络。
通过划分子网:
(1)减小了广播域的大小(规模),减小了冲突域的大小
(2)子网号占据了主机号位,减少了主机可分配的数量
(3)IP地址的利用率提高,网络的数量整体不变
主机号至少2位,子网号可以全0/1,主机号不能全0(本网络)/1(广播分组)
划分子网通过从网络的主机号借用若干比特作为子网号,从而使原来较大规模的网络细分为几个规模较小的网络,提高了IP地址的利用率。
2.子网掩码
对于两级IP地址,网络号全写1,主机号全写0;
对于三级IP地址,网络号和子网号写1,主机号写0
子网网络地址=子网掩码与IP地址二进制逐位相与
例
IP地址:141.14.72.24=10001101 00001110 01001000 00011000
子网掩码:255.255.192.0=11111111 11111111 11000000 00000000
相与得
10001101 00001110 01000000 00000000
即141.14.64.0
若将子网掩码改为255.255.224.0,网络地址仍为141.14.64.0
因此同一IP地址与不同的子网掩码,可能得到相同的网络地址。
例
子网掩码中主机号为全0,其他全1
255.255.252.0对应
11111111 11111111 11111100 00000000
可以看出后10位为主机号
前22位为网络号+子网号
由IP地址180.80.77.55可以看出180属于B类地址128.1~191.255
B类地址有16位网络号和16位主机号,其中16位主机号分为了6位子网号和10位主机号。因此
[11111111 11111111] [111111][00 00000000]
网络号------------------子网号------主机号
将IP地址与子网掩码相与得到子网网络地址
10110100 01010000 01001101 00110111
11111111 11111111 11111100 00000000
得到
180.80.76.0
广播分组使主机号全为1,即将最后10位改为1
即将10110100 01010000 01001100 00000000
改为10110100 01010000 01001111 11111111
即180.80.79.255
选D
3.使用子网掩码进行分组转发
每个路由器都有一个路由表,路由表包括:目的网络地址、目的网络子网掩码、下一跳地址
路由器转发分组算法:
(1)提取目的IP地址
(2)是否直接交付:将目的地址与子网掩码相与,若和子网的网络地址相同即可直接交付
(3)特定主机路由:对特定的目的主机指明的一个路由
(4)检测路由表中有无路径:目的地址和路由表中每一行的子网掩码相与,如果是目的网络,则按照该行的下一跳进行
(5)默认路由0.0.0.0:发给另外的路由器,重复上面步骤,直到找到。时间限制生存时间(TTL)
(6)仍未找到:丢弃,报告转发分组出错
消除了传统A、B、C类地址及划分子网的概念,可以更有效地分配IPv4的地址空间,把小的网络汇聚成大的超网。融合了子网地址与子网掩码,方便网络划分。即 IP={<网络前缀>,<主机号>}
CIDR是比划分子网更为灵活的一种手段,它消除了A、B、C类地址及划分子网的概念。使用各种长度的网络前缀来代替分类地址中的网络号和子网号,将网络前缀都相同的IP地址组成“CIDR地址块”。网络前缀越短,地址块越大。因特网服务提供者再根据客户的具体情况,分配合适大小的CIDR地址块,从而更加有效地利用IPv4的地址空间。
1.最小/大地址,地址块与地址掩码
[例] 128.14.35.7/20是某CIDR地址块中的一个地址
表示20位的网络前缀,剩下的12位表示主机号,包含212=4096个IP地址
变为二进制
[10000000 00001110 0010]0011 00000111
------------网络前缀------------
最小地址(主机号全0)[10000000 00001110 0010]0000 00000000,即128.14.32.0(本网络)
最大地址(主机号全1)[10000000 00001110 0010]1111 11111111,即128.14.47.255(广播地址)
CIDR地址块(与最小相同)128.14.32.0/20
地址掩码(子网掩码):网络前缀1,主机号0,即11111111 11111111 11110000 00000000
[例]192.199.170.82/27
82的二进制01010010
包含IP地址个数:25=32
最小地址:192.199.170.64
最大地址:192.199.170.95
地址块:192.199.170.64/27
地址掩码(子网掩码):11111111 11111111 11111111 11100000,即255.255.255.224
2.构成超网(路由聚合)
构成超网:将多个子网聚合成一个较大的子网
同接口合体。聚合后的合体网络=两个网络的网络地址取交集(相同的保留,从第一个不同的起往后(右)均写0)
网络1: 206.1.00000000.00000000(不规范写法)
网络2: 206.1.10000000.00000000
合体后:206.1.00000000.00000000,网络前缀由17变为16
即206.1.0.0/16
[例]
00100000
00101000
00110000
00111000
合体00100000
即35.230.32.0/19
答案C
3.最长前缀匹配
(1)使用CIDR时,查找路由表可能得到几个匹配结果(跟网络掩码按位相与),应选择具有最长网络前缀的路由。
(2)前缀越长,地址块越小,路由越具体。
[例] 目的地址206.0.71.130
A:206.0.68.0/22
B:206.0.71.128/25
C:206.0.71.0/25
目的地址:206.0.01000111 10000010
A网络掩码22个1,11111111 11111111 11111100 00000000
B:11111111 11111111 11111111 10000000
C:11111111 11111111 11111111 10000000
与A相与:206.0.01000100 00000000,即206.0.68.0/22,与A相同
与B相与:206.0.01000111 10000000,即206.0.71.128/25,与B相同
与C相与:206.0.01000111 10000000,即206.0.71.128/25,与C不同
选择匹配成功且最长的网络前缀的B
[例]
路由器R0的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,请问该分组应该被转发到哪一个下一跳路由器()。
A. R1 B. R2
C. R3 D. R4
目的网络 | 下一跳 |
---|---|
132.0.0.0/8 | R1 |
132.0.0.0/11 | R2 |
132.19.232.0/22 | R3 |
0.0.0.0/0 | R4 |
解:
表格对应
11111111 00000000 00000000 00000000
11111111 11100000 00000000 00000000
11111111 11111111 11111100 00000000
00000000 00000000 00000000 00000000
目的地址:10000100 00010011 11101101 00000101
相与得
10000100 00000000 00000000 00000000,即132.0.0.0/8成功
10000100 00000000 00000000 00000000,即132.0.0.0/11成功
10000100 00010011 11101100 00000000,即132.19.236.0/22失败
00000000 00000000 00000000 00000000,即0.0.0.0/0成功。可以看出,R4作为默认路由,若R1~R3均不匹配,则转向R4,交给下一个路由,重复以上过程
因此选第二个R2
4.优点
(1)有利于减少路由器之间的路由选择信息的交换,提高网络性能
(2)网络前缀长度具有灵活性
5.查找路由表使用的数据结构方法:二叉线索树
实现IP地址到MAC地址的映射
1.主机1向主机3发送(同一局域网)
传输层:对大文件分段
网络层:加目的IP和源IP
数据链路层:加源MAC(已知)和目的MAC(未知)
对于每个主机/路由器都有一个ARP高速缓存,在这里有局域网内部的IP地址与MAC地址的映射。
初始ARP高速缓存为空,使用ARP协议,首先广播一个ARP分组请求,1号主机发送数据帧。包括源IP、目的IP、源MAC、目的物理地址全1
该广播ARP请求分组到达交换机,从所有端口广播出去,3号收到后响应,返回一个单播响应分组(直接到达1号主机),包括3号主机的IP和MAC地址
同时ARP高速缓存更新数据
数据链路层加上MAC3和FCS,放到物理层传输
2.1号主机与5号主机通信(跨局域网)
只有主机和路由器有MAC地址,交换机没有
1号主机用自己的子网掩码和IP5相与,发现不在同一网段内,查询默认网关(6路由器)的MAC地址
1的下一跳为2号主机、3号主机或6的路由器端口
1广播ARP请求,企图获取MAC6
单播返回ARP响应分组,成功获得MAC6
目前从1传到6路由器
6路由器,将MAC1和MAC6改为MAC7和MAC8,进行下一次传输。源IP和目的IP保持不变。此处不考虑点对点协议,填入MAC8,此过程也使用了ARP协议
下一步,MAC改为9到5,此过程使用了ARP协议(广播ARP请求分组:源IP为IP9,目的IP为IP5,MAC9和全1)。
3.总结
检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)。
(1)主机A发到本网络上的主机B:用ARP找到B的硬件地址
(2)主机A发到另一个网络上的主机B:用ARP找到本网络上的一个路由器(网关)的硬件地址,剩下的工作由这个路由器来完成
(3)路由器发给本网络上的主机A:用ARP找到A的硬件地址
(4)路由器发给另一个网络上的主机B:用ARP找到本网络上的一个路由器(网关)的硬件地址,剩下的工作由这个路由器来完成
应用层协议,使用客户/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP。
DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用(可重复分配),支持移动用户加入网络,支持在用地址续租。
步骤:
(1)主机广播DHCP发现报文:询问谁有。
(2)DHCP服务器广播DHCP提供报文:我有。拟分配,先到先得
(3)主机广播DHCP请求报文:我要用了。
(4)DHCP服务器广播DHCP确认报文:好。正式分配
注:
(1)DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址
(2)DHCP的客户端和服务器端需要通过广播方式来进行交互
IP缺乏差错控制机制,缺乏主机和网络管理查询机制,为了提高IP数据报交付成功的机会,在网络层使用了ICMP来让主机或路由器报告差错和异常情况。
在IP数据报的数据部分,是网络层的协议。由IP直接为ICMP提供服务。
1.ICMP差错报告报文
(1)终点不可达:无法交付。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
(2)源点抑制:拥塞丢数据。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢
(3)时间超过:TTL=0。当路由器收到生存时间(TTL)为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。Traceroute
(4)参数问题:首部字段有问题。当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
(5)改变路由(重定向):择优。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
注:不应发送ICMP差错报告报文
(1)对ICMP差错报告报文不再发送ICMP差错报告报文:IP数据报首部不检查数据部分,即使有错也不发送
(2)对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文:只发第一个(若有)
(3)对具有组播(一点到多个结点)地址的数据报都不发送ICMP差错报告报文
(4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
2.ICMP询问报文
(1)回送请求和回答报文:测试目的站是否可达以及了解其相关状态。主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。(Ping)
(2)时间戳请求和回答报文:用来进行时钟同步和测量时间。请某个主机或路由器回答当前的日期和时间。
(3)掩码地址请求和回答报文
(4)路由器询问和通告报文
3.ICMP的应用
(1)分组网间探测PING
测试两台主机之间的连通性,使用了ICMP回送请求和回答报文
(2)Traceroute
用来跟踪分组经过的路由(从源点到终点的路径),使用了ICMP时间超过差错报告报文