一看就懂的IP协议!!!
Posted 马走日mazouri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一看就懂的IP协议!!!相关的知识,希望对你有一定的参考价值。
IP协议
概述
网络层在五层协议中位于数据链路层和运输层的中间,主要功能为实现两个端系统之间透明的数据传输,即将分组从一个主机移动到另外一个主机。
由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。
IPv4
互联网上的每台主机(或路由器)的每个接口分配一个在全世界唯一的 IP 地址。
现如今有两个版本的IP地址——IPv4和IPvV6,先讨论如今还在广泛你使用的IPv4地址。
编址方式
IPv4地址的编址方式经历了如下三个历史阶段:
分类编址
所谓分类编址就是将IP地址划分为若干个固定类,每一类地址都由两个固定长度字段组成
- 网络号(net-id):它标志主机(或路由器)所连接到的网络,一个网络号在整个互联网范围内必须是唯一的。
- 主机号(host-id):它标志该主机(或路由器),一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。
- A类地址:网络号字段占1个字节,只有7位可以使用,但可指派的网络号是126个(即27-2)。主机号字段占3个字节,每一个A类网络中的最大主机数是224-2。4个特殊情况如下:
- IP地址中的全0表示"这个(this)"。网络号字段为全0的IP地址是个保留地址,意思是“本网络”;
- 网络号为127(01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址作为环回地址(例如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送给任何网络。
- 全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址,例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址为5.0.0.0;
- 全1的主机号表示该网络上的所有主机。
- B类地址:网络号字段有2个字节,但前面两位(10)已经固定,只剩下14位可以进行分配。因为网络号字段后面的14位无论怎样取值都不可能出现整个两字节的网络号字段全0或全1,因此不存在网络总数减2的问题,同时根据2002年9月发表的RFC 3330文档,128.0网络号已经可以分配了。因此B类地址可指派的网络数为214每一个网络的最大主机数为216-2。
- C类地址:网络号有3个字节,最前面的3位是(110),还有21位可以进行分配,因此C类地址可指派的网络总数是221,每一个网络的最大主机数是28-2。
划分子网
今天看来,分类的IP地址不太合理
- IP地址空间的利用率有时很低,每一个A类地址网络可连接的主机数超过1000万,而每一个B类地址网络也超过了6万。有的单位申请一个B类网络地址但连接的主机并不多,这样那些没用到的IP地址就浪费了。
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 两级IP地址不够灵活。有时情况紧急,一个单位需要在新的地方马上开通一个新的网络。但是在在申请到一个新的IP地址之前,新增加的网络是不可能连接到互联网上工作的。我们希望可以是一个单位能随时灵活地增加单位的网络,而不必事先到互联网机构去申请新的网络号。
为了解决上面的问题,从1985年起在IP地址中又增加了一个"子网号字段",使两级IP地址变成为三级IP地址,这种做法叫做划分子网(subnetting),或子网寻址或子网路由选择。
32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号,其中子网掩码使用连续的比特1来对应网络号和子网号,使用连续的比特0来对应主机号。将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址。
无分类编址
划分子网在一定程度上缓解了因特网在发展中的遇到的困难,但是数量巨大的C类网络因为其地址空间太小并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。为此,因特网工程任务组IETF又提出了采用无分类编址的方法来解决IP地址紧张的问题,同时还专门成立IPv6工作组负责研究新版本IP以彻底解决IP地址耗尽问题。
1993年,IETF发布了无分类域间路由选择CIDR(Class Inter-Domain Routing)的RFC文档,其中CIDR消除了传统的A类,B类和C类网络以及划分子网的概念。
CIDR使用"斜线记法",即在IPv4地址后面加上斜线"/",在斜线后面写上网络前缀所占的比特数量。
CIDR实际上是将网络前缀都相同的连续的IP地址组成一个"CIDR地址块",我们只要知道CIDR地址快中的任何一个地址,就可以知道该地址块的全部细节。如下例
路由聚合
路由聚合又称为构造超网,举例说明:
如图所示,路由器R1和五个网络以及路由器R2直接相连,路由器R1和R2互为相邻路由器,它们周期性地通告自己所知道的路由信息给对方。
如果R1将自己直连的这五个网络的路有记录都通告给,则R2的路由表会增加五条路由记录。而我们可有通过查找共同前缀的方式将五条路由记录聚合成1条,也就是找出5个目的网络地址的共同前缀。这五个目的网络地址的左起前两个字节都是相同的,从第三个字节开始不同,因此只需将第三个字节转换为二进制形式,这样就可以很容易找出5个目的网络地址的共同前缀,共22个比特。
网络前缀越长,地址块越小,路由越充分;若路由器查表转发分组时发现有多个路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。
IP地址和MAC地址
从层次的角度来看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址为逻辑地址是因为IP地址是用软件实现的)。
在发送数据时,数据从高层下到底层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。
连接在通信链路上的设备(主机或路由器)在收到MAC帧时,根据MAC帧首部中的硬件地址决定收下或丢弃。只有在剥去MAC帧中的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
尽管互连在一起的网络的 MAC 地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信。
地址解析协议ARP
在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器(主机或路由器)的IP地址,需要找出相对应的硬件地址,而地址解析协议ARP就是来解决整个问题的。
我们知道网络层使用的是IP地址,但在实际网络的链路上传送数据帧时,最终还是必须使用该网络的硬件地址。但IP地址和下面的网络的硬件地址之间由于格式不同而不存在简单的映射关系,此外,在一个网络上可能会有新的主机加入进来,更新网络适配器也会使主机的硬件地址改变。ARP解决的方法使在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新。同时ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
步骤
当主机A要向本局域网上的某台主机B发送IP数据报时,就现在其ARP高速缓存中查看有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。
也有可能高速缓存中并没有主机B的信息,在这种情况下,主机A就自动运行ARP,然后按照下面的步骤找出主机B的硬件地址。
- ARP进程在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容时:“我的IP地址是xxx,硬件地址是xxx,我想知道IP地址为xxx的主机的硬件地址。”
- 在本局域网上的所有主机运行的ARP进程都受到ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址。由于其余的所有主机的IP地址斗鱼ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。其中ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
- 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。
当主机A向B发送数据报时,很可能以后不久主机B还要向A发送数据报,因而主机B也可能向A发送ARP请求分组。为了减少网络上的通信量,主机A在发送其ARP请求分组时,就把自己的IP地址到硬件地址的映射写入ARP请求分组。当主机B收到A的ARP请求分组时,就把主机A的这一地址映射写入主机B自己的ARP高速缓存中。以后主机B向A发送数据报就很方便。
IP数据报的发送和转发过程
为了将重点放在TCP/IP协议栈的网际层发送和转发IP数据报的过程中,在下面的举例中,我们忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程以及以太网交换机自学习和转发帧的过程。
再上图所示的小型互联网中,路由器的接口0直连了一个交换式以太网,接口1也直连了一个交换式以太网,分别给网络和路由器分配网络地址和子网掩码。
对于同一个网络中的主机可以直接通信,这叫做直接交付;不同网络中的主机之间的通信,需要通过路由器来中转,这叫做间接交付。
假如主机C要给主机F发送IP数据报,主机C将自己的IP地址和子网掩码相与,就可以得到主机C所在网络的网络地址,既然主机C要给主机C发送IP数据报,那主机C肯定知道主机F的IP地址,主机C将主机F的IP地址与自己的子网掩码相与,就可以得到目的网络地址,该网络地址与主机C的网络地址不相同,因此主机C就知道了主机F与自己不在同一个网络,它们之间的通信属于间接交付。主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F,
实际上,用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给指定本网络中的一个路由器,由该路由器进行转发,所指定的路由器也被称为默认网关。在上面这个例子中,我们可以将该路由器接口0的IP地址指定给该接口所直连网络中的各个主机作为默认网关。这样当本网络中的主机要和其他网络中的主机进行通信时,会将IP数据报传输给默认网关,由默认网关帮主机将IP数据报转发出去。
路由器收到IP数据报后
- 会首先检查IP数据报的首部是否出错,若出错,则直接丢弃该IP数据报并告诉源主机,若没有出错,则进行转发;
- 然后根据IP数据报的目的地址在路由表中查找匹配的条目:若找到匹配的条目,则转发给条目中指示的下一条,若找不到,则丢弃该IP数据报并通告源主机。
路由器取出IP数据报首部各地址字段的值,源地址字段的值为主机A的IP地址,目的字段为主机B的IP地址,接下来,路由器就要对该IP数据报进行查表转发。
当我们给路由器的接口配置IP地址和子网掩码时,路由器就知道了自己的该接口与哪个网络是直连的。如上图路由表,同时路由器中还可以有其他的路由条目,这可以是用户或网络管理员手动配置的静态路由,也可以是路由器使用路由协议自动获取到的动态路由。接下来,路由器根据IP数据报的目的地址在自己的路由表中查找匹配的路由条目,逐条检查路由条目,将目的地址与路由条目中的地址掩码相与得到目的网络地址。找到匹配的后按照它的下一跳指示,也就是从接口1转发该IP数据报,这样主机D就可以收到主机A转发过来的IP数据报。
下图是一个广播IP数据报
IPV4数据报格式
如上图所示,一个IP数据报由首部和数据两部分构成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。下面介绍首部各字段的意义。
IP数据报首部的固定部分中的各字段
- 版本:占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号是4(即IPv4)。
- 首部长度:占4位,可表示的最大十进制数值是15。首部长度字段所表示的单位是32位字(1个32位字长位4字节)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101).而当首部长度为最大值1111时(即二进制的15),就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须使用最后的填充字段加以填充。
- 区分服务:占8位,这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务,利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下不使用该字段。
- 总长度:总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据包的最大长度为216-1=65535。然而实际上传送这样长的数据包在现实中是极少遇见的。
- 标识:占16位,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将该值赋给标识字段。
- 标志:占3位,目前为止只有两位有意义:
- 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面"还有分片"的数据报。MF=0表示这已经是若干数据报片中的最后一个。
- 标志字段中的中间一位记为DF(Dont’t Fragment),意思是不能分片。只有当DF = 0才允许分片。
- 片偏移:占13位。片偏移指出;较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,也就是说,每个分片的长度一定是8字节的整数倍。
分片过程如下:假设有这样一个IP数据报,它有20字节的固定首部和3800字节的数据载荷两部分构成。假设使用以太网传送该IP数据报,以太网的最大传送单元MTU为1500字节,也就是以太网的数据载荷部分最大为1500字节,无法封装3820字节的IP数据报。因此需要将该IP数据报分片成几个更小的IP数据报,每个长度不能大于1500字节,然后再将每个分片IP数据报封装成一个以太网帧继续传输。如上图,我们可以将原IP数据报的数据载荷分成三个更小的分片。第一个分片从0号字节到1399字节,共1400个字节,第二个分片从1400号字节到2799号字节,共1400个字节,第三个分片从2800字节到3799号字节,共1000个字节。分片结束后,给每个分片重新添加一个首部(首部相关字段中的数据如表),使之称为IP数据报。 - 生存时间TTL:占8比特,最初以秒为单位,最大生存周期为255秒;现在以"跳数"为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0则转发,否则就丢弃。
- 协议:占8位,协议字段主持此此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。
- 首部校验和:占16位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法,称为因特网校验和。IP数据报每经过一个路由器,路由器都要重新计算首部校验和,因为某些字段(生存时间,标志,片偏移等)的取值可能发生变化。由于IP层本身不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。
- 可变部分:是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
IPV6
现在使用的IP(即IPv4)是在20世纪70年代末期设计的。互联网经过几十年的飞速发展,到2011年2月,IPv4的地址已经耗尽。各地区互联网地址分配机构也相继宣布地址耗尽,我国在 2014 – 2015 年也逐步停止了向新用户和应用分配 IPv4 地址。解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。
IPv6所引进的主要变化如下:
- 更大的地址空间。 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。可以划分为更多的层次。
- 灵活的首部格式。定义了许多可选的扩展首部。
- 改进的选项。允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- 允许协议继续扩充。更好地适应新的应用。
- 支持即插即用(即自动配置)。不需要使用 DHCP。
- 支持资源的预分配。支持实时视像等要求保证一定的带宽和时延的应用。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。
数据报格式
IPv6数据报由两大部分组成:基本首部 (base header)和有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
- 版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
- 通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
- 流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
- 下一个首部(next header)—— 8 位。相当于 IPv4 的协议字段或可选字段。
- 跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃。
地址
一般来讲,一个IPv6数据报的目的地址可以是以下三种基本类型:
- 单播 (unicast):传统的点对点通信。
- 多播 (multicast):一点对多点的通信。
- 任播 (anycast):IPv6 增加的一种类型。任播的终点是一组计算机,但数据报在交付时只交付其中的一个。通常是按照路由算法得出的距离最近的一个。
在 IPv6 中,每个地址占 128 位,地址空间大于 3.4 x1038 。使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex):16 位的值用十六进制值表示,各值之间用冒号分隔。
零压缩 (zero compression):一串连续的零可以用一对冒号取代。如上图。注意:在任一地址中,只能使用一次零压缩。
CIDR 的斜线表示法仍然可用,但取消了子网掩码。
分类
路由选择协议
路由选择协议属于网络层控制层面的内容,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。细节比较多,感兴趣的可以在本篇文章的参考部分查阅资料。
参考
[1]James F. Kurose / Keith W. Ross.计算机网络(原书第7版) 自顶向下方法.机械工业出版社,2018.
[2] 谢希仁. 计算机网络(第7版).电子工业出版社,2017.
[2] https://space.bilibili.com/360996402
以上是关于一看就懂的IP协议!!!的主要内容,如果未能解决你的问题,请参考以下文章