目录
IP地址的概述与应用
Internet protocol 互联网协议
一台电脑就是一台主机
一个服务器就是一个主机
IP地址就是互联网协议里的地址
- 主机唯一的标识,保证主机间正常通信
- 一种网络编码,用来确定网络中的一个节点(节点:一个主机就是一个节点(node))
- IP地址由32位二进制组成( 11010010.01001001.10001100.00000110-->转换为十进制210.73.140.6)
IPv4:Internet protocol version 4 (常见)32位
IPv6:Internet protocol version 6 (在公网使用)128位
IP地址由两部分组成
网络部分
主机部分
举例
192.168.233 .1
网络部分 主机部分
网段:就是指网络部分,如果所有的IP地址网络部分都一样,我们就说这些IP地址是一个网段的
IP地址分为A、B、C、D、E五类,每一类都有不同的划分规则
A类地址:第一位必须是0
1~126
B类地址:前两位必须是10
128~191
C类地址:前三位必须是110
192~223
D类地址:前四位必须是1110 ----》组播专用
E类地址:前四位必须是1111 ----》科研专用
公网:互联网上使用的是全球唯一的地址
A 11.*.*.* --》可以连接2^24-2=16777214台主机 ---》只有126个网段-->整个A类地空间共有2^31个地址,占整个IP地址空间的50%--->大型网络
B 172.16.*.* --》可以连接2^16-2=65534台主机 --》有2^14-1=16383个网段 ----》整个B类地空间共有2^30个地址,占整个IP地址空间的25%---》中型网络
C 192.168.0.* --》2^8-2=254 ---》有2^21-1=2097151个网段----》整个C类地空间共有2^29个地址,占整个IP地址空间的12.5%----》小微型网络
D ----》组播专用
E ----》科研专用
私网:相当于一个小的局域网,例如:三创
lookback 环回 --》lo接口 环回接口,环回地址 127.0.0.1
127开头的地址给所有电脑的lo接口使用,用来测试TCP/IP协议是否正常
ISP Internet service provider 互联网服务提供商
A、B、C三类IP地址的组成
网络部分
主机部分
class A
NETWORK HOST HOST HOST
class B
NETWORK NETWORK HOST HOST
class C
NETWORK NETWORK NETWORK HOST
私有地址
满足企业用户在内部网络中使用的需求
私有地址不能在Internet(公网)上使用
私有地址包括三组
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
子网掩码 netmask
用来确定IP的网络地址(网段)
32个二进制位
对应IP地址的网络部分用1表示
对应IP地址的主机部分用0表示
IP地址和子网掩码做逻辑与运算得到网络地址
0和任何数相与都等于0
1和任何数相与都等于任何数本身
A、B、C三类地址的默认子网掩码
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
举例
IP地址 子网掩码 网段
192.168.110.12 255.255.255.0 --》192.168.110.0
192.168.110.125 255.255.255.0 --》192.168.110.0
192.168.10.12 255.255.255.0 --》192.168.10.0
DHCP:动态主机配置协议 --》帮助电脑配置IP地址,子网掩码,网关,dns服务器
无线路由器上会启用DHCP功能
静态配置:手工配置
动态获得:就是局域网里的DHCP服务器给我们电脑分配IP地址,子网掩码,网关,dns服务器
配置主机的IP地址(Windows7)
操作步骤
在桌面上右击“网络”并选择“属性”
在“网络和共享中心”单击“更改适配器设置”
右击需要设置的本地连接,选择“属性”
选择“Internet协议版本4(TCP/IPv4)”
配置IP地址
ping命令是用来测试网络的质量
1.测试通还是不通
2.网络质量
lost 丢包率
时间(往返时间总和)网络测试工具
使用ping命令诊断网络连接
ping 127.0.0.1
验证本地计算机上是否正确配置了TCP/IP
ping 本地计算机的IP地址
验证其是否已正确地添加到网络中
ping 默认网关的IP地址
验证默认网关是否正常工作
是否可以与本地网络上的主机进行通信
ping远程主机的IP地址
验证是否可以通过路由器进行通信
ping -c 4 只ping四个包(Linux中)
arp协议
IP地址冲突:一个IP地址,2台或多台都在使用
一个人能上网,另外的不能上网
导致网络异常
手工配置IP地址
[root@changjinhu ~]# cd /etc/sysconfig/network-scripts/
[root@changjinhu network-scripts]# ls
ifcfg-ens33 #ens33网卡的配置文件 interface config 接口配置
[root@changjinhu network-scripts]#
ens33是系统里的第一个网卡的名字
[root@changjinhu network-scripts]# cat ifcfg-ens33
BOOTPROTO=none 静态配置IP地址 none --》静态配置(手工配置) dhcp就是动态获得,别的dhcp服务器给我们的机器分配IP地址
NAME=ens33 网络连接的名字
DEVICE=ens33 网卡的设备名
ONBOOT=yes 开机是否启动(激活) yes 启动 no 不启动
IPADDR=192.168.0.1 ip地址
NETMASK=255.255.255.0 子网掩码
GATEWAY=192.168.0.1 默认网关
DNS1=114.114.114.114 首选dns服务器地址
DNS2=192.168.0.1 备用dns服务器地址
查看默认网关,路由表
[root@changjinhu network-scripts]# ip route
default via 192.168.233.2 dev ens33 proto dhcp metric 100
192.168.233.0/24 dev ens33 proto kernel scope link src 192.168.233.136 metric 100
重启网络服务,获得新配置的IP地址
centos7 重启网络服务
service network restart
service NetworkManager stop
NetworkManager是一个网络连接管理服务,经常会导致我们的网络配置的IP地址出现服务启动不了,没有获得IP地址
centos8 重启网络服务
ifup ens33
[root@changjinhu network-scripts]# ifup ens33
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/13)
NetworkManager在centos8里不能关闭
IP包头的格式
版本 : 版本字段,IPv4
优先级与服务类型:提供三层的QoS
TTL:生命周期字段,经过一个路由器时减1,为0时,数据包丢弃。为了防止一个数据包在网络中无限的循环下去。
协议号:协议字段,用来标识封装的上层数据是UDP还是TCP,UDP是17,TCP是6.
17---UDP 无连接,不可靠,快 --》 QQ
6---TCP 面向连接,可靠 --》打电话
源地址
目的地址
IP地址的作用
用来标识一个节点的网络地址
有效IP地址段=网络部分(网段)+主机部分
路由器的作用是实现跨网段通信
子网划分:大的网络划分成小的网络
原因
满足不同网络对IP地址的需求
实现网络的层次性
IP地址分类
有类地址
无类地址
192.168.10.0/24 ---》254台主机 ---》划分成4个小的网络
网络部分 主机部分
划分的子网的个数: 2^n n是网络部分向主机部分借位的个数
每个子网可以容纳的主机数量: 2^m -2 m是主机部分剩余的位数主机部分全为0表示网段号
主机部分全为1表示广播地址
可变长子网掩码(VLSM)
VLSM允许把子网继续划分成更小的子网
1、192.168.220.0/24 划分成8个子网,要求你计算每个子网的网段号和子网掩码,有效IP地址段,每个子网的广播地址
子网划分题目
2、192.168.212.123/27 这是一个IP地址,请你计算这个IP所在网段和广播地址,有效IP地址范围
1.使用IP地址与子网掩码进行与运算,算出网段号
192.168.212.96/27
2^5-2=30
有效IP地址 192.168.212.96~126
广播地址 192.168.212.127
子网掩码 255.255.255.224练习
IP地址 172.28.192.17 255.255.0.0
子网掩码 255.255.224.0
这是一个IP地址,请你计算这个IP所在网段和广播地址,有效IP地址范围172.28.192.17/20
网段:172.28.192.0/20
广播地址:172.28.207.255/20
11001111.11111111
有效IP地址:172.28.192.1~172.28.207.254不平均分配
网段 子网掩码 有效主机地址数
192.168.100.0/25 255.255.255.128 126
192.168.100.128/26 255.255.255.192 62
192.168.100.192/27 255.255.255.224 30
192.168.100.224/27 222.255.255.224 30网络部分最多可以向主机部分借多少位?
192.168.212.123/32 ---》一个IP就是一个网段
192.168.212.123/30 ---》刚刚好可以有2个IP地址,2个IP地址就是一个网段管理地址:路由器管理地址/32
互联地址:设备互联/30
IP路由汇总
一个网络如果具备科学的IP编址,并且进行合理的规划,是可以利用多种手段减少设备路由表规模的。其中一个非常常见而且又有效的办法就是使用路由汇总(Route Summarization或者Route Aggregation)。
路由汇总又称为路由聚合,是将一组有规律的路由汇聚成一条路由,从而达到减小路由表规模以及优化设备资源利用率的目的,我们把汇聚之前的这组路由称为精细路由或者是明细路由,把汇聚之后的这条路由称为汇总路由或者是聚合路由
路由器的接口需要配置IP地址
交换机的接口不需要配置IP地址
给交换机配置IP地址是给vlan1配的
默认所有的接口都是vlan1
交换机:组建局域网 --》相同网段内的数据传输
路由器:将数据从一个网段送到另外一个网段
路由概述
路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程
路由器:能够将数据包转发到正确的目的地,并在转发过程中选择最佳的途径的设备 ---》中转站
路由器的工作原理
路由去如何知道我们的数据从哪里来到哪里去?
IP包:源IP地址和目的IP地址
路由器它自己如何判断哪条路径是最佳路径的?
路由表:路由
路由器如何知道他能去哪些地方?
路由表
路由表里有:目的网段,接口(从路由器自己的哪个地址出去),下一跳地址(对方路由器的ip)
路由表是在路由器的内存里的,停电会丢失
路由表
路由器中维护的路由条目的集合
路由器根据路由表做路径选择
路由表的形成
直连网段
配置IP地址,端口up状态,形成直连路由
非直连网段
路由的类型
直连路由:需要配置IP地址,同时需要激活网卡(up) --》自动产生,不需要配置
非直连路由:
静态路由 ---》适合网络规模比较小
有管理员手工配置的,是单向的
缺乏灵活性默认路由
当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口
stub network 末节网络
默认路由是特殊的静态路由,优先级比较低
配置网关,就是添加一条默认路由动态路由:路由器互相之间学习的,需要在每个路由器上启动动态路由协议 ---》适合网络规模比较大,路由器比较多
协议:rip、ospf、bgp只要不是直连的,如果想要通信,都要添加静态路由或动态路由
优先级:直连路由 ——》静态路由 --》动态路由 ---》默认路由
添加静态路由的步骤
1.给电脑配置IP地址
2.路由接口配置IP地址
3.给路由器添加静态路由,不直连的都要添加
4.在pc上ping通
网关(gateway):网络的关口,lan口的接口
路由器的工作过程
1.查看IP包的目的地址
2.计算出目标网段
3.到路由表里查看是否有到目标网段的路由
4.如果有就转发,没有就告诉客户机不能到达
在Linux里临时添加IP地址
ip add add 192.168.20.0/24 dev ens33
ip address add 192.168.20.0/24 dev ens33
添加一个新的静态路由
ip route add 192.168.30.0/24 via 192.168.0.5 dev ens33
目标网段/子网掩码 下一跳 从自己的哪个接口出去
网关的IP地址是和你的接口的IP地址在同一个网段
下一跳地址(网关的地址)必须和本机IP地址是同一网段的
ip route del default
删除默认网关,会导致不能上网
ping www.baidu.com ---》未知的名称或服务
ping 114.114.114.114 ---》网络不可达
添加默认网关
ip route add default via 192.168.20.0 dev ens33
下一跳地址(必须是和你的网络相同网段的IP地址)
ping的过程
1.如果是域名,先进行域名解析到具体的一个IP
2.将要ping的IP地址和自己的子网掩码进行与运算,得出相应的网段号
3.然后到自己的电脑里的路由表去查询是否有这个网段的路由
4.如果有,就发送,没有就告诉客户机不能到达
多网卡的目标:可以链路聚合,可以冗余,可以连接多个网段,可以和更多的网段通信,还可以做路由器
路由器转发数据包的封装过程
1.查路由表
直连路由 ——》静态路由 --》动态路由 ---》默认路由
2.
一路伴随着arp广播,伴随着源mac地址和目的mac地址的更换
路由器的作用:实现跨网段通信
将数据包从一个网络转发到另外一个网络
根据路由表转发数据包
路由表:
哪些设备有路由表?
电脑,手机,路由器,三层交换机---》能配置IP地址的设备都有路由表
IP地址是全局(全球)(整个互联网)使用的
mac地址只是在局域网使用的
路由器是隔离广播域的,默认情况下路由器是不会转发广播包的
路由器一个接口就是一个广播域
ARP协议概述
广播与广播域
广播:将广播地址作为目的地址的数据帧
广播域:网络中能接收到同一个广播所有节点的集合
局域网中主机的通信
IP地址与mac地址
什么是arp协议?只在局域网中使用
地址解析协议
将一个已知的IP地址解析成mac地址
IP协议在整个互联网中使用
arp协议:存放的是
arp报文
请求报文
广播
响应报文
单播
查看Linux里的arp缓存表
[root@localhost ~]# arp -a
? (192.168.233.1) at 00:50:56:c0:00:08 [ether] on ens33
? (192.168.233.254) at 00:50:56:fe:b8:cc [ether] on ens37
? (192.168.233.254) at 00:50:56:fe:b8:cc [ether] on ens33
gateway (192.168.233.2) at 00:50:56:e1:3b:6f [ether] on ens33
网络层
IP协议 -->打包方式,使用材料
arp协议的封装
目的mac:00:00:00:00:00:00 --》用0填充表示需要得到目的mac
目的ip:192.168.0.29
源mac:
源ip:192.168.0.4
帧的封装
目的mac:FF:FF:FF:FF:FF:FF
源mac:
ping 192.168.90.1的过程
1.拿目的ip 192.168.90.1和自己的子网掩码进行与运算,得到目的网段192.168.90.0
2.查看本机的路由表,是否有到达这个网段的路由
走默认路由
下一跳地址 192.168.0.1
3.查看arp缓存表里是否有下一跳地址 192.168.0.1的mac地址,如果有就直接封装帧,没有呢?发arp广播获得192.168.0.1的mac地址
4.得到了mac地址后,封装好数据,走物理层送出数据
如何获得整个局域网里的所有正在使用的ip地址对应的mac地址?
ping 192.168.0.1~254
[root@sc-mysql network-scripts]# arp -a|tr -d "()"|grep -v incomplete |awk '{print $2,$4}'
192.168.0.36 ac:07:5f:93:ba:3c
192.168.0.2 64:6e:97:66:1e:c4
192.168.0.99 00:e0:4c:26:5b:68
192.168.0.1 3c:f5:cc:49:16:04
192.168.0.237 00:e0:4c:24:b5:81
192.168.0.10 46:69:5c:ef:e2:c7
192.168.0.66 ac:d6:18:06:66:1b
[root@sc-mysql network-scripts]#
[root@localhost ~]# arp -d 192.168.233.254 删除
[root@localhost ~]# arp -a
? (192.168.233.1) at 00:50:56:c0:00:08 [ether] on ens33
? (192.168.233.254) at 00:50:56:fe:b8:cc [ether] on ens37
gateway (192.168.233.2) at 00:50:56:e1:3b:6f [ether] on ens33
arp协议 --》理解为一个侦察的协议
[root@localhost ~]# arp -s 192.168.233.2 00:50:56:e1:3b:6f arp静态绑定--》arp静态绑定后mac地址不会再替换,因为静态路由的优先级高于动态路由
arp静态绑定的好处是可以防止病毒
[root@localhost ~]# arp -a
? (192.168.233.1) at 00:50:56:c0:00:08 [ether] on ens33
? (192.168.233.254) at 00:50:56:fe:b8:cc [ether] on ens37
? (192.168.233.254) at 00:50:56:fe:b8:cc [ether] on ens33
gateway (192.168.233.2) at 00:50:56:e1:3b:6f [ether] PERM on ens33
[root@localhost ~]# 静态的arp记录和动态的有什么区别?
多个网卡配置了多个默认网关,导致不能上网?
[root@localhost ~]# tracepath -n www.baidu.com 是路由追踪的命令,查看连接到百度经过了哪些服务器
1?: [LOCALHOST] pmtu 1500
1: 192.168.233.2 0.128ms
1: 192.168.233.2 0.122ms
2: no reply
3: no reply
4: no reply
[root@localhost ~]# ip route
default via 192.168.233.2 dev ens33 proto dhcp metric 100 ---》metric值小的优先级高
default via 192.168.233.2 dev ens37 proto dhcp metric 101
192.168.30.0/24 dev ens33 proto kernel scope link src 192.168.30.0
192.168.30.0/24 dev ens33 proto kernel scope link src 192.168.30.0 metric 100
192.168.233.0/24 dev ens33 proto kernel scope link src 192.168.233.154 metric 100
192.168.233.0/24 dev ens37 proto kernel scope link src 192.168.233.155 metric 101
[root@localhost ~]#
一个电脑不要配置两个默认网关,会导致上不了网
解决办法:[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33
编辑文件,不要加gateway这一行
在Windows里查看路由表
route print
0.0.0.0 代表任意IP地址,任意的子网掩码
arp病毒:让局域网里的机器找不到正确的网关对应的mac地址
欺骗:让你的arp缓存表里的网关的mac地址发生变化,使用它告诉你的新的mac地址
防范措施:
安装防火墙 --》静态绑定正确的网关的mac地址
抓包工具分析出病毒毒源
静态绑定正确的网关的mac地址
IP地址不能和网关冲突,如果冲突会导致其他的电脑得到冲突的IP地址的mac地址,
arping 命令 查看IP地址对应的mac地址
[root@localhost network-scripts]# arping -I ens33 192.168.233.2 如果有多个网卡,要指定网卡(从哪个接口发)
ARPING 192.168.233.2 from 192.168.233.154 ens33
Unicast reply from 192.168.233.2 [00:50:56:E1:3B:6F] 0.629ms
Unicast reply from 192.168.233.2 [00:50:56:E1:3B:6F] 0.628ms
Unicast reply from 192.168.233.2 [00:50:56:E1:3B:6F] 0.637ms
Unicast reply from 192.168.233.2 [00:50:56:E1:3B:6F] 0.616ms
Unicast reply from 192.168.233.2 [00:50:56:E1:3B:6F] 0.638ms
不能arping自己的IP地址
什么是ARP
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。
大家都知道,OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层(网络层), MAC地址在第二层(数据链路层)。协议在发送数据包时,首先要封装第三层(IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务拿到MAC地址。
ARP工作过程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
- 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
- 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
- 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
- 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。
ARP缓存表和TTL
ARP表
网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。
ARP表项又分为动态ARP表项和静态ARP表项。
动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。
静态ARP表项
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。
配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。
静态ARP表项分为短静态ARP表项和长静态ARP表项。
- 在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。
- 在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。
一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。
当希望设备和指定用户只能使用某个固定的IP地址和MAC地址通信时,可以配置短静态ARP表项,当进一步希望限定这个用户只在某VLAN内的某个特定接口上连接时就可以配置长静态ARP表项。
ARP报文格式
在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。
ARP协议是通过报文进行工作的,是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。
前面Ethernet Address of destination, Ethernet Address of sender 和 Frame Type属于数据链路层的封装,往后的就是真正的ARP报文数据结构。
「字段」 | 「长度(bit)」 | 「含义」 |
---|
ARP请求
下面是Wireshark抓的ARP请求报文,大家可以看到数据链路层的Ethernet Address of destination是全ff,说明这是一个广播包,是为了获取指定IP的MAC地址,可以看到ARP包中的Target IP address是192.168.0.7,但Target MAC address是全0,说明当前还不知道目标主机的MAC地址,Opcode为1,说明这是一个ARP请求报文。
ARP响应
下面是Wireshark抓的ARP响应报文,大家参照上面的报文格式解析一下咯:
免费ARP
免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP请求,即请求自己的IP地址的MAC地址。
免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。
免费 ARP 数据包有以下 3 个作用。
- 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。
- 可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。
- 可用于更新其他主机的ARP缓存表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。
ARP代理
当局域网内部主机发起跨网段的ARP请求时,出口路由器/网关设备将自身MAC地址回复该请求时,这个过程称为代理ARP。(eg:1.没有路由功能的主机;2.有路由功能,目的地指向本地出口)
地址解析协议工作在一个网段中,而代理ARP(Proxy ARP,也被称作混杂ARP(Promiscuous ARP))工作在不同的网段间,其一般被像路由器这样的设备使用,用来代替处于另一个网段的主机回答本网段主机的ARP请求。
例如,主机PC1(192.168.20.66/24)需要向主机PC2(192.168.20.20/24)发送报文,因为主机PC1不知道子网的存在且和目标主机PC2在同一主网络网段,所以主机PC1将发送ARP协议请求广播报文请求192.168.20.20的MAC地址。这时,路由器将识别出报文的目标地址属于另一个子网(注意,路由器的接口IP地址配置的是28位的掩码),因此向请求主机回复自己的硬件地址(0004.dd9e.cca0)。之后,PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器将数据包转发到目标主机PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。代理ARP协议使得子网化网络拓扑对于主机来说是透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)。
ARP欺骗
地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:
ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患。
「防御措施」
- 不要把网络安全信任关系建立在IP基础上或MAC基础上(RARP同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。
- 设置静态的MAC-->IP对应表,不要让主机刷新设定好的转换表。
- 除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。
- 使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。
- 使用“proxy”代理IP的传输。
- 使用硬件屏蔽主机。设置好路由,确保IP地址能到达合法的路径(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。
- 管理员定期用响应的IP包中获得一个RARP请求,然后检查ARP响应的真实性。
- 管理员定期轮询,检查主机上的ARP缓存。
- 使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。
- 若感染ARP病毒,可以通过清空ARP缓存、指定ARP对应关系、添加路由信息、使用防病毒软件等方式解决。
ARP攻击
ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信,或者如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。。
一般情况下,受到ARP攻击的计算机会出现两种现象:
- 不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。
- 计算机不能正常上网,出现网络中断的症状。
因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。