计算机网络——初识IP(Internet Protocol)

目录

一、前言

二、ipv4分组

2.1 ipv4分组20字节头部格式

2.2 IP数据报分片(涉及的首部字段:标识、标志、片偏移)

2.3 网络层转发分组流程

三、ipv4地址与NAT

3.1 ipv4地址(A类 B类 C类 D类 E类)

3.2 NAT网络地址转换

四、子网划分、子网掩码、CIDR

4.1 子网划分,“子网字段”的引入

4.2 子网掩码

4.3 无分类编址CIDR

五、与IP协议配套使用的三个协议——ARP协议、DHCP协议与ICMP协议

5.1 IP地址与MAC地址

5.2 地址解析协议——ARP协议

5.3 动态主机配置协议——DHCP协议

5.4 网际控制报文协议——ICMP协议

5.4.1 ICMP差错报告报文

5.4.2 ICMP询问报文

5.4.3 ICMP的应用——ping、traceroute

六、关于IPv6

6.1 IPv6的主要特点

6.2 IPv6地址

七、小结


一、前言

在整个计算机网络中,tcp/ip协议是最常用,最重要的部分了,也是程序员面试中经常遇到的。笔者有了一篇TCP的文章:https://blog.csdn.net/qq_36963950/article/details/102566935

本文这里介绍IP协议。

引子:引入IP协议,什么是IP协议?

IP协议,全称为Internet Protocol,译为网络协议/网际协议,是计算机网络——网络层最重要一个协议,分为ipv4和ipv6两个版本(实际使用中只有ipv4),使用路由器实现互联,它负责Internet上网络之间的通信,并规定了将数据从一个网络传输到另一个网络应遵循的规则,是TCP/IP协议的核心。

本文分为5个部分,分别介绍“ipv4分组”、“ipv4地址与NAT”、“子网划分、子网掩码、CIDR”、“ARP DHCP IMCP”、“ipv6”,且看下文。

二、ipv4分组

2.1 ipv4分组20字节头部格式

IP首部的各个字段的含义如下:

(1)版本:占4位,指定ip协议的版本,值为4;

(2)首部长度:占4位,表示IP数据报首部长度,以32位/4字节为单位,一共4位,所以值为0000-1111(0-15),表示0-60字节(实际意义20字节-60字节)。其中,20字节是IP首部最短长度,不使用任何选项,60字节是IP首部最长长度,选项+填充为40字节。

(3)总长度:占16位,表示IP数据报总长度,以8位/1字节为单位,一共16位,所以值为0-65535,表示0-65535字节(实际20字节-65535字节)。注意,因为以太网帧最大传送长度MTU(Maximum Transfer Unit)为1500字节,因此当一个IP数据报封装成帧时,数据报的总长度(首部+数据部分)一定不能超过数据链路层的MTU的值,超过即进行分片处理,下面会介绍。

(4)标识:占16位,是一个计数器,每产生一个数据报就加1,并赋值给标识字段,但它并不是序号(因为IP是无连接服务,无需保证可靠有序,下面会介绍)。当一个数据报长度超过网络的MTU时,必须分片处理,此时每一个数据报片都复制一次标识号以便能正确重装成原来的数据报。

(5)标志:占3位,标志字段的最低位为MF,MF=1表示后面还有分片,MF=0表示后面没有分片了(这是最后一个分片);标志字段中间一位是DF,DF=0表示允许分片,DF=1表示不允许分片。

(6)片偏移:占13位,它指出较长的分组在分片后,某片在原分组的中的相对位置。片偏移以8个字节为偏移单位,即每一个分片的长度一定是8字节的整数倍。

(7)首部检验和:占16位,IP数据报的检验和只检验首部,不检验数据部分,下面会介绍。

(8)生存时间TTL(Time to Live):占8位,数据报在网络中可以通过路由器数的最大值,标识分组在网络中的寿命(故命名为TTL 生存时间),以确保分组不会在网络中循环,路由器在转发分组之前,先把TTL减1,若TTL被减为0,则该分组必须丢弃。

(9)协议:占8位,指出此分组携带的数据使用何种协议,即分组的数据部分应该提交给哪个运输层协议,如值为6表示TCP,值为17表示UDP.

(10)源地址片段:占32位/4字节,表示发送端的IP地址。

(11)目的地址片段:占32位/4字节,表示接收端的IP地址。

注意:整个ip首部中,表示长度或偏移的标记有三个,分别是首部长度,总长度,片偏移,基本单位为:4B/4字节、1B/1字节、8B/8字节。

2.2 IP数据报分片(涉及的首部字段:标识、标志、片偏移)

分片含义:一个链路层数据报能承载的最大数据量称为最大传送单元(MTU),因为IP数据报被封装在链路层数据报中,故链路层的MTU严格地限制着IP数据报的长度,而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的MTU。例如,以太网的MTU为1500字节,而许多广域网的MTU不超过576字节,当P数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在两个或更多个较小的IP数据报中(这些较小的数据报叫做片),这个过程就是分片。

分片组装(标识+标志+片偏移):片在目的地的网络层被重新组装。目的主机使用IP首部中的标识,标志和片偏移三个字段来完成对片的重组,当创建一个P数据报时,源主机为该数据报加上一个标识号。当一个路由器需要将一个数据报分片时,形成的每个数据报(即片)都具有原始数据报的标识号。当目的主机收到来自同一发送主机的一批数据报时,它可以通过检查数据报的标识号以确定哪些数据报是属于同一个原始数据报的片。IP首部中的标志位有3个比特,但只有后2个比特有意义,分别是MF位 ( More Fragment)和DF位(Don't Fragment)。只有当DF=0时,该IP数据报才可以被分片,MF则用来告知目的主机该P数据报是否为原始数据报的最后一个片。当MF=1时,表示相应的原始数据报还有后续的片:当MF=0时,表示该数据报是相应原始数据报的最后一个片,目的主机在时片进行重组时,使用片偏移字段来确定片应放在原始IP数据报的哪个位置。

IP分片相关计算:IP分片涉及一定的计算。如:一个长度为4000字节的IP数据报(首部字段20字节+数据部分3980字节)到达一个路由器,需要转发到一条MTU为1500字节的链路上(即网络层下面需要数据链路层的支持)。这意味着原始数据报中3980字节的数据必须分配到3个独立的片中(每一片也是一个IP数据报),假定原始数据报的标识号为777,分成3片后如图所示。

由于片偏移的单位为8字节,所以除了最后一个分片外,其他所有片的有效数据载荷都是8的倍数。

2.3 网络层转发分组流程

网络层的路由器执行的分组转发算法流程如下:

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

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

(3)若路由表中有目的地址为D的特定路由(对特定的目的主机指明一个特定的路由,通常是为了控制或测试网络,或出于安全考虑才采用的),则把数据报传送给路由器表所指定的下一跳路由器;否则,转到(4);

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

(5)若路由表中有一个默认路由,则把数据报传送给路由表所指定的默认路由;否则,转到(6);

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

整个网络层路由转发流程如图:

注意:得到下一跳的ip地址后不是直接将该地址填入到待发送的数据报中,而是将该地址转换为mac地址,将其放到mac帧首部,然后根据mac地址找到的下一跳路由器。

三、ipv4地址与NAT

3.1 ipv4地址(A类 B类 C类 D类 E类)

凡是连接在Internet上的每一台主机(或路由器)都分配一个32bit的全球唯一标识符,即IP地址,这个ip地址由4个字节组成,故称为ipv4。按传统的IP地址分类方法,分为A类 B类 C类 D类 E类,一共五类。如下图:

D类地址用于多播,E类地址暂时没有作用,关于D类、E类地址,本文均不做介绍,下文的NAT、子网划分、CIDR等知识作用对象均默认为A类、B类、C类地址。

配合上图,给出下表(笔者的这个表已经非常详细了)

网路类别 最大可用网络数 第一个可用的网络号 最后一个可用的网络号 最大可用主机数 第一个可用的主机号 最后一个可用的主机号 网络号+主机号 备注
A类 2^7-2 1 126 2^24-2 0.0.1 255.255.254

范围:1.0.0.1~126.255.255.254

总数目:2^31-2^8-2^25+4

网络数*主机数:(2^7-2)*(2^24-2)=

2^31-2^8-2^25+4

总数目-不用的:2^31-(2*2^24+(2^7-2)*2)=2^31-(2^25+(2^8-4))=2^31-2^25-2^8+4

网络号:0没用到、127没用到

主机号:0.0.0没用到、

255.255.255没用到

B类 2^14-1 128.1 191.255 2^16-2 0.1 255.254

范围:128.1.0.1~191.255.255.254

总数目:2^30-2^15-2^16+2

网络数*主机数:(2^14-1)*(2^16-2)=2^30-2^15-2^16+2

总数目-不用的:2^30-(2^16+(2^14-1)*2)=2^30-(2^16+2^15-2)=2^30-2^16-2^15+2

网络号:128.0没用到

主机号:0.0没用到、255.255没用到

C类 2^21-1 192.0.1 223.255.255 2^8-2 1 254

范围:192.0.1.1~223.255.255.254

总数目:2^29-2^22-2^8+2

网络数*主机数:(2^21-1)*(2^8-2)=2^29-2^22-2^8+2

总数目-不用的:2^29-(2^8+(2^21-1)*2)=2^29-(2^8+2^22-2)=2^29-2^8-2^22+2

网络号:192.0.0没用到

主机号:0没用到、255没用到

上表备注中给出的没有用到的主机号和网络号:

对于A类地址:

网络号0没用到:因为网络号为0的IP地址是保留地址,意为“本网络”;

网络号127没用到:因为网络号127是环回测试地址;

主机号0.0.0没用到:因为主机号全为0表示本网络本身(本主机)。

主机号255.255.255没用到:因为主机号全为1表示本网络的广播地址。

特殊地(网络号+主机号),0.0.0.0 表示本网络上的本主机,255.255.255.255 表示整个TCP/IP的广播地址,又称受限广播地址。

对于B类地址:

网络号128.0没用到:因为这个网络号是不可指派的。

主机号0.0没用到:因为主机号全为0表示本网络本身(本主机)。

主机号255.255没用到:因为主机号全为1表示本网络的广播地址。

对于C类地址:

网络号192.0.0没用到:因为这个网络号是不可指派的。

主机号0没用到:因为主机号全为0表示本网络本身(本主机)。

主机号255没用到:因为主机号全为1表示本网络的广播地址。

IP地址有以下特点:

1)每个IP地址都由网络号和主机号两部分组成,因此IP地址是一种分等级的地址结构。分等级的好处是:①IP地址管理机构在分配IP地址时只分配网络号(第一级),而主机号(第二级)则由得到该网络的单位自行分配,方便了IP地址的管理;②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目标主机号),从而减小了路由表所占的存储空间。

2)IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,每个IP地址的网络号必须与所在网络的网络号相同,且这两个IP地址的网络号是不同的。因此,IP网络上的一个路由器必然至少应当具有两个IP地址(路由器每个端口必须至少分配一个P地址)。

3)用转发器或桥接器(网桥等)连接起来的若干个LAN仍然是同一个网络(同一个广播域),因此该LAN中所有主机的IP地址的网络号必须相同,但主机号必须不同(即同一个LAN中所有主机的IP地址的网络号必须相同,但主机号必须不同)。

4)在IP地址中,所有分配到网络号的网络(无论是LAN或WAN)都是平等的。

5)在同一个局域网LAN上的主机或路由器的IP地址中的网络号必须是一样的。路由器总是具有两个或两个以上的IP地址(因为有两个或两个以上端口正在使用),路由器的每一个端口都有一个不同网络号的IP地址。

3.2 NAT网络地址转换

含义:NAT(Network Address Translation)网络地址转换,是通过将专用网络地址(如企业内部 intranet)转换为公用地址(如nternal),从而对外隐藏了内部管理的P地址。它使得整个专用网只需要一个全球IP地址就可以因特网连通,由于专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗(即一个专用网中只有一个全球IP与互联网相连通,该专用网内部使用本地IP通信,一般是192.168.xxx.xxx,下面会介绍)。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。

此外,为了网络安全,划出了部分IP地垃为私有IP地址。私有IP地址只用于LAN,不用于WAN连接(因此私有IP地址不能直接用于Internet,必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能用于Internet),并且允许私有IP地址被LAN重复使用。私有IP地址/LAN内IP地址,如下表:

类型 范围 备注 
A类

1个A类网段,

即10.0.0.0-10.255.255.255

IP分为内网IP和外网IP,又称私有IP和公网IP,这个表里面展示的都是私有IP,

私有IP:LAN内唯一,满足LAN内通信,连接家用wifi自动获得

公网IP:全球唯一,满足互联网通信,租用阿里云、腾讯云获得

B类

16个B类网段,

即172.16.0.0-172.31.255.255

C类

256个C类网段,

即192.168.0.0-192.168.255.255

问题一:私有IP(内网IP)和公网IP(外网IP)

凡是ip地址在10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0-192.168.255.255范围内,为内网ip,LAN内唯一确定,用于同一LAN内通信;

不在范围上述三个范围内,为外网ip,全球互联网内唯一确定,用于互联网访问通信。

问题二:动态IP和静态IP

最简单的理解(仅和项目开发相关的):无论是自己的电脑,还是vmware上的,

默认使用dhcp就是动态IP,断网后过一段时间再连接,可能ip会改变;

自己配置static就是静态ip,断网后再连接,ip不会改变;

注意:对于租用的阿里云服务器,

实例:

辨析内网ip和外网ip、动态ip和静态ip

记住:这两组概念没有任何关系,是两组相互独立的概念。内网ip和外网ip很好区分,对于命令行查看或租用的云服务器,内网ip和外网ip一眼即可区分:凡是ip地址在10.0.0.0-10.255.255.255、172.16.0.0-172.31.255.255、192.168.0.0-192.168.255.255范围内,为内网ip,不在范围内,为外网ip。

动态ip和静态ip,对于自己的电脑,vmware虚拟机,自动获得的是或dhcp就是动态ip,手动配置是静态ip。

在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。这种采用私有IP地址的互联网络称为专用互联网或本地互联网,私有IP地址也称可重用地址(例如:LAN1中使用192.168.0.101,LAN2中也可以使用192.168.0.101,即不同LAN中可以重用,因为私有IP仅保证一个LAN内唯一。其中,正是因为私有IP可以重用,所以它也属于一种解决IPv4耗尽的方式,下面会讲)。

使用NAT时需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球地址。当使用本地地址的主机在和外界通信时,NAT路由器使用NAT转换表将本地地址转换成全球地址,或将全球地址转换成本地地址 ,NAT转换表中存放着{本地IP地址:端口}到{全球IP地址:端口}的映射。通过{ip地址:端口}这样的映射方式,就可以让多个私有IP地址映射到同一个全球IP地址。

下面以宿含共享宽带上网为例。

NAT转换表
WAN端 LAN端
138.76.29.7:5001 192.168.0.2:2233
138.76.29.7:5060 192.168.0.3:1234
...... ......

假设一个宿舍办理2Mb/s的电信宽带,那么这个宿舍就获得了一个全球IP地址(如138.76.29.7),而宿舍内4台主机使用私有地址(如192.168.0.0网段)。宿舍的网关路由器应该开启NAT功能,并且某时刻路由器上的NAT转换表.那么,当路由器从LAN端口收到源IP及源端口号为192.168.0.2:2233的数据报时,就将其映射成138.76.29.7:5001,然后从WAN端口发送到因特网上,当路由器从WAN端口收到目的IP及目的端口号为138.76.29.7:5060的数据报时,就将其映射成192.168.0.3:1234,然后从LAN端口发送给相应的本地主机。这样,只需要一个全球地址,就可以让多台主机同时访问因特网,所以说NAT是解决IPv4耗尽的一种方式。

注意:普通路由器在转发IP数据报时,不改变其源IP地址和目的P地址。而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址)。普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号。

四、子网划分、子网掩码、CIDR

4.1 子网划分,“子网字段”的引入

两级地址的缺点:IP地址空间的利用率有时很低;给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏:两级的IP地址不够灵活。

为了解决两级IP地址的不足,进一步完善IP机制,在IP地址中又增加了一个 “子网号字段”使两级P地址变成为三级P地址这种做法叫做划分子网。划分子网已成为因特网的正式标准协议。

划分子网的基本思路如下:

1)划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络(即某网段内部是{<网络号>,<子网号>,<主机号>},外部是{<网络号>,<主机号>},子网号仅在网段内部有用)。

2)从主机号借用若千个比特作为子网号,当然主机号也就相应减少了相问的比特(注意:新增的子网号是从主机号中借入的,不是从网络号中借入的,不要搞错了),三级IP地址的结构如下:即IP地址={<网络号>,<子网号>,<主机号>}

3)凡是从其他网络发送给本单位某个主机的P数据报,仍然是根据IP数据报的目的网络号,先找到连接在本单位网络上的路由器。然后此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网。最后就把IP数据报直接交付给目的主机。

注意:1)划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号,回此,从一个IP地址本身或IP数据报的首部,并无法判断源主机或目的主机所连接的网络是否进行了子网划分(子网划分是网段内部的事,对网段外部透明)

2)历史上,对分类的IPv4地址进行子网划分时,子网号不能为全1或全0.但随看CIDR的广泛使用,现在会1和全0的子网号也可以使用了,但一定要谨情使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子同号这种用法

3)不论是分类的IPv4地址(即{<网络号>,<子网号>,<主机号>})还是CIDR(即{<网络号>,<主机号>}),其子网中的主机号为全0或全1的地址都不能被指派。子网中的主机号全0的地址为子网的网络号,主机号全1的地址为子网的广播地址。

4.2 子网掩码

为了告诉主机或路由器对一个A类,B类,C类网络进行了子网划分,使用子网掩码来表达对原网络中主机号的借位。

子网掩码是一个与P地址相对应的长32bt的二进制串,它由一串1和跟随的一串0组成其中,1对应于IP地址中的网络号及子网号,而0对应于主机号,计算机只需将IP地址和其对应的子网掩码逐位相“与”(逻辑AND运算),就可得出相应子网的网络地址。

现在的因特网标准规定:所有的网络都必须使用子网掩码。如果一个网络没有划分子网,那么就采用默认子网掩码(有点像写代码的时候一定要有构造函数,没有构造函数的默认使用系统自带无参构造函数一样,皮!注意,这种类比没有任何意义,笔者只是打字的时候临时想到)。自定义的子网掩码当然按照每一个人的定义来,这里给出默认的子网掩码:A、B、C类地址的默认子网掩码分别为255.0.0.0,255.255.0.0,255.255.255.0。例如,某主机的IP地址136.34.5.56,子网掩码为255.255.255.0,进行逐位“与”运算后,得出该主机所在子网的网络号136.34.5.0,主机号为56.

由于子网掩码是一个网络或一个子网的重要属性,所以路由器在相互之间交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉对方。路由表中的每一个条目,除了要给出目的网络地址和下一跳地址外,还需要同时给出该目的网络的子网掩码。

在使用子网掩码的情况下:

1)一个主机在设置IP地址信息的同时,必须设置子网掩码;

2)同属于一个子网的所有主机以及路由器的相应端口,必须设置相同的子网掩码;

3)路由器的路由表中,所包含的信思其主要内容必有:目的网路地址,子网掩码,下一跳地址。

使用子网掩码时路由器的分组转发算法如下(之前介绍过路由转发算法,这里是使用子网掩码的路由转发算法):

1)从收到的分组的首部提取目的IP地址,记为D

2)先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配,若匹配,则将分组直接交付,否则就是间接交付,执行3)

3)若路由表中有目的地址为D的特定主机路由,则将分组传送给路由表中所指明的下一跳路由器:否则,执行4

4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址)中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器

5)若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器:否则,执行6)

6)报告转发分组出错

如图:

4.3 无分类编址CIDR

含义:无分类域间路由选择(CIDR )是在变长子网掩码的基础上提出的一种消除传统A、B、C类络划分,井且可以在软件的支持下实现超网构造的一种地址的划分方法。

比如说,如果一个单位需要2000个地址,那么就分配它一个2048地址的块(8个连续的C类网络),而不是一个完全的B类地址,这样可以大幅度提高IP地址空间的利用率,减小路由器的路由表大小,提高路由转发能力。CIDR的主要特点有:

1)消除了传统的A,B,C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空间,CIDR使用“网络前”的概念代替子网络的概念,这样IP地址的无分类两级编址为: IP={<网络前级>,<主机号>}。

CIDR还使用“斜线记法”(或称CIDR记法),即:IP地址网络前缀所占比特数,其中,网络前缀所占比特数对应于网络号的部分,等效于子网掩码中连续1的部分。例如,对于128.14.3.25/20这个地址,它的掩码是20个连续的1和后续12个连续的0,通过逐位相“与”的方法可以得到该地址的网络前缀(或直接截取前20位):

CIDR虽然不使用子网,但仍然使用“掩码”这一名词。“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的组织,仍可以在本组织内根据需要划分出一些子网。例如,某组织分配到地址块/20,就可以再继续划分为8个子网(从主机号中借用3位划分子网),这时每个子网的网络前缀就变成23位。全0和全1的主机号地址一般不使用。

2)将网络前缀都相同的连续的IP地址组成“CIDR地址块”。一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或称为构成超网,路由聚合使得路由表中的一个项目可以表示很多个原来传统分类地址的路由,有利于减少路由器之间的路由选择信息的交换,从而提高网络性能。

CIDR如下图:

上图中,如果不使用路由聚合,那么R1的路由表中需要分别有到网络1和网络2的路由表项。不难发现,网络1和网络2的网络前缀在二进制表示的情况下,前16位都是相同的,第17位分别是0和1,并且从R到网络1和网络2的路由的下一跳皆为R2.若使用路由聚合,在RI看来,网络1和网络2可以构成一个更大的地址块206.1.0.0/16,到网络和网络2的两条路由就可以聚合成一条到206.1.0.0/16的路由。

CIDR地址块中的地址数一定是2的整数次幂,实际可指派的地垃数通常为(2^N-2),N表示主机号的位数,主机号全0代表网络号,主机号全1为广播地址,网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前级变长。

CIDR的优点在于网络前缀长度的灵活性。由于上层网络的前缀长度较短,因此相应的路由表的项目较少。而内部又可采用延长网络前缀的方法来灵活的划分子网。

最长前缀匹配(最佳匹配):使用CIDR时,路由表中的每个项目由“网络前”和“下跳地址“组成,在查找路由表时可能会得到不止一个匹配结果。应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因而路由就越具体。

CIDR查找路由表的方法:为了进行更加有效的查找最长前缓匹配,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找,这里最常用的数据结构就是二叉线索。

五、与IP协议配套使用的三个协议——ARP协议、DHCP协议与ICMP协议

我们知道,IP协议是“计算机网络——网络层”的一个协议,其实,在网络层还有三个经常与IP协议配套使用的三个协议:ARP协议、DHCP协议与ICMP协议,本部分来讲解。

5.1 IP地址与MAC地址

IP地址是网络层使用的地址,它是分层次等级的。硬件地址是数据链路层使用的地址(例如MAC地址),它是平面式的。在网络层及网络层之上使用IP地址,IP地址放在IP数据报的首部,而MAC地址放在MAC的首部。通过数据封装,把IP数据报分组封装成为MAC帧之后,数据链路层看不见数据报分组中的IP地址。

由于路由器的隔离,IP网络中无法通过广播方式依靠MAC地址来完成跨网络的寻址,因此在IP网络的网络层只使用IP地址来完成寻址。寻址时:每个路由器依据其路由表(依靠静态路由或动态路由协议生成)选择到目标网络(即主机号全为0的网络地址)需要转发到的下一跳(路由器的物理端口号或下一网络地址),而IP分组通过多次路由转发到达目标网络后,则改为在目标网络LAN中通过数据链路层的MAC地址以广播方式寻址。这样可以提高路由选择的效率。

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

2)虽然在IP数据报首部中有完整的源IP地址和目的IP地址,但路由器只根据目的IP地址号进行路由选择;

3)在局域网的链路层,只能看见MAC。而通过路由器转发IP分组时,此IP分组在每个网络中都被路由器解封装和重新封装,因此IP数据报在被路由器转发时其数据链路层封装所使用的MAC地址是在不断改变的。这也决定了无法使用MAC地址跨网络通信;

4)尽管互联在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的P地址研究主机与主机或路由器之间的通信。

注意:路由器由于互联多个网络,因此它不仅有多个IP地址,也有多个硬件地址。

5.2 地址解析协议——ARP协议

无论网络层使用什么协议,在实际网络的数据链路层上传送数据帧时,最终必须使用硬件地址(MAC地址)。所以需要一个方法完成IP协议到MAC地址的映射,这就是地址解析协议(Address Resolution Protocol,ARP)。每个主机都设有一个ARP高速缓存,存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称ARP表。使用ARP协议来动态维护此ARP表。

ARP工作在网络层,其工作原理:当主机A预向本局域网中的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就可查出其对应的硬件地址,再将硬件地址写入MAC帧,然后通过局域网将该MAC帧发往硬件地址。如果没有,就通过使用目的MAC帧为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求分组,可以使同一个局域网里的所有主机收到ARP请求。当主机B收到ARP请求后,就会向主机A发出响应ARP分组,分组中包含主机B的IP与MAC地址的映射关系,主机A在收到后将此映射写入ARP缓存中,然后按查询到的硬件地址发送MAC帧。ARP协议由于“看到了”IP地址,所以它工作在网络层,而NAT路由器由于“看到了”端口,所以它工作在传输层。对于某个协议工作在哪个层次,读者应该能通过协议的工作原理进行猜测。

注意:ARP是解决同一个局城网上的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局城网上,那么就要通过ARP协议找到一个位于本局城网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做,尽管ARP请求分组是广播发送的,但是ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。

ARP的4种典型情况总结

1)发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。

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

3)发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址

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

从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器要和本网络上的另一个已知P地址的主机或路由器进行通信,ARP协议就会自动地将这个P地址解析为链路层所需要的硬件地址。

5.3 动态主机配置协议——DHCP协议

DHCP含义:动态主机配置协议常用于给主机动态分配IP地址(与之相对的是static,用户自己制定主机的ip地址,这里略过),它提供即插即用的联网机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与(手工参与的是配置静态ip)。DHCP是应用层协议,它是基于UDP的。

DHCP工作原理:它使用客户端/服务端模式,需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文,这是主机就成为DHCP客户,本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文。DHCP服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息。若找不到,则从服务器的IP地址池中取一个地址分配给该计算机 。DHCP的回答报文称为提供报文

DHCP服务器聚合DHCP客户端的交换过程如下:

(1)DHCP客户机广播“DHCP发现”消息,试图找到网络中的DHCP服务器,服务器获得一个ip地址。

(2)DHCP服务器收到"DHCP发现"消息后,就向网络中广播“DHCP提供”消息,该消息中包括DHCP客户机和提供给它的IP地址及相关配置信息。

(3)DHCP客户机收到“DHCP提供”消息,如果接受DHCP服务器提供的相关参数,则通过广播“DHCP请求”消息向DHCP服务请求提供IP地址。

(4)DHCP服务器广播“DHCP确定”消息,将IP地址分配给DHCP客户机。

如图:

注意几点:

DHCP协议允许网络中配置多个DHCP服务器,所以,当DHCP客户机发出DHCP请求时,有可能收到多个应答信息。这时,DHCP客户机只会挑选最先达到的。

租用期:DHCP服务器分配给DHCP客户的IP地址是临时的(即动态ip是可变的),因此DHCP客户机只能在一段时间内使用这个分配的IP地址。DHCP这段时间为租用期。租用期的数值应由DHCP服务器自己决定,DHCP客户也可以在自己发送的报文中提出对租用期的要求。

客户/服务器:DHCP协议是应用层协议,因为它是通过客户/服务器方式工作的,DHCP客户端向DHCP服务器请求服务。

广播交互:DHCP协议的客户端和服务器都是通过广播方式交互的,原因是DHCP协议执行期间,客户端和服务器都没有标识自己身份的IP地址,因此不可能根据单播形式进行交互。采用UDP而不采用TCP的原因是:TCP协议需要建立连接,如果连对方的IP地址都不知道,更不能通过双方的套接字连接。

5.4 网际控制报文协议——ICMP协议

为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol),用来处理主机或路由器报告差错和异常情况。ICMP报文作为IP数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP协议是IP层协议(即ICMP协议是网络层协议)。

ICMP报文种类分为两种:ICMP差错报告报文和ICMP询问报文。

5.4.1 ICMP差错报告报文

ICMP差错报告报文用于目标主机或到目标主机路径上的路由器向源主机报告差错和异常情况,下面介绍使用ICMP差错报告报文的五种情况和不使用的四种情况。

共有五种类型:

(1)终点不可达。当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

(2)源点抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应将数据报的发送速率放慢。

(3)时间超时。第一种情况,当路由器收到生存时间TTL为零的数据报时,除丢弃数据报外,向源点发送时间超时报文。第二种情况,当终点在预先规定时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超时报文。

(4)参数问题。当路由器或目的主机收到的数据报首部中的有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

(5)改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。

不使用ICMP差错报告报文的四种情况:

(1)对ICMP差错报告报文不再发送ICMP差错报告报文(即ip报文出错发送icmp差错报告报文,但是如果是发送的icmp差错报告本身出错了,不用再发送icmp差错报告报文了)

(2)对第一个分片的数据报片所有后续数据报片都不发送ICMP差错报告报文。

(3)对具有组播地址的数据报不发送ICMP差错报告报文。

(4)对具有特殊地址(127.0.0.1或0.0.0.0)都不发送ICMP差错报告报文。

5.4.2 ICMP询问报文

ICMP询问报文包括四种:会送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由器询问和通告报文。其中,前两种(会送请求和回答报文、时间戳请求和回答报文)最常用。

5.4.3 ICMP的应用——ping、traceroute

ping

ping命令是我们最常用的命令,该命令作用:用来测试两个主机之间的连通性,如:

traceroute(UNIX上)/tracert(windows上)

该命令作用:用来跟踪分组经过的路由,如图:

六、关于IPv6

6.1 IPv6的主要特点

ip地址可以保证一个计算机或路由器在全球互联网世界中的唯一性,是计算机网络通信的基础。但是,必须认识到,ip地址是宝贵的,解决IP地址耗尽的问题的措施有以下三种:①采用无类别编址CDR,使IP更加合理:②采用网络地址转换NAT方法以节省全球IP地址:③采用具有更大地本的P协议IP6,其中前两种方法只是延长了IP4地址分配结束的时间,只有第三种方法从根本上解决了IP地址的耗尽问题。

IPv6的主要特点如下:

1)更大的地址空间,IP6将地址从IPv4的32位增大到了128位,IPv6的字节数(16字节) d是IPv4字节数(4字节)的平方

2)扩展的地址层次结构

3)灵活的首部格式

4)改进的选项

5)允许协议继续扩充

6)支持即插即用(即自动配置)

7)支持资源的预分配

8)IPv6只有在的源结点才能分片,是端到端的,传输路径中的路由器不能分片,所以从一般的意义上来讲,IPv6不允许分片(不允许类似IPv4在路由分片)

9)IPv6首部长度必须是8B的整数倍,而IP4首部是4B的整数倍

10)增加了安全性,身份验证和保密功能是IP6的关键特征

虽然IPv6与IPv4不兼容,但总的来说它跟所有其他的因特网静议兼容,包括TCP、UDP、ICMP、IGMP.、OSPF.、BGP和DNS,只是在少数地方作了必要的修改(大部分是为了处理长的地址)。IPv6相当好地满足了预定的目标,主要体现在1)首先也是最重要的,Dv6有比IPv4长得多的地址,IPv6的地址用16个字节表示,地址空间是IPv4的2^(128-32)=2^96倍,从长远的未来来说,这些地址是绝对够用的。

2)简化了TP分组头,它包含8个域(IP4是12个域)。这一改变使得路由器能够更快的处理分组,从而可以改善吞吐率。

3)更好地支持选项。这一改变对新的分组首部很重要,因为一些从前是必要的段现在变成可选的了,此外,表示选项的方式的改变还能加快分组的处理速度。

6.2 IPv6地址

IPv6数据报的目的地址可以是以下三种基本类型地址之一:

1)单播:单播就是传统的点对点通信

2)多播:多播是一点对多点的通信。分组被交付到一组计算机的每一个

3)任播:这是IP6增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只付其中的一个,通常是距离最近的一个

IPv4地址通常使用点分十进制表示法,如果IP6也使用这种表示法,地址书写起来将会相当长,在IPv6标准中指定了一个比较紧淡的表示法,即把地址中的每4位用一个十六进制数表示并且用冒号分隔每个16位,如4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170。

通常可以把IPv6地址缩写成更紧凑的形式,当16位域的开头有一些0时可以采用一种缩写表示法,但在域中必须至少有一个数字。例如可以把下述地址4BF5:0000:0000:0000:BA5F:039A:000A:2176缩写为4BF5:0:0:0:BA5F:39A:A:2176。

当有相继的0值域时,还可以进一步缩写,这些域可以用双冒号缩写(),当然,双冒号表示法在一个地址中仅可以出现一次,因为0值域的个数没有编码,需要从指定的总的域的个数来推算。这样一来,前述地址可以被更紧凑地书写成4BF5::BA5F:39A:A:2176

IPv6扩展了IPv4地址的分级概念,它使用以下3个等级:第一级(顶级)指明全球都知道的公共拓扑;第二级(场点级)指明单个场点;第三级指明单个的网络接口。IPv6地址采用多级体系主要是为了使路由器能够更快地查找路由。

IPv4向IPv6过渡只能采用逐步演进的办法,同时还必须使新安装的IPv6系统能够向后兼容。IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。

IPv4向IPv6过渡可以采用双协议栈和隧道技术两种策略:双协议栈是指在完全过渡到Ipv6之前,使一部分主机(或路由器)装有两个协议栈,一个IP4和一个IP6,通过双协议栈进行转换:随道技术是将整个P数据报封装到4数探的数都部分,这样使得D6数可以第在IPv4网络的隧道中传输。

七、小结

本文介绍ip协议,一共分为五个部分:

第二部分介绍ipv4首部格式、报文分片和组装、路由转发;

第三部分介绍ipv4地址分类、NAT网络地址转换;

第四部分介绍子网划分(引入子网)、子网掩码、CIDR;

第五部分介绍与ip协议有关的网络层的三种协议——ARP协议、DHCP协议、IMCP协议;

第六部分介绍ipv6特点。

笔者尽可能从最全面的范围介绍ip协议入门知识,希望对读者有帮助。

天天打码,天天进步!

发布了177 篇原创文章 · 获赞 31 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36963950/article/details/104178549