"网络层(在TCP/IP体系结构中称为网际互连层)既要解决不同网络节点间通信的路由和协议识别问题,又要通过路由选择策略解决网络拥塞问题,尽可能提高网络通信的可靠性。"
"网络层中的每个网络都通过其网络地址,即NSAP(网络服务访问点)来标识,网络中的每个节点都有一个NASP,这个NASP就是由对应网络所运行的网络层通信协议来定义的,在TCP/IP协议网络中,这个协议就是IP协议,对应的NASP就是IP地址。"
网络层主要作用:
- 网络层向传输层提供的服务有两种:面向连接的网络服务(虚电路)和无连接的网络服务(数据报服务)。
- 为网络间通信提供路由选择(面向无连接的网络服务)
- 数据包封装和解封装
- 拥塞控制
IP协议的基本功能:
- 寻址
- 数据报的封装
- 分段与重组
- 注:目前主流的IPv4协议簇中包括了三个协议:IP、ARP、ICMP
IPv4数据报头部格式
版本(Version)
版本字段指定了IP数据报中使用的IP协议版本,占四位。如果协议是IPV4,则值为0100。
头部长度(Header Length)
头部长度字段指示IP数据报头部的总长度,IP数据报头部的总长度以4字节为单位,该字段占4位。当报头中无选项字段时,报头的总长度为5,也就是5×4=20字节(此时,报头长度的值为0101)。这就是说IP数据报头部固定部分长度为20字节。当IP头部长度为1111时,头部的固定长度为15×4=60字节。但报头长度必须是32位(四字节)的整数倍,如果不是,需要在选项字段的填充(PAD)字段中补0凑齐。
区分服务(Differentialted Services)
最开始IP数据报的这个字段为优先级和服务类型字段,又称为服务类型(ToS)字段,用于表示数据报的优先级和服务类型,占八位。它包括一个3位长度的优先级、4位长度的标志位。标志位分别是D(Delay延迟)、T(Throughput吞吐量)、R(Reliability可靠性)和C(Cost开销),分别表示延迟、吞吐量、可靠性和开销值,用来获得更好的服务。最高1位未用。
1998年IETF在RFC2474中把IP数据报中ToS字段改名为服务字段,同样为8位,前6位构成DSCP(Different Services Code Point,区分服务码点),是IP优先级和服务类型字段的组合,定义了0~63共64个优先级。最后两位未使用。无论是哪种版本,该字段只有在使用区分服务时才起作用,如果没有区分服务,则该字段值为0。
总长度(Total Length)
总长度字段标识整个IP数据报的总长度,包括报头和数据部分,整个IP数据报的总长度以字节为单位,该字段占16位。由此可得出,IPv4数据报的最大长度为216−1字节即65535字节(64KB)。 说明:在网络层下面的每一种数据链路层都有自己的格式,其中包括表示数据字段的最大长度,这称为最大传送单元(Maximum Transfer Unit,MTU)。当一个数据报封装成链路层的帧时,此数据报的总长度(包括报头和数据部分)一定不能超过下面的数据链路层的MTU值
标识(Identification)
标识字段用于表示IP数据报的标识符,占16位,每个IP数据报有一个唯一的标识符。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给整个标识字段。但整个标识并不是序号,因为IP是无连接服务,数据报不存在按序接受的问题。当数据报由于长度超过下面数据链路层的MTU(最大传输单元)值而必须分段的时候,这个标识符的值就被复制到所有的数据报分段的标识字段中。相同的标识字段的值分段后的各数据报分段最后能正确地组装成原来的数据报。
标志(Flags)
标志字段用以指出该IP数据报后面是否还有分段,也就是这个字段时分段标志,占3位。目前只有前两位有意义:最低以为记为MF(More Fragment),如果MF=1,则表示后面还有分段,如果MF=0表示这已是某个数据报的最后一个分段;中间一位记为DF(Don’t Fragment),当DF=1时表示不允许分段,DF=0表示允许分段;最高1位没有使用。
段偏移(Fragment Offset)
段偏移字段用以指出该分段在数据报中的相对位置,也就是说,相对于用户数据字段的起点,该分段从何处开始,占13位。若有分段,段偏移以8字节为偏移单位,即每个分段的长度一定是8字节(64位)的整数倍。第一个分段偏移值就是0 0000 0000 0000,如果第一个分段一共是64字节,则0 0000 0000 1001,相当于10进制数的9,因为从第9个“8字节”数据块开始的。如果没有分段,则该字段值为0。
生存时间(Time To Live)
生存时间字段用来标识IP数据报在网络中传输的有效期,以秒来计数,占8位。最初的设计是以秒为单位,没经过一个路由器时,就在TTL(Time To Live)中减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1s,就把TTL值减1。TTL的建议值是32s,最长是28−1=255s。现在通常认为这个TTL是指数据报允许经过的路由器数,每经过一个路由器,则TTL减1,当TTL值为0时,就丢弃这个数据报。设定生存时间是为了防止数据报在网络中无限制地循环转发。
协议(Protocol)
协议字段用来标识此IP数据报在传输层所采用的协议类型(如TCP、UDP或ICMP等等),以便使目的主机的IP层直到应将数据部分上交给哪个处理过程,占8位。如TCP的协议号是6,等于二进制的0000 1010,UDP的协议号是17,等于二进制的0001 0001。
校验和(Checksum)
校验和字段用来检验IP数据报的报头部分(不包过"数据"部分)在传输到接收端后是否发生了变化,占16位。这是因为数据报每经过一个路由器,路由器都要重新计算一下报头检验和(因为一些字段,如生存时间、标识、段偏移等都可能发生变化),不检验数据部分可减少计算的工作量。
源地址/目的地址(Source Address/Destination Address)
源地址/目的地址这两个字段分别表示该IP数据报发送者和接受者的IP地址,各占32位。在这个数据报传送过程中,无论经过什么路由,无论如何分段,此两字段一直保持不变。
ARP协议
ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址还是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因为发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。ARP就是实现这个功能的协议。
ARP协议报文格式
ARP是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。
- 硬件类型:占两字节,表示ARP报文可以在哪种类型的网络上传输,值为1时表示为以太网地址。
- 上层协议类型:占两字节,表示硬件地址要映射的协议地址类型,映射IP地址时的值为0x0800。
- MAC地址长度:占一字节,标识MAC地址长度,以字节为单位,此处为6。
- IP协议地址长度:占一字节,标识IP地址长度,以字节为单位,此处为4。
- 操作类型:占2字节,指定本次ARP报文类型。1标识ARP请求报文,2标识ARP应答报文。
- 源MAC地址:占6字节,标识发送设备的硬件地址。
- 源IP地址:占4字节,标识发送方设备的IP地址。
- 目的MAC地址:占6字节,表示接收方设备的硬件地址,在请求报文中该字段值全为0,即00-00-00-00-00-00,表示任意地址,因为现在不知道这个MAC地址。
- 目的IP地址:占4字节,表示接受方的IP地址。
ARP报文不是直接在网络层上发送的,它还是需要向下传输到数据链路层,所以当ARP报文传输到数据链路层之后,需要再次进行封装。以以太网为例,ARP报文传输到以太网数据链路层后会形成ARP帧。ARP帧如下图所示,他就是在ARP报文前面加了一个以太网帧头。
- 目的MAC地址:占6字节,如果是ARP请求帧,因为它是一个广播帧,所以要填上广播MAC地址(FF-FF-FF-FF-FF-FF),其目标主机是网络上的所有主机。
- 源MAC地址:占6字节,这是发送ARP帧的节点MAC地址。
- 帧类型:占两字节,这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了。
ARP地址解析原理
- 同一网段的ARP地址解析流程
- 主机A首先查看自己的ARP表(它是一个IP地址与MAC地址的映射表),确定其中是否包含有主机B的IP地址和对应的MAC地址。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,则先缓存该数据报文,然后以广播方式(目的MAC地址为广播地址——FFFFFF,任意网段的节点都可以接受到)发送一个ARP请求报文。ARP请求报文中的发送端(源)IP地址和发送端MAC地址分别为主机A的IP地址(192.168.1.1)和MAC地址(0002-6779-0F4C),目的IP地址和目的MAC地址为主机B的IP地址(192.168.1.2)和全0的MAC地址。因为ARP请求报文是以广播方式发送,所以该网段上的所有主机都可以接收到该请求包,但只有其IP地址与目的IP地址一致的主机B才会对该请求进行处理。
- 主机B将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。然后以单播方式向主机A发送一个ARP相应报文,应答报文中就包含了自己的MAC地址,也就是原来在请求报文中要请求的目的MAC地址。
- 主机A收到来自主机B的ARP响应报文之后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将原来缓存的IP数据包再次修改(在目的MAC地址字段填上主机B的MAC地址)后发送出去。
- 不同网段的ARP地址解析流程
- 如果主机A不知道网关的MAC地址(也就是主机A的ARP表中没有网关对应的MAC地址表项),则主机A先在本网段中发出一个ARP请求广播,ARP请求报文中的目的IP地址为网关的IP地址,代表其目的就是想获得网关的MAC地址。如果主机A已经知道网关的MAC地址,则略过此步。
- 网关收到ARP广播包后同样会向主机A发回一个ARP应答包。当主机A收到的应答包中获得网关的MAC地址后,在主机A向主机B发送的原报文的目的MAC地址字段填上网关的MAC地址后发给网关。
- 如果网关的ARP表中已有主机B对应的MAC地址,则网关直接将在来自主机A的报文中的目的MAC地址字段填上主机B的MAC地址后转发给B。
- 如果网关ARP表中没有主机B的MAC地址,网关会再次向主机B所在的网段发送ARP广播请求,此时目的IP地址为主机B的IP地址,当网关从收到来自主机B的应答报文中获得主机B的MAC地址后,就可以将主机A发来的报文重新在目的MAC地址字段填上主机B的MAC地址后发送给B。
ICMP协议
ICMP(Internet Control Message Protocol)因特网控制报文协议。它是IPv4协议簇中的一个子协议,用于IP主机、路由器之间传递控制消息。控制消息是在网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP协议与ARP协议不同,ICMP靠IP协议来完成任务,所以ICMP报文中要封装IP头部。它与传输层协议(如TCP和UDP)的目的不同,一般不用来在端系统之间传送数据,不被用户网络程序直接使用,除了像Ping和Tracert这样的诊断程序。
ICMP协议报文格式
- 类型:占一字节,标识ICMP报文的类型,目前已定义了14种,从类型值来看ICMP报文可以分为两大类。第一类是取值为1~127的差错报文,第2类是取值128以上的信息报文。
- 代码:占一字节,标识对应ICMP报文的代码。它与类型字段一起共同标识了ICMP报文的详细类型。
- 校验和:这是对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错。
- 标识:占两字节,用于标识本ICMP进程,但仅适用于回显请求和应答ICMP报文,对于目标不可达ICMP报文和超时ICMP报文等,该字段的值为0。
ICMP消息类型 | 用途说明 |
---|---|
回显请求 | Ping工具通过发送ICMP回显消息检查特定节点的IPv4连接以排查网络问题。类型值为0 |
回显应答 | 节点发送回显答复消息响应ICMP回显消息。类型值为8 |
重定向 | 路由器发送“重定向”消息,告诉发送主机到目标IPv4地址更好的路由。类型值为5 |
源抑制 | 路由器发送“源结束”消息,告诉发送主机它们的IPv4数据报将被丢弃——因为路由器上发生了拥塞。于是,发送主机将以较低的频度发送数据报。类型值为4 |
超时 | 这个消息有两种用途。第一,当超过IP生存期时向发送系统发出错误信息。第二,如果分段的IP数据报没有在某种期限内重新组合,这个消息将通知发送系统。类型值为11 |
无法到达目标 | 路由器和目标主机发送“无法到达目标”消息,通知发送主机它们的数据无法传送。类型值为3 |
常见的ICMP报文
- 响应请求
- 目标不可达,源抑制和超时报文
- 时间戳请求
时间戳请求报文(类型值字段13)和时间戳应答报文(类型值字段14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接受方收到请求后填充接受时间戳后以类型值字段14的报文格式返回,发送方计算这个时间差。有些系统不响应这种报文。
路由和路由算法
网络层的主要功能就是将分组从源节点路由到目的节点中,而且在大多数计算机网络中,采用的是数据报分组交换的方式,数据报分组需要经过多跳(Hop,也就是要经过多少个路由器)才能到达目的地。路由功能其实是一种数据报分组交换路径选择行为,是网络层的一种基本功能。
路由的分类
路由就是指三层设备从一个接口上收到数据包,根据数据包的目的地址进行定向,并转发到另一个接口的过程。但在这条路由路径上,至少需要一个中间结点,那就是提供路由功能的设备,如路由器和三层交换机。路由与桥接对比的主要区别在于,桥接发生在OSI参考协议的第二层(链接层),连接的是同一网络或同一子网的不同网段,而路由发生在第三层(网络层),连接的是不同网络或不同子网。
- 静态路由及特点
- 手动配置
静态路由中包括目的节点或目的网络的IP地址,及数据包从当前路由器开始路由的第一个下一跳(通常是网关)所对应的接口或者IP地址。
路由路径固定不变
不可通告性
静态路由信息在默认情况下是私有的,不会通告给其它路由器,也就是当在一个路由器上配置了某一条静态路由时,它不会被通告网络中相连的其它路由器。
- 单向性
静态路由具有单向性,也就是它仅为数据提供沿着下一跳的方向进行路由,不提供方向路由。所以如果你想要使源节点与目的节点或网络进行双向通信,就必须同时配置回程静态路由。
正向路由:在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.3.2/24 作为源节点,以C结点IP地址10.16.2.2/24 作为下一跳地址);
回程路由:在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
- 接力性
如果某条静态路由中间经过的跳数大于1(也就是整条路由经历了三个或以上的路由器结点),则必须在除最后一个路由器外的其它路由上依次配置到达相同目的节点或目的网络的静态路由,这就是静态路由的接力,否则仅在源路由器上配置静态路由还是不可以的。
下图所示是一个三个路由器串联的简单网络,各个路由器及结点以及PC机的IP地址在图中做了标注,PC1已经配置好指向R1的A结点的地址的网关,现假设要使PC1能Ping通PC2,则需要配置一下四条路由(两条正向,两条反向)。
在R1路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以C结点IP地址 10.16.2.2/24 作为下一跳地址)。
在R2路由器上配置了到达PC2的正向静态路由(以PC2 10.16.4.2/24 作为目的节点,以E结点IP地址 10.16.3.2/24 作为下一跳地址)。
在R3路由上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以D结点IP地址 10.16.3.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的路由路径。
在R2路由器上配置一条到达PC1的回程静态路由(以PC1 10.16.1.1/24 作为目的节点,以B结点IP地址 10.16.2.1/24 作为下一跳地址),以提供Ping过程回程ICMP消息的接力路由路径。
- 优先级较高
如果在一个路由器同时有一条目的地址相同的静态路由,则首先选择的是静态路由。要使对应的默认路由起作用,就必须删除相同目的网络或目的节点的静态路由,否则会冲突,默认路由不起作用。
- 适用小型网络
- 动态路由
静态路由对于小型化且变化不是很频繁的网络来说还是可行的,如局域网。但是对于较大型的广域网来说,由于拓扑结构较复杂,且网络结构可能经常变动,静态路由就不再适用了,通常采用更加灵活,更具自动特性的动态路由。总体来说,动态路由具有以下几个方面的特点:
- 自动生成
动态路由的一个最重要的特点就是在网络某条路由所包括的路由器同时启动了某种动态路由协议,通告了各自所直接连接的网络后,则这些路由器间就会自动生成这些路由器直接连接的网络间的路由表项,管理员无须一一手动创建。
自动调整
自动通告
自动生成双向路由
仅可生成网络间的路由表项 动态路由仅可生成各路由器所直接连接的各个网络或子网间的路由表项,不能生成到达具体节点或主机的动态路由表项,如果仅需生成到达某个结点或主机的路由,则需要选择静态路由。
路由算法
二层交换机和三层交换机
- 二层交换机
二层交换机就是传统意义上的交换,使用mac地址作为转发依据,建立起mac到端口的映射(mac表,类似于(00:08:06:09:ab:01 port1))。
二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表(mac表)中。具体的工作流程如下:
当交换机从某个端口收到一个数据帧,它先读取帧头中的源MAC地址,这样它就知道源MAC地址的主机是连在哪个端口上的;(学习的是源mac)
再去读取帧头中的目的MAC地址,并在mac表中查找相应的端口;
如果mac表中有与这目的MAC地址对应的端口,把数据帧直接复制到这端口上;
如果mac表中找不到相应的端口,则把数据帧广播到所有端口上,当目的主机对源主机进行回应时,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。
不断的循环这个过程,对于全网的MAC地址信息都可以学习到,二层交换机就是这样建立和维护它自己的地址表。
- 三层交换机
二层交换机的二层数据交换一般都是使用ASIC(Application Specific Integrated Circuit ,专用集成电路)的硬件芯片中的CAM表来实现的,因为是硬件转发,所以转发性能非常高。而三层交换机的三层转发也是依靠ASIC芯片完成的(路由器的路由功能主要依靠CPU软件进行的),但其中除了二层交换用的CAM表外,还保存有专门用于三层转发的三层硬件转发表。
三层交换示例:
在三层交换中,同一交换机上的不同网段主机通信和不同交换机上的不同网段主机通信的基本原理是一样的,只是具体流程有所区别。本节仅以比较简单的"同一交换机上的不同网段主机通信"这种情形来解释上节介绍的三层交换原理。 如图所示,通信的源、目的主机连接在同一台三层交换机上,但它们位于不同VLAN(也位于不同网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。图中已标明了两台主机的MAC地址、IP地址、网关IP地址(也就是对应VLAN接口IP地址),以及三层交换机的MAC地址。
【说明】本示例中虽然划分了VLAN,但是在下面的数据转发流程中我们并没有提到VLAN标记,那是因为在本示例中,通信双方主机都连接到同一个三层交换机上,端口类型均为Access类型,发送和接收的数据帧都是无VLAN标记的。在下节介绍的示例中,在数据的转发过程中将会涉及到VLAN标记问题。
当 PC A 要第一次向 PC B 发数据包时,数据包的传输流程如下:(假设三层交换机上当前还未建立任何硬件转发表项)
PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,觉得就这样直接发送肯定不行,于是把要发送的数据包先缓存起来。它知道这个数据包必须经过网关来转发,所以先查看一下自己是已经知道网关的MAC地址(也就是在PC A主机的ARP表中查看是否有与网关IP地址对应的MAC地址表项)。如果有,则直接把要发送给PC B的数据包在封装成数据帧时,把“目的MAC地址”字段的值设为网关的MAC地址(也就是三层交换机的MAC地址MAC S,交换机上各端口、各VLAN是共享一个或多个MAC地址的)。
如果PC A在自己的ARP表中没有找到网关MAC地址,则先向网关发出(其实是会向本VLAN内所有节点发出)一个ARP广播请求报文,以获取网关IP地址1.1.1.1所对应的MAC地址。此ARP请求报文的“源MAC地址”字段是PC A的MAC地址“MAC A”,“目的MAC地址”因为未知,以全0格式填充;“源IP地址”和“目的IP地址”字段分别填上PC A的IP地址(1.1.1.2)和网关的IP地址(1.1.1.1)。
ARP请求报文向下传输到了以太网数据链路层后被再次封装成以太网帧,以太网帧头中的“源MAC地址”字段值仍为PC A的MAC地址“MAC A”,“目的MAC地址”字段值为广播MAC地址FF-FF-FF-FF-FF-FF,“帧类型”字段填上ARP的协议号0x0806。
- 三层交换机在收到PC A发来的ARP请求报文后,检查请求报文发现被请求IP地址(也就是“目的IP地址”)是自己的三层接口IP地址,于是向 PCA 发回一个ARP应答报文,并将对应的三层接口MAC(MAC S)填充在应答报文中的“目的MAC地址“字段其中。同时通过对PC A发送的ARP请求报文分析,把PC A的IP地址与MAC地址对应关系(1.1.1.2<==>MAC A)记录到自己的ARP表中去,然后把PC A的IP地址(作为“目的IP地址”)、MAC地址(作为“下一跳MAC地址”),以及与交换机直接相连的端口号等信息下发到三层交换机ASIC芯片中的三层硬件转发表。此时在三层硬件转发表中就有了第一个转发表项,即PC A的转发表项。
【说明】在三层交换机中,最关键的就是它有一个专门用于三层转发的“三层硬件转发表”,它和“ARP表”之间有联系,但也有区别。ARP表中只是IP地址和MAC地址的映射关系,不包括转发出口,也不包括对应的VLAN ID,而三层硬件转发表中则包括了全部这些,形成一个:目的IP地址、VLAN ID、端口和下一跳MAC地址的关系表项。因为在进行三层转发时,改变的是帧封装后的源和目的MAC地址这两个字段,原来输入IP包中的“目的MAC地址”作为转发的“下一跳MAC地址”,原来的“源MAC地址”改为三层交换机自身的MAC地址,源和目的IP地址都不变(因为这是封装在帧的“数据”部分)。另外,三层转发表是存储在ASCI硬件芯片上的,直接由ASIC芯片调用,而ARP表是存储在内存中,由CPU软件调用。但三层硬件转发表项还是由CPU提供的。
PC A在收到网关的ARP应答报文后,把要发送给PC B的数据包经过帧封装后的 “目的MAC地址”修改为网关MAC地址(MAC S1),其它不变,先把数据包发给网关(三层交换机)。
三层交换机在收到这个数据包后,因为“目的MAC地址”为交换机自己的MAC地址,而且“目的IP地址”和“源IP地址”不在同一网段,所以会直接提交到负责三层交换的ASIC芯片,根据包中的“目的IP地址”(PC B的IP地址2.1.1.2)在三层硬件转发表中查看有无对应表项,因为是第一次通信,所以结果是查找失败,于是将数据包再转送到CPU去进行软件路由处理。
CPU同样会根据包中的“目的IP地址”去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查在ARP表中查找对应的MAC地址项。同样是由于是第一次查找,所以仍然查找失败。如果在ARP表中找到了对应的MAC地址,则数据可以直接由软件路由表转发了。
下面仍以在ARP表中也没找到PC B对应的MAC地址为例进行介绍。此时三层交换机CPU会在PC B所在网段的AN 3中所有端口发送一个ARP广播请求报文,查找“目的IP地址”为2.1.1.2所对应MAC地址。报文经过帧封装后的“源MAC地址”是三层交换机的MAC地址(MAC S),“目的MAC地址”全为0,“源IP地址”是VLAN 3网段的网关IP地址(2.1.1.1),“目的IP地址”是PC B的IP地址(2.1.1.2)。
PC B在收到三层交换机CPU发送的ARP请求报文后,检查发现被请求的IP地址是自己的IP地址,于是发送一个ARP应答报文,并将自己的MAC地址(MAC B)包含在其中。同时,将三层交换机上VLAN 3网段的网关IP地址与MAC地址的对应关系(2.1.1.1<==>MAC S)记录到自己的ARP表中去。
三层交换机CPU在收到PC B的ARP应答报文后,将其IP地址和MAC地址对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,把PC B的IP地址、MAC地址、进入交换机的端口号等信息下发到三层交换机的三层转发中。此时转发表中就有到达PC A和PC B这两条对应的表项了。
三层交换机CPU根据获得的PC B的MAC地址和端口信息,以及软件路由表信息,把由PC A发来的IP数据包转发给PC B,这样就完成了PC A到PC B的第一次单向通信。
由于芯片内部的三层引擎中已经保存了从PC A到达PC B的完整转发路径信息,所以以后PC A与PC B之间进行通信,或其它网段的站点想要与PC A或PC B进行通信时,三层交换机的ASIC芯片就会直接把包从对应的三层硬件转发表项中指定的端口转发出去,而不必再把包交给CPU进行路由处理。这就是所谓的“一次路由(指通过CPU路由表查到了对应的直连网段),多次交换”的原理,大大提高了转发速度。
三层交换机和路由器的区别
三层交换机与路由器的主要区别,之所以有人搞不清三层交换机和路由器之间的区别,最根本就是三层交换机也具有“路由”功能,与传统路由器的路由功能总体上是一致的。虽然如此,三层交换机与路由器还是存在着相当大的本质区别的。
- 主要功能不同
虽然三层交换机与路由器都具有路由功能,但我们不能因此而把它们等同起来,正如现在许多网络设备同时具备多种传统网络设备功能一样,就如现在有许多宽带路由器不仅具有路由功能,还提供了交换机端口、硬件防火墙功能,但不能把它与交换机或者防火墙等同起来一样。因为这些路由器的主要功能还是路由功能,其它功能只不过是其附加功能,其目的是使设备适用面更广、使其更加实用。这里的三层交换机也一样,它仍是交换机产品,只不过它是具备了一些基本的路由功能的交换机,它的主要功能仍是数据交换。也就是说它同时具备了数据交换和路由转发两种功能,但其主要功能还是数据交换;而路由器仅具有路由转发这一种主要功能。
- 主要适用的环境不一样
三层交换机的路由功能通常比较简单,因为它所面对的主要是简单的局域网连接。正因如此,三层交换机的路由功能通常比较简单,路由路径远没有路由器那么复杂。它用在局域网中的主要用途还是提供快速数据交换功能,满足局域网数据交换频繁的应用特点。 而路由器则不同,它的设计初哀就是为了满足不同类型的网络连接,虽然也适用于局域网之间的连接,但它的路由功能更多的体现在不同类型网络之间的互联上,如局域网与广域网之间的连接、不同协议的网络之间的连接等,所以路由器主要是用于不同类型的网络之间。它最主要的功能就是路由转发,解决好各种复杂路由路径网络的连接就是它的最终目的,所以路由器的路由功能通常非常强大,不仅适用于同种协议的局域网间,更适用于不同协议的局域网与广域网间。它的优势在于选择最佳路由、负荷分担、链路备份及和其他网络进行路由信息的交换等等路由器所具有功能。
- 性能体现不一样
从技术上讲,路由器和三层交换机在数据包交换操作上存在着明显区别。路由器一般由基于cpu的软件路由引擎执行数据包交换,而三层交换机通过硬件执行数据包交换。三层交换机在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。同时,三层交换机的路由查找是针对数据流的,它利用缓存技术,很容易利用ASIC技术来实现,因此,可以大大节约成本,并实现快速转发。而路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现,转发效率较低。 正因如此,从整体性能上比较的话,三层交换机的性能要远优于路由器,非常适用于数据交换频繁的局域网中;而路由器虽然路由功能非常强大,但它的数据包转发效率远低于三层交换机,更适合于数据交换不是很频繁的不同类型网络的互联,如局域网与互联网的互联。如果把路由器,特别是高档路由器用于局域网中,则在相当大程度上是一种浪费(就其强大的路由功能而言),而且还不能很好地满足局域网通信性能需求,影响子网间的正常通信。
综上所述,三层交换机与路由器之间还是存在着非常大的本质区别的。无论从哪方面来说,在局域网中进行多子网连接,最好还选用三层交换机,特别是在不同子网数据交换频繁的环境中。一方面可以确保子网间的通信性能需求,另一方面省去了另外购买交换机的投资。当然,如果子网间的通信不是很频繁,采用路由器也无可厚非,也可达到子网安全隔离相互通信的目的,具体要根据实际需求来定。