网络层与IP协议

178 阅读15分钟

一、网络层

IP协议运作在网络层网络层,而网络层的主要任务是把分组从源端传到目的端,为分组交换网上的不同主机提供通信服务。

网络层传输单位是数据报。

功能一:路由选择与分组转发

功能二:异构网络互联,连接不同媒介

功能三:定义IP协议的逻辑地址

二、IP数据包格式

image.png IP 数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度一般可变,整个 IP 数据包的最大长度为65535字节。

版本

【4位】指 IP 协议版本。通信双方使用的版本必须一致,IPv4 值为0100,IPv6 值为0110。

首部长度

【4位】表示首部的长度,IP 头的最大长度为60字节,而该字段占4位,最大表示的十进制数为15,所以该字段的值*4才代表首部长度所占的字节数。切记当首部长度不是4的整数倍时,必须利用最后的填充字段填充。

服务类型

【8位】其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于 QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。

TOS 只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略 TOS 字段。

总长度

【16位】指首部和数据之和的长度,单位为字节,总长度字段为16位,因此数据报的最大长度为2^16 - 1 = 65535,在以太网中允许的最大包长(MTU)为1500字节,当超过网络允许的最大长度时需将过长的数据包分片。

标识

【16位】用于数据包在分段重组时标识其序列号。将数据分段后,打包成IP包,IP包因走的路由上不同,会产生不同的到达目地的时间,到达目地的后再根据标识符进行重新组装还原。该字段要与标志、段偏移一起使用的才能达到分段组装的目标。该字段要与标志、段偏移一起使用的才能达到分段组装的目标。

标志

【3位】三位从左到右分别是MF、DF、未用。MF=1 表示后面还有分段的数据包,MF=0 表示没有更多分片(即最后一个分片)。DF=1 表示路由器不能对该数据包分段,DF=0 表示数据包可以被分段。

片偏移

【13位】用于标识该数据段在上层初始数据报文中的偏移量。如果某个包含分段的上层报文的IP数据包在传送时丢失,则整个一系列包含分段的上层数据包的IP包都会要求重传。

生存时间

【8位】生存时间常用的字段是TTL(Time To Live),表示数据报在网络中的寿命,由发出的源站点设置,目的就是防止无法交付的数据报在因特网中无限制的兜圈子,白白消耗资源。TTL字段是以跳数限制的,每经过一个路由器,在转发之前就把跳数减为1,当TTL减为0时就会丢弃这个数据报,因为数据报在因特网中最大经过的路由器是255。

协议

【8位】协议字段指数据报携带的数据是使用何种协议的,以便使目的主机的IP层知道将数据部分上交给那个处理过程。

首部校验和

【16位】这个字段只检验数据报的首部,不包括数据部分。这是因为数据报没经过一次路由器,都要重新计算一下首部校验和(因为,一些字段如生存时间、标志、片偏移等可能发生变化)。

源地址

【32位】表示发送端的IP地址。

目的地址

【32位】表示接收端的IP地址。

可选字段

【25位】该字段大小长度可变,从1字节到40字节不等。用来标识 IP 选项,主要有:安全和处理限制(Security)、记录路径(Record Route)、时间戳(Timestamps)、宽松源站选路(Loose Source Routing)、严格的源站选路(Strict Source Routing)等。

填充

【7位】前面字段加起来不是4的整数倍时,该字段填充全0补齐为4字节的倍数。

type和code

type带边类型,code代表具体情况。 详见下表

image.png

三、冲突域和广播域

冲突域

一个站点向另一个站点发出信号,除目的站点外,有多少站点能收到这个信息,这些站点就构成一个冲突域。在同一个冲突域中的每个节点都能收到所有被发送的帧,冲突域是基于第一层(物理层)。 传统共享式以太网的典型代表是总线型以太网。在这种类型的以太网中,通信信道只有一个,采用介质共享(介质争用)的访问方法(CSMA/CD介质访问方法)。每个站点在发送数据之前首先要侦听网络是否空闲,如果空闲就发送数据。否则,继续侦听直到网络空闲。如果两个站点同时检测到介质空闲并同时发送出一帧数据,则会导致数据帧的冲突,双方的数据帧均被破坏。这时,两个站点将采用"二进制指数退避"的方法各自等待一段随机的时间再侦听、发送。   在下图中,主机A只是想要发送一个单播数据包给主机B。但由于传统共享式以太网的广播性质,接入到总线上的所有主机都将收到此单播数据包。同时,此时如果任何第二方,包括主机B也要发送数据到总线上都将冲突,导致双方数据发送失败。我们称连接在总线上的所有主机共同构成了一个冲突域。

广播域

接收同样广播消息的节点的集合。如:在该集合中的任何一个节点传输一个广播帧,则所有其他能收到这个帧的节点都被认为是该广播帧的一部分。由于许多设备都极易产生广播,所以如果不维护,就会消耗大量的带宽,降低网络的效率。由于广播域被认为是OSI中的第二层概念,所以像Hub,交换机等第一,第二层设备连接的节点被认为都是在同一个广播域。而路由器,第三层交换机则可以划分广播域,即可以连接不同的广播域。

四、ARP协议

1. 什么是arp协议

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

2、ARP原理及流程

在任何时候,一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。

image.png

设定主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01; 主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;

当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:

1)根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。

2)如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

3)主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。

4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。

5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

3、ARP缓存

每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。静态项目一直保留在缓存中,直到重新启动计算机为止。

四、常用的ARP命令

1、华为系统中常用arp命令

[Huawei]arp speed-limit source-mac maximum 10 //配置根据任意源MAC地址进行ARP报文限速的限速值

[Huawei]arp speed-limit source-mac 1000-0000-0000 maximum 10 //配置对指定MAC地址用户的ARP报文进行限速的限速值

[Huawei]arp speed-limit source-ip 10.1.1.1 maximum 30 //配置对指定IP地址用户的ARP报文进行限速的限速值, 缺省30个

[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit 10 //配置ARP报文的限速值

[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit enable //使能ARP报文限速功能

[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit alarm enable //使能ARP报文限速丢弃告警功能

[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit alarm threshold 100 //配置ARP报文限速丢弃告警阈值,缺省为100

[Huawei-vlan10]arp anti-attack rate-limit 10

[Huawei-vlan10]arp anti-attack rate-limit enable

[Huawei-vlan10]arp anti-attack rate-limit alarm enable

[Huawei-vlan10]arp anti-attack rate-limit alarm threshold 100

[Huawei]arp-miss speed-limit source-ip maximum 10 //配置根据源IP地址进行ARP Miss消息限速的限速值

[Huawei]arp-miss speed-limit source-ip 10.1.1.1 maximum 10 //配置对指定IP地址用户的ARP Miss消息进行限速的限速值

[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit enable //使能ARP Miss消息限速功能

[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit alarm enable //使能ARP Miss消息限速丢弃告警功能

[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit alarm threshold 100 //配置ARP Miss消息限速丢弃告警阈值,缺省为100

[Huawei-vlan10]arp-miss anti-attack rate-limit enable

[Huawei-vlan10]arp-miss anti-attack rate-limit alarm enable

[Huawei-vlan10]arp-miss anti-attack rate-limit alarm threshold 100

[Huawei]arp learning strict //配置全局ARP表项严格学习功能

[Huawei-GigabitEthernet0/0/1]arp-limit vlan 10 maximum 10 //配置基于二层接口的ARP表项限制

[Huawei]display arp anti-attack configuration all //查看ARP防攻击配置

[Huawei]display arp-limit //查看接口可以学习到的动态ARP表项数目的最大值

[Huawei]display arp learning strict //查看全局和所有VLANIF接口上的ARP表项严格学习情况

[Huawei]arp anti-attack entry-check fixed-mac enable //配置ARP表项固化功能

[Huawei]arp anti-attack entry-check fixed-all enable

[Huawei]arp anti-attack entry-check send-ack enable

[Huawei-Vlanif10]arp anti-attack entry-check fixed-mac enable //接口使能ARP表项固化功能

[Huawei-Vlanif10]arp anti-attack entry-check fixed-all enable

[Huawei-Vlanif10]arp anti-attack entry-check send-ack enable

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind enable //使能动态ARP检测功能

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item ip-address //配置对ARP报文进行绑定表匹配检查的检查项

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item mac-address

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item vlan

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind alarm enable //使能动态ARP检测丢弃报文告警功能

[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind alarm threshold 100 //配置动态ARP检测丢弃报文告警阈值, 缺省为100

[Huawei]dhcp enable //全局使能DHCP功能

[Huawei]dhcp snooping enable //全局使能DHCP Snooping功能

[Huawei-GigabitEthernet0/0/1]dhcp snooping enable //使能接口的DHCP Snooping功能

[Huawei-GigabitEthernet0/0/1]dhcp snooping trusted //配置接口为信任状态

[Huawei-vlan10]dhcp snooping enable

[Huawei-vlan10]dhcp snooping trusted interface GigabitEthernet 0/0/1

[Huawei]arp anti-attack gateway-duplicate enable //使能ARP防网关冲突攻击功能

[Huawei-Vlanif10]arp gratuitous-arp send enable //使能发送免费ARP报文的功能

[Huawei-Vlanif10]arp gratuitous-arp send interval 60 //配置发送免费ARP报文的时间间隔,缺省为60秒

[Huawei]arp anti-attack packet-check sender-mac //使能ARP报文合法性检查功能,并指定ARP报文合法性检查项

[Huawei-Vlanif10]arp learning dhcp-trigger //使能DHCP触发ARP学习功能

[Huawei]display arp anti-attack configuration check user-bind interface GigabitEthernet 0/0/1 //查看VLAN或接口下动态ARP检测的相关配置

[Huawei]display arp anti-attack gateway-duplicate item //查看ARP防网关冲突攻击表项

[Huawei]display arp packet statistics //查看ARP处理的报文统计数据

[Huawei]display arp anti-attack statistics check user-bind interface g0/0/1 //查看接口下进行ARP报文绑定表匹配检查的ARP报文丢弃计数

[Huawei]display arp anti-attack arpmiss-record-info //查看ARP Miss消息限速触发时的相关信息

reset arp packet statistics //清除ARP报文的统计信息

reset arp anti-attack statistics check user-bind interface g0/0/1 //清除由于不匹配绑定表而丢弃的ARP报文计数

reset arp anti-attack statistics rate-limit //清除由于ARP报文超过速率限制阈值而被丢弃的计数

[Huawei]arp anti-attack log-trap-timer 1 //配置对潜在的ARP攻击行为发送告警的时间间隔

2、windiows

·arp -a或arp -g   用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP高速缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。

显示所有接口的当前 ARP 缓存表。要显示特定 IP 地址的 ARP 缓存项,请使用带有 InetAddr 参数的 arp -a,此处的 InetAddr 代表 IP 地址。如果未指定 InetAddr,则使用第一个适用的接口。要显示特定接口的 ARP 缓存表,请将 -N IfaceAddr 参数与 -a 参数一起使用,此处的 IfaceAddr 代表指派给该接口的 IP 地址。-N 参数区分大小写。

  ·arp -a IP   如果我们有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。

  ·arp -s IP 物理地址   我们可以向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。

  ·arp -d IP   使用本命令能够人工删除一个静态项目。删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。要删除所有项,请使用星号 (*) 通配符代替 InetAddr。