网络层:地址解析协议ARP、网际控制报文协议ICMP、虚拟专用网络VPN、网络地址转换NAT

文章目录

地址解析协议ARP

解决的问题

地址解析协议主要解决的问题是,将IP地址转换为硬件地址即MAC地址。

由于IP协议使用了ARP协议,因此通常把ARP协议划归为网络层。但是ARP协议的用途是为了从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。因此有另外一种说法:ARP协议是数据链路层协议。

ARP解析流程

  • ARP是通过广播来完成的。假设主机A要向主机B发送数据报,主机A需要知道主机B的IP地址和MAC地址。但现在的情况是主机A只知道主机B的IP地址,所以需要先获取主机B的MAC地址。
  • 此时主机A会构建一个ARP请求分组,源IP和MAC地址是主机A的IP和MAC地址,目的IP地址是主机B的IP地址,由于不知道主机B的MAC地址于是填写为主机A所在网络的广播地址。
  • 位于本地网络上的主机都可以收到主机A发送的广播数据包,但是只有主机B[每一个收到广播数据包的主机,会从数据包中解析出目的IP地址并与自己的IP地址相比较,相同则是目标主机]会回应主机A并告诉自己的MAC地址。
  • 主机A收到主机B的相应分组之后,就会知道主机B的MAC地址。

具体的,分为以下四种情况

  • 发送方是主机 H 1 \mathrm{H}{1} H1,要把IP数据报发送到同一个网络上的另一台主机 H 2 \mathrm{H}{2} H2。 H 1 \mathrm{H}{1} H1发送ARP请求分组[在网1上广播],找到目的主机 H 2 \mathrm{H}{2} H2的硬件地址。
  • 发送方是主机 H 1 \mathrm{H}{1} H1,要把IP数据报发送到另一个网络上的主机 H 3 \mathrm{H}{3} H3或者 H 4 \mathrm{H}{4} H4。 H 1 \mathrm{H}{1} H1发送ARP请求分组[在网1上广播],此时与网1相连的路由器 R 1 \mathrm{R}{1} R1通过查找路由表发现, H 3 \mathrm{H}{3} H3或者 H 4 \mathrm{H}{4} H4是本地网络之外的网络上的主机,所以路由器 R 1 \mathrm{R}{1} R1填入自己的MAC地址,将ARP相应分组发送给主机 H 1 \mathrm{H}{1} H1。主机 H 1 \mathrm{H}{1} H1将IP数据报发送给路由器 R 1 \mathrm{R}{1} R1,剩下的工作由路由器 R 1 \mathrm{R}{1} R1万完成。
  • 发送方是路由器 R 1 \mathrm{R}{1} R1,要把IP数据报转发到同一个网络上的主机 H 3 \mathrm{H}{3} H3。 R 1 \mathrm{R}{1} R1发送ARP请求分组[在网2上广播],找到目的主机 H 3 \mathrm{H}{3} H3的硬件地址
  • 发送方是路由器 R 1 \mathrm{R}{1} R1,要把IP数据报转发到网络3上的主机 H 4 \mathrm{H}{4} H4。 R 1 \mathrm{R}{1} R1发送ARP请求分组[在网2上广播],找到路由器 R 2 \mathrm{R}{2} R2的硬件地址。剩下的工作由路由器 R 2 \mathrm{R}_{2} R2完成。

既然最终使用的是MAC地址,为什么还要有IP地址

  • 由于全世界存在多种多样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,由用户或者用户主机完成这样的转换是不可能的。此时IP编址就解决了这样的事情。连接到互联网上的主机只需要各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络一样方便。而且这个转换过程对用户来说是透明的。

ARP高速缓存

如果不使用缓存,那么任何一台主机只要进行一次通信,就必须在网络上以广播的方式送ARP请求分组,使得网络上的通信量大大增加。ARP把已经得到地址映射保存在ARP高速缓存中,这样就使得主机下次再和具有相同的目的地址的主机通信时,可以直接从高速缓存中找到所需要的硬件地址而不必使用广播的方式发送ARP请求分组。具体的过程如下:

具体的过程

  • 主机 H 1 \mathrm{H}{1} H1收到主机 H 2 \mathrm{H}{2} H2的ARP相应分组之后,就在其ARP高速缓存中写入主机 H 2 \mathrm{H}_{2} H2的IP地址到硬件地址的映射。
  • 为了减少网络上的通信量,主机 H 1 \mathrm{H}{1} H1发送ARP请求分组的时候,会把自己的IP地址到MAC地址的映射写入到ARP请求分组。主机 H 2 \mathrm{H}{2} H2收到主机 H 1 \mathrm{H}{1} H1的ARP请求分组时,将主机 H 1 \mathrm{H}{1} H1的IP地址到MAC地址的映射写入到自己的ARP高速缓存。

过期时间

  • ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间。凡是超过生存时间的项目就从高速缓存中删除掉。

设置过期时间是为了应对如下的情况:

  • 主机A和主机B通信。A的ARP高速缓存里保存了主机B的MAC地址。但是某一刻[在映射条目过期之前],B的网络适配器出现了故障,B立即更换也意味着B的MAC地址发生变化。此时A与B通信会从高速缓存中获取B的MAC地址,但是获取到的是B的旧MAC地址,此时就会出现错误,主机A可能永远找不到主机B。
  • 但是设置了过期时间之后,主机A在映射条目过期之后,发送ARP请求分组重新获取B的MAC地址并记录在高速缓存中[设置相应的过期时间]。

有了ARP高速缓存之后,主机请求另一台主机的时候,会先从ARP高速缓存中寻找目的主机的MAC地址,不存在或者过期的话,才会发送ARP请求分组。加快数据报的传递速度,减少网络上的流量。

网际控制报文协议ICMP

  • 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告。ICMP是互联网的标准协议。但是ICMP不是高层协议(因为ICMP是封装在IP数据报中,作为其中的数据部分,是IP层的协议)。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。ICMP的报文格式如下:

ICMP报文的种类

  • ICMP差错报告报文。
  • ICMP询问报文。

ICMP差错报告报文

几MP报文类型种常见的IC

ICMP报文种类 类型的值 ICMP报文的类型
差错报告报文 3 终点不可达
差错报告报文 11 时间超过
差错报告报文 12 参数问题
差错报告报文 5 改变路由(Redirect)
询问报文 8或0 回送(Echo)请求或应答
询问报文 13或14 时间戳(Timestamp)请求或回答
  • ICMP报文的代码字段是为了进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。

ICMP差错报告报文共有四种,

  • 终点不可达。当路由器或者主机不能交付数据报时就向源点发送终点不可达报文。
  • 时间超过。当路由器收到生存时间(TTL)为零的数据报时,除了丢弃该数据报之外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报片的全部数据报时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
  • 参数问题。当路由器或者目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(更合适更好的路由)

什么情况下不应该发送ICMP差错报告报文

  • 对ICMP差错报告报文,不再发送ICMP差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。
  • 对具有多播地址的数据报,都不发送ICMP差错报告报文。
  • 对具有特殊地址(如127.0.0.1或者0.0.0.0)的数据报,不发送ICMP差错报告报文。

ICMP询问报文

  • 回送请求和应答。ICMP回送请求报文是由主机或者路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或者路由器发送ICMP回送应答报文。这种询问报文用来测试目的站是否可以达到以及了解其有关状态。
  • 时间戳请求和回答。ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用于时钟同步和时间测量。

ICMP应用举例

分组网间探测PING(Packet InterNet Groper)

  • 用来测试两台主机之间的连通性。PING使用了ICMP回送请求和回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。
  • 由于往返的ICMP报文上都有时间戳,因此很容易得出往返时间。


用PING测试主机的连通性

  • 从图上可以看出。图中的信息包括:发送到哪个机器(IP地址),发送的、收到的和丢失的分组数(但是不给出丢失的原因),以及往返时间的最小值、最大值和平均值。

traceroute(tracert)

UNIX操作系统中使用"traceroute",WINDOWS系统使用"tracert"。

  • 用来跟踪一个分组从源点到终点的路径。

工作原理

  • 从源主机向目的主机发送一连串的IP数据报,数据报中封装的是无法交付的UDP用户数据报。第一个数据报P~1~的生存时间是TTL设置为1.当P~1~到达路径上的第一个路由器R~1~时,路由器R~1~先收下它,接着把TTL减1.由于TTL等于0,R~1~就把P~1~丢弃了,并向源主机发送一个ICMP时间超过差错报告报文。
  • 按照上述的过程一直继续下去。当最后一个数据报刚刚达到目的主机时,数据报的TTL是1。但是主机或路由器并不把数据报进行转发,也不把TTL值减1。因为IP数据报中封装的是无法交付的运输层的UDP用户数据报,目的主机要向源点主机发送"ICMP"终点不可达差错报告报文[无法交付的UDP数据报使用了非法的端口号,"端口不可达"]。

确定路径的MTU

这样做的目的

  • 有的时候我们并不知道路由器的MTU大小,以太网上数据链路层的MTU是1500字节,但是非以太网的MTU值就不一样了,所以要知道MTU的大小,从而控制发送的数据包大小。

工作原理

  • 在源主机向目的主机发送IP数据报时,将IP数据报首部的分片禁止标志位设置为1.[由于设置了这个标志位,途中的路由器不会对大数据报文进行分片,而是将其丢弃,并回应差错控制报文]
  • 随后,会回应给源主机一个终点不可达[应该设置可以分片,但是禁止分片]的ICMP报文。并将数据链路层的MTU一起发送给源主机。
  • 源主机每次受到终点不可达的ICMP报文后,会减小数据报的大小,从而确定最合适的MTU的值。

虚拟专用网络

专用地址

  • 由于IP地址的紧缺,一个机构能够申请到的IP地址数往往小于本机构所拥有的主机数。考虑到互联网并不是很安全,一个机构内并不需要把所有的主机接入到外部的互联网。实际上,许多情况下,很多主机主要还是和本机构内的其它主机进行通信(例如,在大型商场或者宾馆中,有很多用于营业和管理的计算机。显然这些计算机并不都需要和互联网相连)。假定在一个机构内部的计算机通信也是采用TCP/IP协议,从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其IP地址。也即是说,让这些计算机使用仅在本机构有效的IP地址(本地地址),不需要向互联网的管理机构申请全球唯一的IP地址(全球地址)。这样一来,可以节约宝贵的全球IP地址资源。
  • 但是,如果任意选择一些IP地址作为仅在本机构使用的本地地址,在某种情况下可能会引起二义性(和全球地址重合)。
  • 为了解决这些问题,RFC指明了一些专用地址(私有地址)。这些地址只能用做本地地址而不能用做全球地址。
  • 在互联网中的所有路由器,不能转发目的地址是专用地址的数据包

以下是一些专用地址

  • 采用专用IP地址的互联网络称为专用互联网或者本地互联网,或者专用网。
  • 专用IP地址也叫做可重用地址。也即是说,不同的机构可以使用相同的专用地址。

虚拟专用网络

  • 有时一个很大的机构的许多部门分布的范围很广,这些部门经常要互相交换信息。可以有两种方法。
  • 1.租用电信公司的通信线路为本机构专用。这种方法虽然简单,但是线路的租金太高。
  • 2.利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网称之为虚拟专用网VPN(Virtual Private Network)。
  • 之所以称之为"专用网"是因为这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。

以两个场所为例说明如何使用IP隧道技术实现VPN

  • 假定某个机构在两个相隔较远的场所建立了专用网A和B,其网络地址分别是专用地址"10.1.0.0"和"10.2.0.0"。现在这两个场所需要通过公用的互联网构成一个VPN
  • 每一个场所至少要有一个路由器具有合法的全球IP地址,如图中的路由器 R 1 \mathrm{R}{1} R1和 R 2 \mathrm{R}{2} R2。这两个路由器和互联网的接口地址必须是合法的全球地址。路由器 R 1 \mathrm{R}{1} R1和 R 2 \mathrm{R}{2} R2在专用网内部网络的接口地址则是专用网的本地地址。
  • 在每一个场所A或者B内部的通信量都不经过互联网。但如果场所A的主机X要和另一个场所B的主机Y通信,就必须经过路由器 R 1 \mathrm{R}{1} R1和 R 2 \mathrm{R}{2} R2。
  • 主机X向主机Y发送的IP数据报的源地址是"10.1.0.1",目的地址是"10.2.0.3"。这个数据报先作为本机构的内部数据报从X发送到与互联网相连的路由器 R 1 \mathrm{R}{1} R1。路由器 R 1 \mathrm{R}{1} R1收到内部数据报后,发现其目的网络必须通过互联网才能达到,就把整个内部的数据报进行加密保证内部数据的安全,然后重新加上数据报的首部,封装成为在互联网上发送的外部数据报,其源地址是路由器 R 1 \mathrm{R}{1} R1的全球地址"125.1.2.3",而目的地址是路由器 R 2 \mathrm{R}{2} R2的全球地址"194.4.5.6"。路由器 R 2 \mathrm{R}_{2} R2收到数据报后将其数据部分提取出来进行解密,恢复出原来的内部数据报(目的地址是"10.2.0.3")交付主机Y

内联网

由场所A和场所B构成的虚拟专用网VPN称之为内联网(intranet VPN)。
外联网

有时候一个机构的VPN需要有某些外部机构参加。这样的VPN称之为外联网(extranet VPN)。

内联网和外联网都采用了互联网技术,即都是基于TCP/IP协议的。

远程接入VPN(remote access VPN)

  • 有的公司可能并没有分布在不同场所的部门,但却有很多流动员工在外地工作。公司需要和他们保持联系,有时还可能一起开电话会或者视频会议。
  • 远程接入VPN可以满足以上的需求。在外地工作的员工通过拨号接入互联网,驻留在员工个人电脑的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN隧道。

网络地址转换

现在有这样一种情况,在专用网内部的一些主机本来已经分配到了本地IP地址(仅在本专用网内使用的专用地址),但是现在想和互联网上的主机通信(并不需要加密),应当采取什么措施呢?

实际上,最简单的方法就是再申请一些全球IP地址。但这在很多情况下是不容易做到的,因为全球IPV4的地址已经所剩不多了。目前使用得最多的方法是采用网络地址转换。

这种方法需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,至少有一个有效的全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将本地地址转换为全球IP地址,才能和互联网连接。

下面这张图显示了,NAT的工作流程

  • NAT路由器收到从专用网内部的主机A发往互联网上主机B的IP数据报:源IP地址是主机A的IP的地址:"192.168.0.3",而目的地址是"213.18.2.4"。NAT路由器把IP数据报的源IP地址转换为自己的全球IP地址"172.38.1.5"。
  • 当B给A发送应答时,IP数据报的目的IP地址是NAT路由器的IP地址"172.38.1.5"。B并不知道A的专用地址"192.168.0.3"。实际上,即使知道了,也不能使用,因为互联网上的路由器都不转发目的地址是专用地址的IP数据报。
  • 通过NAT地址转换表,就可以把IP数据报上的就目的地址"172.38.1.5"转换为新的目的IP地址"192.168.0.3"。

NAT地址转换表举例

方向 字段 旧的IP地址 新的IP地址
源IP地址 192.168.0.3 172.38.1.5
目的IP地址 172.38.1.5 192.168.0.3
源IP地址 192.168.0.7 172.38.1.6
目的IP地址 172.38.1.6 192.168.0.7
  • 由此可见,当NAT路由器具有N个全球IP地址时,专用网内部最多可以同时有n台主机接入到互联网。这样就可以使专用网内较多数量的主机,轮流使用NAT路由器有限数量的全球IP地址。
  • 从上述流程,也可以发现,通过NAT路由器的通信必须由专用网内的主机发起。假设互联网上的主机要发起通信,当IP数据报到达NAT路由器时,NAT路由器就不知道应当把目的IP地址转换成专用网内的哪一个本地IP地址。这就表示专用网内部的主机不能充当服务器使用。

NAPT(Network Address and Port Translation)

  • 为了有效利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样就可以使多个拥有本地地址的主机,共用一个NAT路由器上的全球IP地址。

NAPT地址转换表举例

方向 字段 旧的IP地址 新的IP地址
源IP地址:TCP源端口号 192.168.0.3:30000 172.38.1.5 :40001
目的IP地址:TCP目的端口号 172.38.1.5:40001 192.168.0.3:30000
源IP地址:TCP源端口号 192.168.0.4:30000 172.38.1.5:40002
目的IP地址: TCP目的端口号 172.38.1.5:40002 192.168.0.4:30000
  • 从层次的角度看,NAPT的机制有些特殊。普通路由器在转发IP数据报时,对于源地址或者目的IP地址是不改变的。但NAT路由器在转发IP数据报时,要且必须更换其IP地址。普通路由器转发分组时是在网络层。但是NAPT路由器还要查看和转换运输层的端口号,但是这应该数据运输层的职责。正因为如此,NAPT遭受到一些人的批评,认为NAPT的操作没有严格按照层次的关系。

如何解决有且仅有一个全球IP地址和一个端口号

  • 为了解决一个专有网络地址对应一个全球IP地址导致全球IP地址不够用的问题[一个NAT有多少合法的全球IP地址,就有多少专用网内的主机同时接入到互联网],在地址转换的基础上引入了端口号。这样不同的端口号可以复用同一个全球IP地址,这样大大提升全球IP地址的利用率。
  • 透过现象看本质。如果说IP地址是一级标识,那这里的端口号就是二级标识。都是用来唯一标识一台专用网主机的手段,那现在只有一个全球IP地址和一个端口号,我们只需要引入三级标识:分布式唯一ID。不同的ID可以复用相同的全球IP地址和端口号。

分布式唯一ID的生成方式有:

  • redis inrc 自增ID
  • UUID
  • snowflakes
  • mysql区间自增ID

计算机网络体系结构

协议与划分层次

  • 在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了交换的入 | 目的IP地址:TCP目的端口号|172.38.1.5:40001|192.168.0.3:30000数据的格式以及有关的同步问题。这里的同步是广义的同步,即在一定条件下应当发生什么事件(例如应当发送一个应答信息),同步含有时序的意思。为进行网络中的数据交换而建立的规则、标准或者约定称之为网络协议(network protocol)。

网络协议主要由以下三个要素组成:

  • 语法,数据与控制信息的结构或者格式
  • 语义,需要发出何种控制信息,完成何种动作以及做出何种响应
  • 同步,即事件实现顺序的详细说明

网络分层带来的好处

  • 各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。由于每一层只实现一种相对独立的功能,因而可以将一个难以处理的复杂问题分级为若干个比较容易处理的更小一些的问题。这样整个问题的复杂度就下降了。

  • 灵活性好。当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则在这层以上或者以下各层均不受影响。此外,对某一层提供的服务还可以进行修改,当某层提供的服务不再需要时,甚至可以将这层取消。

  • 结构上可分割。各层都可以采用最合适的技术实现。

  • 易于维护和实现。这种结构使得实现和调试一个庞大而又复杂的系统变得易于处理,因为整个的系统已经被分解为若干相对独立的子系统。

  • 能促进标准化工作。因为每一层的功能及其所提供的服务都已经有了精确的说明。

计算机网络的各层及其协议的集合就是网络的体系结构(architecture)。

体系结构

  • 应用层(applaction layer)。应用层是体系结构中的最高层。应用层的任务是通过应用进程间的交互完成特定网络应用。应用层协议定义的是应用进程间通信和交互的规则。对于不同的网络应用需要不同的应用层协议。如域名系统DNS,HTTP,SMTP。应用层交互的数据单元称为报文(message)
  • 运输层(transport layer)。运输层的任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。由于一台主机可以同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用进程同时使用下面运输层的服务,分用和复用相反,就是运输层把收到的信息分别交付上面应用层中的相应进程。
    运输层主要使用以下两种协议:
    1.传输控制协议TCP(Transmission Control Protocol)---提供给面向连接的,可靠的,基于字节流的数据传输服务,数据传输的单位是报文段(segment)
    2.用户数据报协议UDP(User Datagram Protocol)---提供无连接的、尽最大努力(best-effort)交付的数据传输服务(不保证数据传输的可靠性),数据传输的单位是用户数据报。
  • 网络层(network layer)。网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。由于网络层使用的是IP协议,因此分组也叫做IP数据报。互联网使用的网络层协议是无连接的网际协议IP和许多种路由选择协议。
  • 数据链路层(data link layer)。数据链路层简称为链路层。数据链路层将网络层交下来的IP数据报封装成帧。主要解决的问题有:封装成帧、透明传输、差错控制。
  • 物理层(physical layer)。在物理层上所传数据的单位是比特。
相关推荐
幺零九零零37 分钟前
【C++】socket套接字编程
linux·服务器·网络·c++
23zhgjx-NanKon1 小时前
华为eNSP:QinQ
网络·安全·华为
23zhgjx-NanKon1 小时前
华为eNSP:mux-vlan
网络·安全·华为
点点滴滴的记录1 小时前
RPC核心实现原理
网络·网络协议·rpc
Lionhacker2 小时前
网络工程师这个行业可以一直干到退休吗?
网络·数据库·网络安全·黑客·黑客技术
程思扬2 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
ZachOn1y3 小时前
计算机网络:运输层 —— 运输层概述
网络·tcp/ip·计算机网络·运输层
佚明zj3 小时前
【点云网络】voxelnet 和 pointpillar
网络
转世成为计算机大神3 小时前
网关 Spring Cloud Gateway
java·网络·spring boot·1024程序员节
乌龟跌倒4 小时前
网络层3——IP数据报转发的过程
网络·tcp/ip·计算机网络·智能路由器