数据链路
数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信手段。
数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外,各个设备之间有时也会通过交换机、网桥、中继器等中转数据。
以太网
- 以太网不是一种具体的网络,而是一种技术标准。即包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构、访问控制方式、传输速率等。
- 以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等。
- 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
以太网帧格式
数据帧头:目标MAC地址、源MAC地址、类型。
数据帧尾:CRC校验和。
类型为上层协议类型。
源地址和目的地址是指网卡的硬件地址,长度是48位,是在网卡出厂时固化的。可以修改。
MAC地址
- MAC地址用于识别数据链路中互连的结点。
- 长度为48位,即6个字节。一般用16进制数字加上冒号的形式表示(例如:00:80:45:12:21:06)。
- 在出厂时就确定了,可以修改。MAC地址通常是唯一的(虚拟中的MAC地址不是真实的MAC地址,可能会冲突)。
MAC地址不一定是唯一的
在全世界,MAC地址也并不总是唯一的。实际上,即使MAC地址相同,只要不是同属于一个数据链路就不会出现问题。
例如,人们可以在微机板上自由设置自己的MAC地址。再例如,一台主机上如果启动多个虚拟机,由于没有硬件的网卡只能由虚拟软件自己设定MAC地址给多个虚拟网卡,这时就很难保证所生成的MAC地址是独一无二的了。
IP地址和MAC地址
- IP地址描述的是路途总体的起点和终点。
- MAC地址描述的是路途上的每一个区间的起点和终点。
MTU
MTU(Maximum Transmission Unit,最大传输单元)。不同的数据链路有个最大的区别,就是他们各自的最大传输单元不同,就好像人们在邮寄包裹或行李时对包裹尺寸的限制。
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补位。
- 最大值1500称为以太网的最大传输单元,不同的网络类型有不同的MTU。FDDI为4352字节,ATM则为9180字节。
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。
MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
- 将较大的IP包分成多个小包,并给每个小包打上标签。
- 每个小包IP协议头的16位表示(id)都是相同的。
- 每个小包的IP协议头的3位标志字段中,第2位置0,表示允许分片,第3位来表示结束标志(当前是否是最后一个小包,是的话置为1,否则置为0)。
- 到达对端时再将这些小包,按顺序重组,拼接到一起返回给传输层。
- 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是网络层不会负责重新传输数据。
MTU对UDP协议的影响
- 一旦UDP携带的数据超过1472字节(1500字节 - 20字节(IP首部) - 8字节(UDP首部)),那么就会在网络层分成多个IP数据报。
- 任意一个分片丢失或出错就会造成分片重组失败导致整个UDP数据报被丢弃。分片越多,危险越大;因此UDP数据最好在应用层就将数据段大小分配合适。
MTU对TCP协议的影响
- TCP的一个数据包也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size,最大数据报长度)。
- TCP在建立连接时,通信双方会进行MSS协商。
- 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然受制于数据链路层的MTU)。
- 双方在发送SYN的时候会在TCP头部写入字节能支持的MSS值。
- 然后双方得知对方的MSS值后,选择较小的作为最终MSS。
- MSS的值就是在TCP首部的40字节变长选项中(kind = 2)。
- 因此TCP数据在网络层不会进行数据分段。
MSS和MTU的关系
查看MAC地址和MTU
使用ifconfig命令。
ARP协议
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。
ARP作用
功能:通过IP地址获取MAC地址。
ARP协议建立了主机IP地址和MAC地址的映射关系。
- 在网络通信时,源主机的应用程序直到目的主机的IP地址和端口号,却不知道目的主机的MAC地址。
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到数据包的MAC地址与本机不符,则直接丢弃。
- 因此在通信前必须获得目的主机的MAC地址。
ARP工作流程
- 源主机发出ARP请求,询问“IP地址是172.20.1.2的主机的MAC地址是多少”,并将这个请求广播到本地网段(以太网帧首部的MAC地址填FF:FF:FF:FF:FF:FF表示广播)。
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的MAC地址填写在应答包中。
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址。
ARP数据报的格式
- 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其他类型的网络则有可能是必要的。
- 硬件类型值链路层网络类型,1为以太网。
- 协议类型指要转换的地址类型,0x0800为IP地址。
- 硬件地址长度对于以太网地址为6字节。
- 协议地址长度对于IP地址为4字节。
- op字段为1表示ARP请求,op字段为2表示ARP应答。
ARP欺骗
ARP欺骗(ARP spoofing),又称ARP毒化(ARP poisoning,网上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网上特定计算机或所有计算机无法正常连线。
ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网上,尤其是送到网卡上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关(被动式数据包嗅探,passive sniffing)或是篡改后再转送(中间人攻击,man-in-middle attack)。攻击者亦可将ARP数据包倒到不存在的MAC地址以达到阻断服务攻击的效果。
举例说明:
例如某一IP地址为192.168.0.254,其MAC地址为00-11-22-33-44-55,网上的计算机内ARP表会有这一笔ARP记录。攻击者发动攻击时,会大量发出已将192.168.0.254的MAC地址篡改为00-55-44-33-22-11的ARP数据包。那么网上的计算机若将此伪造的ARP写入自身的ARP表后,计算机若要透过网上网关连到其他计算机时,数据包将被倒到00-55-44-33-22-11这个MAC地址,因此攻击者可从此MAC地址截收到数据包,可篡改后再送回真正的网关,或是什么也不做,让网上无法连线。
简单案例分析:
假设在一个LAN里,只有三台主机A、B、C,且C是攻击者。
- 攻击者聆听局域网上的MAC地址。它只要收到两台主机洪泛的ARP Request,就可以进行欺骗活动。
- 主机A、B都洪泛了ARP Request。攻击者现在有两台主机的IP、MAC地址,开始攻击。
- 攻击者发送一个ARP Reply给主机B,把此包中的protocol header里的send IP设为A的IP地址,sender MAC设为自己的MAC地址。
- 主机B收到ARP Reply后,更新它的ARP表,把主机A的MAC地址(IP_A, MAC_A)改为(IP_C, MAC_C)。
- 当主机B要发送数据包给主机A时,它根据ARP表来封装数据包的Link头,把目的MAC地址设为MAC_C,而非MAC_A。
- 当交换机收到B发送给A的数据包时,根据此包的目的MAC地址(MAC_C)而把数据包转发给攻击者C。
- 攻击者收到数据包后,可以把它存起来后再发送给A,达到偷听效果。攻击者也可以篡改数据后才发送数据包给A,造成伤害。
ARP欺骗攻击的防制方法
最理想的防制方法是网内的每台计算机的ARP一律改用静态的方式,不过这在大型网上是不可行的,因为需要经常更新每台计算机的ARP表。
另一种方法,例如DHCP snooping,网上设备可借由DHCP保留网上各个计算机的MAC地址,在伪造的ARP数据包发出时即可侦测到。此方式已在一些厂牌的网上设备产品所支持。
有一些软件可监听网上的ARP回应,若侦测出有不正常变动时,发送邮箱通知管理者。例如UNIX平台的Arpwatch以及Windows上的XArp v2或一些网上设备的Dynamic ARP inspection功能。