计算机网络 - 网络层(下)
网络层(IP协议族)的内容相较于其他层显得有些多而繁杂,其中一个原因就是互联网的发展迭代实在太快,更强大更合适的协议和技术在不断的涌现。我们了解到的一些内容可能在不久的将来就会成为历史,而接下来将要介绍的IPv6,就是这“后浪”中的一员。
IPv6
互联网经过几十年的飞速发展,到 2011 年 2 月,IPv4 的 32 位地址已经耗尽。ISP 已经不能再申请到新的 IP 地址块了。
解决 IP 地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。
IPv6引进的主要变化
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。
- 灵活的首部格式。 IPv6 定义了许多可选的扩展首部。
- 改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。原来的 IPv4 首部是 4 字节对齐。
- 支持即插即用(即自动配置)。因此 IPv6 不需要使用 DHCP。
IPv6数据报格式
IPv6数据报由两大部分组成:
- 基本首部 (base header)
- 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
IPv6数据报的基本首部
由上图可以看出,IPv6对首部的部分字段进行了更改:
红色部分表示IPv6取消的部分
- 取消了首部长度字段(IHL),因为首部长度是固定的 40 字节;
- 取消了标识字段(Identification);
- 取消了首部检验和字段(Header Checksum);
- 取消了选项字段(Opitions),而用扩展首部来实现选项功能。
蓝色部分表示两种协议“改变称呼”的部分
- 服务类型(Type of Serveice)字段改为通信量类(Traffic Class)字段,用于区别不同IPv6数据报类型;
- 取消总长度字段(Total Length),改用了有效载荷长度(Payload Length)字段;
- 协议字段(Protocol)改为下一个首部字段(Next Header);
- TTL字段改为跳数限制字段(Hop Limit);
绿色部分表示IPv6新增的部分
- 新增20位长度的流标号(Flow Label)。 “流”是互联网络上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
黄色部分是保留的部分
扩展首部
IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
这样就大大提高了路由器的处理效率。
冒号十六进制记法
在 IPv6 中,每个地址占 128 位,为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex)。
例如:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。
同时,一连串连续的零可以为一对冒号所取代,即 零压缩 (zero compression)
FF05:0:0:0:0:0:0:B3可压缩为:
FF05::B3
需要注意的是,在任一地址中只能使用一次零压缩
IP多播
多播(Multicast),从字面上理解就是一对多的通信 -- 一个源点发送到许多个终点。
下面这张图有助于理解不同通信形式的特点:
在互联网上进行多播就叫做 IP 多播。互联网范围的多播要靠路由器来实现。能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。
多播IP地址
IP 多播所传送的分组需要使用多播 IP 地址。
在多播数据报的目的地址写入的是多播组的标识符,即IP地址中的 D 类地址。
网际组管理协议 IGMP
为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol) (还记得五层协议里这个与ICMP肩并肩的兄弟吗?)
IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
IGMP的工作阶段
1、加入多播组
- 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。
- 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。
2、探寻组成员变化情况
- 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
虚拟专用网 VPN
VPN这三个字母近年来承受了太多它本不该承受的压力。它真的有那么“神秘”吗?我们不如先从它的名字“虚拟专用网”说起。
首先,什么是“专用网”?
简而言之,专用网就是仅在内部使用,不与外界通信的网络。
为了和全球范围的互联网相区分开来,它们使用一种“专用地址 (private address)”,专用地址只能用作本地地址而不能用作全球地址。使用这种专用地址的互联网络就是“专用网”。
并且,因为各个本地机构间是独立的,对于不同的机构,这些专用地址是可以重用的,故专用IP地址也叫做可重用地址 (reusable address)。
那么为什么说是“虚拟”专用网呢?
因为虚拟专用网利用公用的互联网作为本机构各专用网之间的通信载体,而并没有真正使用通信专线。
故VPN只是在效果上和真正的专用网一样,所以叫“虚拟专用网”。
虚拟专用网的实现
(咳咳,这一部分可能没有你想象的那么一颗赛艇)
如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。
这种通信技术也称之为“隧道技术”。因为对外界来说,专用网内部之间的通信,就像在一个隧道中一样,对外界是隔绝的。
远程接入 VPN
为了使得专用网更“灵活”,我们有了远程接入 VPN (remote access VPN)技术。
如果在外地工作的员工拨号接入互联网,则驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道。
建立连接后,外地员工与公司通信的内容就是保密的,员工们便感到好像就是使用公司内部的本地网络。
网络地址转换 NAT
如果你打开网页查询本机的IP,有时候会发现:查询到的结果和自己在本地ipconfig的结果不一样。
一台主机还能有两个IP地址吗?
对,的确有“两个地址”,因为当你在局域网中时,使用的往往是本地IP,而本地地址是不能够访问外部网页的,故往往需要一个NAT服务器使得你“对外”的地址为公网IP。
因为本地IP可重用,所以通过在局域网内使用本地IP,所有在局域网内的IP都对外显示为一个公网IP,可以大大减轻对公网IP的占用。
那么问题来了。都对外显示成为一个IP了(都一个名字了),那要怎么通信啊。
这就要提到NAT服务器的工作原理了:
当内部主机想要同外部通信时,NAT路由器将会数据报的源地址IPA转换成全球地址IPG,并把转换结果记录到NAT地址转换表中,目的地址IPB保持不变,然后发送到互联网。
NAT路由器收到主机B发回的数据报时,知道数据报中的源地址是IPB而目的地址是IPG。
根据NAT转换表,NAT路由器将目的地址IPG转换为IPA,转发给最终的内部主机A。