热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络层(2.网际协议IP)

目录一、虚拟互联网络二、分类的IP地址1.IP地址及其表示方法2.常用的三种类别的IP地址A类地址:B类地址:C类地址:三类对比:IP地址的重要特点:三、IP地址与硬件地址四、地址

目录

一、虚拟互联网络

二、分类的IP地址

1. IP地址及其表示方法

2. 常用的三种类别的IP地址

A类地址:

B类地址:

C类地址:

三类对比:

IP地址的重要特点:

三、IP地址与硬件地址

四、地址解析协议ARP

五、IP数据报的格式

1. IP数据报首部固定部分中各字段

2. IP数据报首部的可变部分

六、IP层转发分组的流程

特定主机路由:

默认路由:

路由器分组转发算法:

        网际协议IP是TCP/IP协议最重要的两个协议之一,也是最重要的互联网标准协议之一。

与 IP 协议配套的还有三个协议:

        地址解析协议 ARP        网际控制报文协议 ICMP           网际组管理协议IGMP                                                        《网络层(2.网际协议IP)》

一、虚拟互联网络

        若是把全世界所有网络互连起来,想要通信就要解决很多问题,如:不同的寻址方案、不同的最大分组长度、不同的网络接入机制等,因此没有一种单一的网络能够适应所有用户的需求

将网络连接起来要使用一些中间设备:

        物理层中继系统:转发器
        数据链路层中继系统:网桥或桥接器
        网络层中继系统:路由器
        网桥和路由器的混合物:桥路器
        网络层以上的中继系统:网关。 

        当中间设备是转发器或者网桥时,它们仅仅是将网络扩大了,从网络层角度看,这仍然是一个网络。

        网关比较复杂,使用的少。

        现在讨论网络互连时,都是指用路由器进行网络互连和路由选择。

《网络层(2.网际协议IP)》

        有许多网络参与互联,由于它们都使用相同的网络协议IP,因此可以把他们看成一个虚拟互联网络

        所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络

         使用IP网的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。

二、分类的IP地址

1. IP地址及其表示方法

        整个互联网就是一个单一的、抽象的网络。IP地址就是给互联网上每一台主机或路由都分配一个在全世界范围内都是唯一的32位标识符

        IP地址现在由互联网名字和数字分配机构ICANN进行分配。

IP地址的编址方式经历了三个阶段:

(1)分类的IP地址最基本的编址方式,在1981年通过了相应的标准协议。

(2)子网的划分对最基本的编址方式的改进,在1985年通过标准。

(3)超网。比较新的无分类编址方式

现在只讨论最基本的编址方式。

        分类的IP地址就是将IP地址划分为若干固定类。

        每一类地址都是由两个固定长度的字段组成。第一个字段是网络号 net-id,他标志主机或路由器连接到的网络;第二个字段是主机号 host-id

        网络号在整个互联网范围内必须是唯一的

        主机号在它前面网络号指定的网络范围内必须是唯一的

        因此,一个IP地址在整个互联网范围内都是唯一的

结构如下:

        《网络层(2.网际协议IP)》

可以记为:

        IP 地址 ::= { <网络号>, <主机号>}   ( ::= 代表 “定义为” )

各类IP地址的网络号字段和主机号字段:

《网络层(2.网际协议IP)》

        可见,IP地址不仅表明一台主机的类型,还指明了主机连接到的网络。

        为了提高可读性,再32位的IP地址中每八位插入一个点,并且等效成十进制数字,称为点分十进制

 例如:10000000 00001011 00000011 00011111 可以写为128.11.3.31

2. 常用的三种类别的IP地址

        IP地址一共占4个字节,32位,也就是一共有2^32个地址。

A类地址:

网络号:

        网络号字段占一个字节,共7位可用(因为第一位要表示是A类),可以指派的网络号是126个,即2^7-2,减 2 的原因:

        第一,IP地址中全0,即0000000是一个保留地址,意思是“本网络”。

        第二,网络号位127,即0111111保留为本地软件的环回测试本主机的进程之间的通信之用。

主机号:

        主机号占3个字节,也就是24位,一个A类网络号最大主机数为2^24 &#8211; 2,即16777214 。减二的原因:

        第一,全 0 的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址(例如,一主机的IP地址为5.6.7.8,则该主机所在的网络地址就是5.0.0.0) 。

        第二,全 1 表示所有的,全1的主机号字段表示该网络上所有的主机

        若主机发送一个目的地址为“环回地址”的IP数据报,则本主机中的协议软件就直接处理数据报中的数据,而不会把他发送到任何网络。目的地址为环回地址的IP地址不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。

        A类有 2^7 2^24 个地址,占总的IP地址空间的50%

B类地址:

网络号:

        B类地址网络号字段有两个字节,因为前两位已经固定(1 0),只剩下14位可分配

        因为14位无论怎么取值也不能使整个网络号字段全为0或1,因此不存在网络总数减2。

        但是128.0.0.0是不可以指派的,可以指派的最小B类地址为128.1.0.0

        因此B类地址可以指派的网络总数为 2^14-1,即16384

主机号:

        B类地址的每一个网络上最大主机数是 2^16 &#8211; 2,减2是除去全为0和全为1.原因跟A类一样。

        B类有 2^14 2^16 ,占总的IP地址空间的25%。

C类地址:

网络号:

        C类地址有3个字节的网络号,最前面三位(1 1 0),因此还有21位可分配

        因为21位无论怎么取值也不能使整个网络号字段全为0或1,因此不存在网络总数减2。

        192.0.0.0也是不能指派的,可以指派的最小C类地址为192.1.0.0

        C类地址可以指派的网络总数为 2^21-1,即2097151.

主机号:

        C类地址的每一个网络上最大主机数为 2^8 &#8211; 2,即254

        C类有 2^21 2^8,占总的IP地址空间的12.5% 。

三类对比:

《网络层(2.网际协议IP)》

 《网络层(2.网际协议IP)》

IP地址的重要特点:

(1)IP地址是一种分等级的地址结构。有两个好处:

        ①IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。

        ②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。 

(2)实际上IP地址是标志一个主机或路由器和一条链路的接口

        当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机
        由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址

(3)用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id

(4)所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的

《网络层(2.网际协议IP)》

三、IP地址与硬件地址

从层次的角度看:

        硬件地址(或物理地址)是数据链路层和物理层使用的地址

        IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)

《网络层(2.网际协议IP)》

《网络层(2.网际协议IP)》

 《网络层(2.网际协议IP)》

 从上图可以看出,在网络层IP源地址和目的地址始终没有变化,而物理地址MAC却一直在变:

《网络层(2.网际协议IP)》

(1)在IP抽象层的互联网只能看到IP数据报

(2)虽然在IP数据报首部有源地址,但是路由器只根据目的站的IP地址网络号进行选择

(3)在局域网的链路层,只能看见MAC帧

(4)IP层抽象的互联网屏蔽了下层这些很复杂的细节。只要在网络层讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

四、地址解析协议ARP

        已经知道以一个机器的IP地址,需要找出对应的硬件地址。这就是地址解析协议ARP干的事情。

地址解析协议ARP要点:

        网络层的IP地址和硬件地址格式不同不具有映射关系,而且在一个网络上可能会有新主机加入,撤走主机或者更换网络适配器(会使得硬件地址改变),更加无法映射。

        解决方法就是在主机ARP高速缓存中放一个从IP地址到硬件地址的映射表,这个表还要经常动态更新

映射表如何添加数据

        ARP对保存在高速缓存中的每一个映射地址都设有生存时间,超过生存时间就删除。

        当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址:
        (1)如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
        (2)如没有:

                ① ARP 进程在本局域网上广播发送一个 ARP 请求分组

                ②本局域网所有主机上运行的ARP都收到此ARP请求分组。

                ③除A、B以外主机检查请求分组中的地址,与自己不一样不理睬

                ④B主机检查地址一致,向A发送ARP响应分组,并把A的IP和硬件地址记录。

                ⑤A主机收到 ARP 响应分组后,将得到的IP地址到硬件地址的映射写入ARP高速缓存

《网络层(2.网际协议IP)》

ARP请求分组:

        发送方IP地址 / 发送方硬件地址 / 目标方硬件地址(未知填0) / 目标方IP地址

        该分组为本地广播,注意路由器不转发到互联网。

ARP响应分组:

        发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址

        该分组是单播,从一个源地址直接发送到一个目的地址

注意:

        ARP解决的是同一个局域网上的主机或路由器的IP地址和硬件地址映射问题。

若是在不同局域网,那么:

        ①通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址

        ②然后把分组发送给这个路由器

        ③让这个路由器把分组转发给下一个网络

        ④剩下的工作就由下一个网络来做

从 IP 地址到硬件地址的解析是自动进行的主机的用户对这种地址解析过程是不知道的

四种典型情况:

《网络层(2.网际协议IP)》

(1)发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
(2)发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
(3)发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
(4)发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

五、IP数据报的格式

        IP数据报由首部和数据两部分组成。

        首部的前一部分是固定长度,共20字节,是所有IP数据报必须有的。固定部分后面是可选字段,长度可变。

《网络层(2.网际协议IP)》

1. IP数据报首部固定部分中各字段

(1)版本

        占4位指IP协议的版本

        目前版本号为4,即IPv4.

(2)首部长度

        占4位,用来表示首部的长度。

        可表示最大的数十进制为151个单位表示32位,即4个字节

        因为仅首部固定部分就已经20字节,所以最小为5首部最大为15*4=60字节

        首部长度必须是4字节的整倍数,不是就利用最后的填充字节填充。

(3)区分服务

        占8位,用来获得更好的服务。       

        在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。

        只有在使用区分服务(DiffServ)时,这个字段才起作用

        在一般的情况下都不使用这个字段。

(4)总长度

        占16位,表示首部和数据之和的长度,单位为字节

        因此数据报最大长度为 2^16-1=65535 字节

        在数据链路层规定了一个数据帧的数据字段的最大长度,称为最大传送单元MTU

        一旦IP数据报的总长度超过数据链路层规定的MTU值,就要进行分片处理。分片处理在(7)片偏移里。这时的总长度是指分片后的每一个分片的首部长度与该分片的数据长度之和。

(5)标识

        占16位

        IP软件有一个计数器,每产生一个数据报,计数器便加1。这个标识并不是序号,不表明IP数据报的顺序。

        它的作用是数据报由于长度超过MTU后必须分片时,这个标识的值就会复制到所有切片内,相同标识值的字段最后被正确的重装成原来的数据

(6)标志

        占3位,目前只有两位有意义

        标志字段最低位标记为MF。MF=1 表示后面还要“分片”的数据报。MF=0 表示这已经是若干数据报片中的最后一个。

        标志字段中间一位记为DF,意思是不能分片。只有当DF=0 时才允许分片。

(7)片偏移

        占13位

        代表:较长的分组在分片后,某片在原分组中的相对位置。就是说相对于用户数据字段的起点,该片从何处开始。

        片偏移以8个字节为偏移单位。也就是说每个分片的长度一定是8字节的整数倍。

《网络层(2.网际协议IP)》

《网络层(2.网际协议IP)》

(8)生存时间

        占8位,表示这是数据报在网络中的寿命

        目的是防止无法交付的数据报无限制的在互联网中兜圈子。

        由发出数据报的源点设置这个字段。

        最初设计以秒为单位,每经过一个路由器,就会减去这段时间。若减为0,就丢弃这个数据报。

        随着技术革新,将它的功能改为“跳数限制”,每次经过路由器转发都会减1,减为0则丢弃,不再转发。

        因为占8位,所以最多经过路由器数量为255,若是将值设为1,则只能在局域网内转发

(9)协议

        占8位,协议字段表示此数据字段携带的数据是使用何种协议

   常用协议和对应的协议字段值:

协议名ICMPIGMPIPTCPEGPIGPUDPIPv6ESPOSPF
协议字段值12468917415089

(10)首部检验和

        占16位

        只检验数据报的首部,不检验数据部分

        不使用CRC检验码,采用更简单的计算方法:16位二进制反码求和算法

《网络层(2.网际协议IP)》

(11)源地址

        占32位

(12)目的地址

        占32位 

2. IP数据报首部的可变部分

        这部分是一个可选项,用来支持排错、测量以及安全等措施。基本不使用。

        新的IPv6 直接把IP数据报的首部长度固定了。

六、IP层转发分组的流程

假设:有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主机。
        可以想像,若按目的主机号来制作路由表,每一个路由表就有 4 万个项目,即 4 万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
        但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含 4 个项目(每一行对应于一个网络),这样就可使路由表大大简化。

《网络层(2.网际协议IP)》

根据目的网络地址就能确定下一跳路由器,这样做的结果是:

        IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
        只有到达最后一个路由器时,才试图向目的主机进行直接交付

特定主机路由:

        虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
        采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。

默认路由:

        路由器还可采用默认路由减少路由表所占用的空间和搜索路由表所用的时间
        这种转发方式在一个网络只有很少的对外连接时是很有用的。
        默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
        如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。

《网络层(2.网际协议IP)》 

IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件
网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

路由器分组转发算法:

(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N

(2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。

(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。

(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。

(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。

(6)  报告转发分组出错。


推荐阅读
author-avatar
夜笙_ciel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有