《图解TCP/IP》读书笔记五:IP协议相关技术

这里写图片描述

5.3 ARP

5.3.1 ARP概要

      ARP属于数据链路层协议。

      ARP(Address Resolution Protocol)是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个连路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以可以用ICMPv6替代ARP发送邻居探索消息。

5.3.2 ARP的工作机制

      ARP如何知道MAC地址的呢?简单说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

      假定主机A向同一链路上的主机B发送IP包,它们互不知道对方的MAC地址。
这里写图片描述

      主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。就是说,ARP请求包中已经包含了主机B的IP地址。由于广播的包可以被同一个链路上的所有主机或路由器接收,因此ARP的请求包也会被着同一个链路上所有主句和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。

      总之,从一个IP地址发送ARP请求包以了解其MAC地址(ARP请求包还有一个作用,那就是将自己的MAC地址告诉给对方),目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

      根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通信中无需事先知道MAC地址是什么,只要有IP地址即可。

      如果每发送一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量。通常做法是把获取到的MAC地址缓存一段时间。即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆到一个ARP缓存表中(记录IP地址与MAC地址对应关系的数据库叫做ARP表。通过arp-e命令获取该表信息),下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中MAC地址进行数据报的发送。每次执行一次ARP,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。

      一般来说,发送过一次IP数据报的主机,继续发送多次IP数据报的可能性会比较高。因此,这种缓存能够有效地减少ARP包的发送。反之,接收ARP请求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地址。这时他也可以将这些MAC地址的信息缓存起来,从而根据MAC地址发送ARP响应包给发送端主机。类似的,接收到IP数据报的主机又往往会继续返回IP数据报给发送端主机,以作为相应。因此,在接收主机端缓存MAC地址也是一种提高效率的方法。

      不过,MAC地址的缓存是有一定期限的。超过了这个期限,缓存的内容将被清除。这使得MAC地址与IP地址对应关系即使发生了变化,也依然能将数据包正确地发送给目标地址。
这里写图片描述

5.3.3 IP地址和MAC地址缺一不可?

      出现的疑问是:只要知道了IP地址,即使不做ARP,只要在数据链路上做一个广播不就能发给主机B了么?那么,为什么既需要IP地址又需要MAC地址呢?

      如下的案例,主机A想要发送IP数据报给主机B时必须得经过路由器C。即使知道了主机B的MAC地址,由于路由器C会隔断两个网络,还是无法实现直接从主机A发送数据报给主机B。此时主机A必须得先将数据报发送给路由器C的MAC地址C1。

这里写图片描述

5.3.4 RARP

      RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。例如将打印机服务器等小型嵌入式设备接入到网络时就会用到。
这里写图片描述
      平常我们可以通过个人电脑设置IP地址,也可以通过DHCP自动分配获得IP地址。然而,对于使用嵌入式设备时,会遇到没有任何输入接口或无法通过DHCP动态获取IP地址的情况。

      在类似情况下,就可以使用RARP。为此,需要架设一台RARP服务器,从而在这个服务器上注册设备的MAC地址及其IP地址。然后再将这个设备接入到网络。

5.4 ICMP

5.4.1 辅助IP的ICMP

      ICMP的主要功能包括,确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。

      在IP通信中如果某个IP包因为某种原因未能到达目标地址,那么这个具体原因将由ICMP负责通知。

      如下图,主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这时,路由器2就会向主机A发送一个ICMP包,说明发往主机B的包未能成功。
这里写图片描述

      ICMP的这种通知消息会使用IP进行发送(在ICMP中,包以明文的形式像TCP/UDP一样通过IP进行传输。然而,ICMP所承担的功能并非传输层的补充,而应该把它考虑为IP的一部分)。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1再转发给主机A。收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因。

      ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

5.4.2 主要的ICMP消息

ICMP 重定向消息

      如果路由器发现发送端主机使用次优的路径发送数据时,那么它会返回一个 ICMP 重定向消息给这个主机,这个消息包含了最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下,路由器会通过这个 ICMP 重定向消息给发送端主机一个更合适的发送路由。
这里写图片描述

      不过,多数情况下由于这种重定向消息成为引发问题的原因,所以往往不进行这种设置。

ICMP 超时消息

      IP 数据包中有一个字段 TTL(Time to live,生存周期),它的值随着每经过一个路由器就会减 1,直到减到 0 时该 IP 数据包被丢弃。此时,IP 路由器将发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。

      设置IP包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免IP包无休止地在网络上被转发。

5.5 DHCP

5.5.1 DHCP实现即插即用

      逐一为每一台主机设置IP地址会非常繁琐。为了实现自动设置IP地址,同一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。DHCP不仅在IPv4中,在IPv6中也可以使用。

5.5.3 DHCP中继代理

      家庭网络大多数都只有一个以太网(无线LAN)的网段,逾期连接的主机台数也不会太多。因此,只要有一台DHCP服务器就足以应对IP地址分配的需求,而大多数情况下都由宽带路由器充当这个DHCP的角色。

5.6 NAT

5.6.1 NAT定义

      NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局IP地址与多个主机通信。

      NAT(NAPT)实际上是为了正在面临地址枯竭的IPv4而开发的技术。IPv6中为了提高网络安全也在使用NAT,在IPv4和IPv6之间的相互通信当中常常使用NAT-PT。

5.6.2 NAT的工作机制

这里写图片描述
      在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当10.0.0.10向163.221.120.9发送第一个包时生成这张表,并按照表中的映射关系进行处理。

      当私有网络内的多台机器同时都要与外部进行通信,仅仅转换IP地址,人们担心全局IP地址是否不够用。这是采用包含端口号一起转换的方式(NAPT)可以解决这个问题。
这里写图片描述

      在使用TCP或UDP的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP还是UDP)五项内容都一致时才被认为是同一个通信连接。此时所使用的正是NAPT。

      这种转换表在NAT路由器上自动生成。例如,在TCP情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中被删除。

5.6.3 NAT-PT(NAPT-PT)

      现在很多互联网服务都基于IPv4。如果这些服务不能做到IPv6中也能正常使用的话,搭建IPv6网络环境的有时也就无从谈起。

      为此,就产生了NAT-PT(NAPT-PT)规范,PT是Protocol Translatio的缩写。NAT-PT是将IPv6的首部转换为IPv4的首部的一种技术。有了这种技术,那些只有IPv6地址的主机也就能够与IPv4地址的其他主机进行通信了。
这里写图片描述

5.6.4 NAT的潜在问题

由于NAT(NAPT)都依赖于自己的转化表,因此会有几点限制:

  • 无法从NAT的外部向内部服务器建立连接。
  • 转化表的生成以转换操作都会产生一定的开销。
  • 通信过程中一旦NAT遇到异常需重新启动时,所有的TCP连接都将被重置。
  • 即使备置两台NAT做容灾备份,TCP连接还是会被断开。

5.6.5 解决NAT的潜在问题与NAT穿越

解决NAT上述潜在的问题有两种方法:

  • 第一种方法就是改用IPv6。在IPv6环境下可用的IP地址范围有了极大的扩展,以至于公司或家庭当中所有设备都可以配置一个全局IP地址。因为如果地址枯竭问题解决了,就没必要使用NAT了。
  • 另一种方法是,即使是在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而进行通信。在NAT内侧(私有IP地址的一边)主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外侧。而NAT并不知道这个虚拟包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT外侧的主机与内侧的主机建立连接进行通信。有了这个办法,就可以让那些处在不同NAT内侧的主机之间也能够进行相互通信。此外,应用还可以与NAT路由器进行通信生成NAT表,并通过一定方法将NAT路由器上附属的全局IP地址传给应用。
    如此一来,NAT外侧与内侧可以进行通信,这种现象叫做“NAT穿越”。于是NAT那个“无法从NAT的外部向内部服务器建立连接”的问题也就迎刃而解了。而且这种方法与已有的IPv4环境兼容性非常好,即使不迁移到IPv6也能通信自如。出于这些优势,市面上已经出现了大量与NAT紧密集合的应用(由此,IPv4的寿命又被延长,向IPv6的迁移也就放慢脚步了)。

5.7 IP隧道

这里写图片描述

      网络A、B使用IPv6,如果处于中间位置的网络C支持使用IPv4的话,网络A与网络B之间将无法直接进行通信。为了让它们之间正常通信,这时必须得采用IP隧道的功能。

      IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之追加一个IPv4的首部以后在转发给网络C。

      一般情况下,紧接着IP首部的是TCP/UDP的首部。然而,现在的应用当中“IP首部的后面还是IP首部”或者“IP首部的后面是IPv6的首部”等情况与日俱增。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做“IP隧道”。
这里写图片描述

NAT-PT和隧道的差别
NAT-PT和隧道都是IPv4向IPv6过渡的技术,但是它们之间的实现和适用范围都是有很大的不同的。
首先报文转换和转发的方式不同,这个是NAT-PT和隧道最根本的差别。NAT-PT是对报文的网络层内容进行转换修改,剥离原先的报文头,替换为转换之后的报文头(IPv4àIPv6或者IPv6àIPv4);而隧道是对初始报文作另一层报文封装,根据隧道的不同类型加上相应的报文头。
正是由于转换的方式不同,导致他们检查报文的方式也不同。NAT-PT会检查并且可以更改报文中的端口号;而隧道从来不会检查报文的传输层内容。
转换方式的不同同样致使了他们的使用范围不一样,NAT-PT一般适用于IPv4与IPv6不同网络中主机互相访问的环境中;而隧道一般用于实现一种网络协议跨越另一种网络协议之间的通讯。所以,形成NAT-PT的环境只需要有一台可以进行NAT-PT转换的设备即可;而构造一种隧道的环境就必须要两台设备形成一个隧道。

《图解TCP/IP:第5版》下载地址:
http://download.csdn.net/download/xunzaosiyecao/10245906

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值