4.2 网络层-网际协议
网络层-网际协议
IP(internet protocol)协议是TCP/IP协议族的核心协议,是因特网的网络层。IP层为因特网提供了选路和转发的功能。在IP层,IP地址用于标识接入网络的接口,进而标识一台主机。
1 IPv4协议
IPv4数据报
网络层分组被称为数据报。IPv4的数据报格式如下:
- 版本号:协议版本号,IPv4为4,IPv6则为6(当然IPv6的头部不完全是这样,但是4个比特含义一致)
- 首部长度:首部长度指的是首部占32 bit字的数目,包括任何选项。因此IPv4首部最长为60个字节
- 服务类型:服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用
- 数据报长度:以字节为单位的整个IP数据报的长度(包括首部)。
- 标识、标志、片偏移:标识用来唯一确定主机发送的每一个IP数据报。标志和片偏移用来支持IP分片,当然它们必须和标识一起使用。
- 生存时间:数据报可以经过的路由器数,这使得IP数据报早晚会在网络中消失,即要么被消失,要么由于生存时间达到而“死亡”
- 协议:标识IP层承载的上一层协议类型,比如UDP/TCP/SCTP。
- 首部校验和:首部检验和字段是根据I P首部计算的检验和码。IPv6首部中不再包含首部校验和。
- 源、目的地址:源的IP地址和目的的IP地址
- 选项:最后一个字段是任选项,是数据报中的一个可变长的可选信息。主要包括:安全和处理限制、记录路径(让每个路由器都记下它的I P地址)、时间戳(让每个路由器都记下它的I P地址和时间)、宽松的源站选路(为数据报指定一系列必须经过的I P地址)、严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
IP分片过程
分片原理
数据链路层一般要限制每次发送数据帧的最大长度。任何时候IP层接收到一份要发送的IP数据报时,查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。
分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
但是分片报文只有到了最终目的地才会被重组。重新组装由目的地的IP层来完成,其目的是使分片和重新组装过程对运输层是透明的。分片标志
IP头部包含一个由数据报原始发送者设置的标识字段,它在由该发送者发送的IP数据报中是唯一的。该值在数据报分片时被复制到每个片中。标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。不分片标志
标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片,在这种情况下,如果路由器判断需要分片就把数据报丢弃并发送一个ICMP差错报文(“需要进行分片但设置了不分片比特”)给数据报的源主机。
当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。补充
IP分片存在一个严重的缺陷:即使只丢失一片数据也要重传整个数据报。在IPv6中,分片功能被限制在源主机进行。
2 IPv4地址
在因特网中,通过接口接入网络。一般主机有一个接口,而路由器有多个接口。为了使得接口能够工作在网络层,每个接口都需要有IP地址。因此,IP实际上是和接口相关联的,而不是与主机或路由器相连的。
IPv4地址格式
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
因特网中,每台主机或路由器的接口都有一个IP地址。但是每个接口的IP地址不能随意选择,每个接口的IP地址的组成部分需要由其连接的子网来决定。
分类编址
便于寻址以及层次化构造网络,每个IP地址包括两个标识码,即网络ID和主机ID(网络号和主机号)。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,
| 网络类别 | 最大网络数 | 第一个可用的网络号 | 最后一个可用的网络号 | 每个网络中的最大主机数 |
|---|---|---|---|---|
| A | 126(2^7-2) | 1. | 127. | 16777214 |
| B | 16384(2^14) | 128.0. | 191.255. | 65534 |
| C | 2097152(2^21) | 192.0.0. | 223.255.255. | 254 |
其地址布局如下图:

- A类IP地址
网络地址的最高位必须是“0”。网络号长度为8位,主机号长度为24位。A类IP地址 地址范围1.0.0.0到127.255.255.255(二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111111)。A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。 - B类IP地址
网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。B类IP地址地址范围128.0.0.0-191.255.255.255(二进制表示为:10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111111)。B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台 - C类IP地址
网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。C类IP地址范围192.0.0.0-223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台 - D类IP地址
D类地址被IP用作多播。多播为IP提供了向过个目地转发数据的能力。D类地址的28bit均用作多播组号而不再表示其他。多播组地址包括为1110的最高4bit和多播组号。它们通常可表示为点分十进制数,范围从224.0.0.0到239.255.255.255。能够接收发往一个特定多播组地址数据的主机集合称为主机组(hostgroup)。一个主机组可跨越多个网络。主机组中成员可随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。 - E类IP地址
IP地址中凡是以“llll0”开头的E类IP地址都保留用于将来和实验使用。 - 特殊的网址
每一个主机号都为0的地址(“0.0.0.0”)对应于当前主机;
每一个主机号都为1的IP地址(“184.289.255.255”)是当前子网的广播地址;网络ID的第一个6位组也不能全置为“0”,全“0”表示本地网络。127.X.X.X是保留地址,用做循环测试用的。
CIDR编址
当前采用的地址分配策略为CIDR(Classless Inter-Domain Routing)无类别域间选路。CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
在这种编址方案中IP地址被分为网络号和主机号两部分,并且具有形式a.b.c.d/x,其中x指示了第一部分中的比特数。前x比特被称为该地址的前缀。该组织内部的设备得IP都将具有该前缀,因而对于外部的路由器,它只需要一条指向该前缀的路由即可。当数据报进入该组织内部网络后,内部的路由器将根据32/x比特的信息转发数据报。
地址分配管理
- 地址管理和获取
用户需要从ISP获取一个IP地址或地址块,而ISP则向它的上一级ISP获取地址块,最终所有的地址都来自于ICANN,因特网名字与号码分配机构。
- 获取主机地址
将IP分配给接口有两种方式,手动配置或动态配置。动态配置是通过DHCP,即动态主机配置协议实现的。可以用于获取IP信息,获取子网掩码,第一跳路由器,DNS服务器地址等等信息。
- 私有地址
以下列出留用的内部私有地址
A类 10.0.0.0–10.255.255.255
B类 172.16.0.0–172.31.255.255
C类 192.168.0.0–192.168.255.255
3 NAT网络地址转换
作用
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。NAT解决了lP地址不足的问题,能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
原理
NAT将自动修改IP报文的源IP地址和目的IP地址,IP地址校验则在NAT处理过程中自动完成。同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。在内部都使用了一张NAT转换表,它记录了地址转换的相关信息。
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat和端口多路复用OverLoad。
静态转换:是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换:是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用(Port address Translation,PAT):是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。
UPnP通用即插即用
UPnP(Universal Plug and Play)指的是通用即插即用,它可以用来支持NAT穿越。它要求主机和NAT是UPnP兼容的。使用它时,在一台主机上运行的应用程序能够请求一个NAT映射,该映射位于(私有IP地址,私有端口号)和(公共IP地址,公共端口号)之间。如果NAT接受了这个请求,并且声称该映射,则来自外部的节点就能够发起到(公共IP地址,公共端口号)的TCP连接。
4 ICMP协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。ICMP属于网络层协议,它提供一致易懂的出错报告信息,但在IP协议之上,也应该属于应用层协议,但是协议服务于网络层。
ICMP报文

ICMP报文可以分为两大类:ICMP查询报文和ICMP差错报文。
对于ICMP差错报文,ICMP报文总是会包含引起该ICMP报文首次产生的IP数据报的首部和前8字节的内容
ICMP查询报文被用来查询网络相关的一些信息,比如回显应答和请求(ping),路由器请求和通告,时间戳等。
5 IPv6协议
IPv4存在问题
- 地址空间的局限性: IP地址空间的危机由来已久,并正是升级的主要动力。
- 性能:尽管IP表现得不错,一些源自20年甚至更早以前的设计还能够进一步改进。
- 安全性:安全性一直被认为是由网络层以上的层负责,但它现在已经成为IP的下一个版本可以发挥作用的地方。
- 自动配置:对于IPv4节点的配置一直比较复杂,而网络管理员与用户则更喜欢“即插即用”,即:将计算机插在网络上然后就可以开始使用。IP主机移动性的增强也要求当主机在不同网络间移动和使用不同的网络接入点时能提供更好的配置支持。
IPv6的变化
- 扩展地址。地址扩展到了128比特,地址空间增大了2的96次方倍。
- 简化头格式。字段只有8个,加快报文转发,提高了吞吐量。
- 增强对于扩展和选项的支持。可以支持更多的服务,也简化了报文转发的处理。
- 流标记。路由器需要对流进行跟踪并保持一定的信息,这些信息在流中的每个包中都是不变的。这种方法使路由器可以对流中的包进行高效处理。
- 身份验证和保密。身份认证和隐私权是IPV6的关键特性。
IPv6数据报
IPv6头部如下图所示:

- 版本。长度为4位,对于IPv6,该字段必须为6。
- 类别。长度为8位,指明为该包提供了某种“区分服务”。该字段的定义独立于IPv6,目前尚未在任何RFC中定义。该字段的默认值是全0。
- 流标签。长度为20位,用于标识属于同一业务流的包。一个节点可以同时作为多个业务流的发送源。流标签和源节点地址唯一标识了一个业务流。
- 净荷长度。长度为16位,其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数。这意味着在计算净荷长度时包含了IPv6扩展头的长度。
- 下一个头。这个字段指出了IPv6头后所跟的头字段中的协议类型。与IPv4协议字段类似,下一个头字段可以用来指出高层是TCP还是UDP,但它也可以用来指明IPv6扩展头的存在。
- 跳极限。长度为8位。每当一个节点对包进行一次转发之后,这个字段就会被减1。如果该字段达到0,这个包就将被丢弃。
- 源IP地址。长度为128位,指出了IPv6包的发送方地址。
- 目的IP地址。长度为128位,指出了IPv6包的接收方地址。这个地址可以是一个单播、多播或任意点播地址。如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间节点的地址而不必是最终地址。
与IPv4数据报相比的变化
- 包头长度不存在了因为IPv6的头是固定长度。
- 服务类型字段变成了流类别。
- 数据报长度变成了净荷长度。IPv6的净荷长度中包含了扩展头,而IPv4数据报长度字段中则指明包含包头在内的整个数据报的长度。因而在IPv4中,路由器需要将数据报长度减去包头长度来计算包的净荷长度,而在IPv6中则无须这种计算。
- 数据报ID,标识和标志三个字段被删除了,因为它们在IPv4中用于数据报分片,但是IPv6中分片通过分片扩展头来实现而且必须在源设备完成。
- 生存字段变成了跳极限,使用方式类似
- 协议字段变成了下一个头。v4中协议字段用来指示高层的协议类别,但是这里的下一个头可以用来指示扩展头或者高层协议头。
- 头部校验和被删除,因为由于如TCP和UDP等高层协议均计算头的校验和,IPv4头校验显得有些多余,因此这个字段在IPv6中已消失。对于那些真的需要对内容进行身份验证的应用, IPv6中提供了身份验证头。
- 源目地址被扩展到了128比特。
6 ipv6地址
地址表达方式
IPv6地址的基本表达方式是X:X:X:X:X:X:X:X,其中X是一个4位十六进制整数(16位)。每一个数字包含4位,每个整数包含4个数字,每个地址包括8个整数,共计128位(4×4×8=128)。下面是一些合法的IPv6地址:
- CDCD:910A:2222:5498:8475:1111:3900:2020
- 1030:0:0:0:C9B4:FF12:48AA:1A2B
- 2000:0:0:0:0:0:0:1
在IPv4和IPv6的混合环境中。IPv6地址中的最低32位可以用于表示IPv4地址,该地址可以按照一种混合方式表达,即X:X:X:X:X:X:d.d.d.d,其中X表示一个16位整数,而d表示一个8位十进制整数。例如,地址
- 0:0:0:0:0:0:10.0.0.1
由于IPv6地址被分成两个部分—子网前缀和接口标识符,因此人们期待一个IP节点地址可以按照类似CIDR地址的方式被表示为一个携带额外数值的地址,其中额外数值指出了地址中有多少位是掩码。即,IPv6节点地址中指出了前缀长度,该长度与IPv6地址间以斜杠区分,例如:
- 1030:0:0:0:C9B4:FF12:48AA:1A2B/60
这个地址中用于选路的前缀长度为60位。
IPv6128比特地址空间的划分如下图:
寻址模型
IPv6寻址模型与IPv4很相似。每个单播地址标识一个单独的网络接口。IP地址被指定给网络接口而不是设备,因此一个拥有多个网络接口的设备可以具备多个IPv6地址,其中任何一个IPv6地址都可以代表该设备。尽管一个网络接口能与多个单播地址相关联,但一个单播地址只能与一个网络接口相关联。每个网络接口必须至少具备一个单播地址。
地址类型
IPv6地址有三种类型:单播、多播和任意点播。广播地址已不再有效。RFC 2373中定义了三种IPv6地址类型:
- 单播:一个单接口的标识符。送往一个单播地址的包将被传送至该地址标识的接口上。

- 泛播:一组接口(一般属于不同节点)的标识符。送往一个泛播地址的包将被传送至该地址标识的接口之一(根据选路协议对于距离的计算方法选择“最近”的一个)。

- 多播:一组接口(一般属于不同节点)的标识符。送往一个多播地址的包将被传送至有该地址标识的所有接口上。
7 常见地址说明
MAC地址
IPV4地址
IPV6地址
广播地址
主机位都为1,是广播地址。
网络地址(网络号)、主机地址(主机号)、子网掩码
将IP地址分为网络地址与主机地址。通过子网掩码,就可以判断两个IP在不在一个局域网内部。子网掩码可以看出有多少位是网络号,有多少位是主机号。
网关接口
网间连接器、协议转换器。实现局域网与广域网的互联。










