以太网和wifi协议
前言
如果你知道”小喇叭开始广播了”,估计你得有一定的年纪了,开玩笑,小喇叭是很久以前的一个儿童广播节目.在节目一开始,都是有这样一段播音:”小朋友,小喇叭广播开始了!”,听到这里,收音机前的小朋友就兴奋了起来,准备好听节目了:本次的内容是以太网协议与wifi协议.
以太网和wifi是链接层的两种协议.在链接层,信息以帧为单位传输.帧就像信封一样将数据包裹起来,并注明收信地址和送信地址.链接层实现了”本地社区”的通信.
以太网的帧格式
帧本事是一段有限的0/1序列.它可以分为头部,数据和尾部三部分:
Preamble |
SFD |
DST |
SRC |
Type |
Payload(Data) |
Pad |
FCS |
Extension |
帧按照上面的顺序从头到尾依次被发送/接受.我们下面进一步解释各个区域.
头部
帧的最初7个byte被称为序言(preamble).它的每个byte都是0xAA(这里是十六进制,也就是二进制的10101010).通常,我们都会预定好以一定的频率发送0/1序列(比如每秒10bit).如果接收设备以其他频率接受(比如每秒5bit),那么就会错漏掉应该接受的0/1信息.但是,由于网卡的不同,发送方和接收方即使预定的频率相同,两者也可能由于物理原因发生偏差.这就好像两个人约好的10点见面,结构一个人的表快了,一个人的表慢了.序言是为了让接收设备调整接受频率,以便于发送设备的频率一致,这个过程就叫做时钟复原.
就像在听收音机之前,调整转钮,知道声音清晰.网卡会在接受序言的过程中不断微调自己的接收频率,知道自己听到的是...1010...
时钟调整好以后,我们等待帧的起始信号(SFD).SFD是固定的值0xAB.这个0xAB就好像”小喇叭开始广播了”一样,提醒我们节目马上上演.
紧随SFD之后的是6 byte的目的地(DST)和6byte的发出地(SRC),这就是我们开始说的目的地和出发地.要注意,这里写在信封上的是对地址的”本地描述”,也就是MAC地址.MAC地址是物理设备自带的序号,只能在同一个以太网中被识别(正如邮差只熟悉自己的社区一样).
头部的最后一个区域是Type,用以说明数据部分的类型.比如0x0800位IPV4,0x0806为ARP
数据
数据一般包含有符合更高层协议的数据,比如IP包.连接层协议本身并不在乎数据是什么,它只负责传输.注意,数据尾部可能填充有一串0(PAD区域).原因是数据需要超过一定的最小长度.
尾部
跟随在数据之后的是校验序列(FCS).检验序列是为了检验数据的传输是否发生错误.在物理层,我们通过一些物理信号来表示0/1序列(比如高压/低压,高频/低频等),但这写物理信号可能在传输过程中受到影响,以致于发生错误.如何来发现我们的数据是正确的呢?
一个方法是将数据发送两次,然后对比一下是否一样.但是这样的话,网络的效率就降低了.FCS采用了CRC算法.这就好像是一家饭店的老板雇佣了一个收银员,但是这个老板担心收银员黑钱.老板就想了一个好方法:只记住收到钱的最后一位(比如收到19元,老板记住9).当有新的进账(比如13,尾数为3),他就将新的尾数和旧的尾数相加,再记住和的尾数(也就是2).当收银员交给老板钱的时候,老板只用看看总额的最后一位是否和自己记住的最后一位相同,就可以知道收银员是否诚实了.如果说我们的数据是收银的总额,我们的FCS就是老板记录的尾数.如果两者不相符,我们就知道数据在传输过程中出现了错误,不能使用.
上面的比喻实际上是用营业额总额不断的除以10,获得最终的尾数.CRC算法也相类似.n位的CRC算法取一个n bit的因子,比如下面的1011.数据序列结尾增加n-1个0.因子与数据序列的不断进行XOR运行,直到得到n-1位的余数,也就是100.该余数个位取反(011),然后存储在FCS的位置.
000 <--- 数据序列末尾增加3位0 <--- 因子 000 <--- XOR结果 <--- 因子 000 000 000 000 000 000 000 1 ----------------- 100 <--- 3位余数
上面的案例用的是4位CRC.在Ethernet中使用的因子为32位,以达到更好的检测效果.
集线器(HUB) VS 交换器(Switch)
以太网使用集线器或者交换器将帧从出发地传送到目的地.一台集线器或交换器上有多个端口,每个端口都可以连接一台计算机(或其他设备).
集线器像一个广播电台.一台电脑将帧发送到集线器,集线器会将帧发到所有的其他的端口.每台计算机检查自己的MAC地址是不是符合DST.如果不是,则保持沉默.集线器是比较早期的以太网设备.它有明显的缺陷:
1.任意两台电脑的通信在同一个以太网上是公开的.所有连接在同一个集线器上的设备都能收听到别人在传输什么,这样很不安全.可以通过对信息加密提高安全性.
2.不允许多路同时通信.如果两台电脑同时向集线器发信,集线器会向所有设备发出”冲突”信息,提醒发生冲突.可以在设备上增加冲突检测算法:一旦设备发现有冲突,则随机等待一段时间再重新发出.
交换器克服了集线器的缺点.交换器记录有各个设备的MAC地址.当帧发送到交换器时,交换器会检查DST,然后将帧只发送给对应端口.交换器允许多路同时通信.由于交换器的优越性,交换器基本上取代了集线器.但比较陈旧的以太网还有可能在使用集线器.
http://v.youku.com/v_show/id_XNDgwNTQ5OTI4.html
这段视频很形象的解释了这两种设备
WiFi
WiFi的工作方式与集线器连接下的以太网类似.一个Wifi设备会向所有的WiFi设备发送帧,其他的WiFi设备检查自己是否符合DST.由于wifi采取无线电信号,所以很难像交换器一样定时发送,所以WiFi的安全性很值得关注,WiFi采用的加密的方法来实现信息的安全性.
(早期的WEP加密方法非常脆弱,建议使用WPA或者WPA2加密方法.隐藏WiFi设备ID的方法不是很有用.)
总结
我们深入了链接层协议的一些细节.链接层是物理与逻辑的接口,我的设计兼顾了物理需求(比如时钟复原,CRC)和逻辑需要(比如地址,数据).由于链接层处于网络逻辑的底层,有许多基于链接层的攻击手段,着需要我们对链接层的工作方式有一定的的了解,以设计出更好的网络安全策略.
版权声明:本文为博主原创文章,未经博主允许不得转载。