最近不光在解决项目的问题,也遇到过部分的网络问题,发现自己对于网络的知识还是非常匮乏的,因而在此做一些归纳,记录也是分享,当然我的分享应该不是最全的,但个人认为有些东西就算分享出来,用不到也是白折腾。在此系列中,我还是只介绍我个人用到的技术。
到一家店里面,以前我们经常喊:老板,你们这边的WIFI叫什么名字? 身为一个技术人员嘛,我们当然得知道“WIFI”到底指的是什么。 “WIFI”就是指SSID: Service Set Identifier(服务集标识) SSID是一个ESS的网络标识(如:TP_Link_1201),BSSID是一个BSS的标识,BSSID实际上就是AP的MAC地址,用来标识AP管理的BSS,在同一个AP内BSSID和SSID一一映射。在一个ESS内SSID是相同的,但对于ESS内的每个AP与之对应的BSSID是不相同的。如果一个AP可以同时支持多个SSID的话,则AP会分配不同的BSSID来对应这些SSID。 这上面的话比较拗口,那么一个路由器(ESS)下可以接一个新的路由器(BSS)BSSID就是这个新的路由器的mac地址,这个新的路由器又组成了一个新的AP(一个新的连接点)其SSID与MAC地址对应。 还有几个名词 站点STA(手机) 接入点AP(路由器) 扩展服务集ESS 基本服务集BSS 分布式系统DS(传输用的,后面会讲到)
STA(工作站)启动初始化、开始正式使用AP传送数据帧前,要经过三个阶段才能够接入(802.11MAC层负责客户端与AP之间的通讯,功能包括扫描、接入、认证、加密、漫游和同步等功能) 1)扫描阶段(SCAN) 2)认证阶段 (Authentication) 3)关联(Association)
Active Scanning 主动扫描 (特点:能迅速找到) STA依次在13个信道发出Probe Request帧,寻找与STA所属有相同SSID的AP,若找不到相同SSID的AP,则一直扫描下去… Passive Scanning 被动扫描(特点:找到时间较长,但STA节电)通过侦听AP定期发送的Beacon帧来发现网络,该帧提供了AP及所在BSS相关信息:“我在这里”… 具体的被动扫描: (1)跳至某个信道,然后等候来帧指示(indicationof an incoming frame)或者等到ProbeDelay定时器超时。如果在这个信道收到帧,就证明该信道有用户在使用,因此可以加以探测。而ProbeDelay定时器可用来防止某个闲置信道让整个过程停止,因为工作站不会一直等待帧的到来。 (2)利用基本的DCF访问过程取得媒介使用权,然后送出一个Probe Request帧。 (3)至少等候一段最短的信道时间(即MinChannelTime)。 a.如果媒介并不忙碌,表示没有网络存在,因此可以跳至下个信道。 b.如果在MinChannelTime这段期间媒介非常忙碌,就继续等候一段时间,直到最长的信道时间(即MaxChannelTime)超时,然后处理任何的Probe Response帧。 大家可能会发现当手机进行WIFI热点搜索时,有时时间会比较长,原因是你处在的区域存在多个接入点(AP),当手机发出Probe Request帧时,多个接入点(AP)通过竞争窗口(congestionwindow)回应Probe Response帧,而这个竞争过程受限于最长的信道时间(即MaxChannelTime)。
弹出一个输入密码的窗口,当然也有不用输入密码的。这个过程叫做:认证(Authentication) 里面的具体机制呢,后面再说,可以来看一下Wi-Fi的加密协议有什么。
WPA(Wi-Fi Protected Access)是WIFI联盟制定的安全性标准,WPA2是第二个版本PSK(PreShared Key)叫做预共享密钥。WPA-PSK/WPA2-PSK主要是针对个人或家庭网络等,对安全性要求不是很高的用户WPA2是在802.11i颁布之后,WIFI联盟随即推出的最新无线安全标准,它遵循802.11i标准,以下是它采用的模式: WPA2-PSK= PSK(密码) + AES + CCMP(计数器模式及密码块链消息认证码协议)工作站与基站进行关联,以便获得网络的完全访问权。它让分布式系统(Distribution System)得以记录每个移动式工作站的位置,以便将传送给移动式工作站的帧,转送给正确的基站。 简而言之,就是和AP建立数据交互了。 1、一旦移动式工作站与基站完成认证,便可送出关联请求(Association Request)帧。尚未经过身份认证的工作站,会在基站的答复中收到一个解除关联(Deauthenticaton)帧。 2、基站随后会对关联请求进行处理。IEEE802.11标准并未规范如何判断是否请允许关联;这因基站的实现而异。较常见的方式是考虑帧暂存所需要的空间大小。以Association Request帧中的聆听间隔(Listen Interval)字段来推算,大致上可以粗略推算出。 a. 一旦关联请求获准,基站就会以代表成功的状态代码0及关联识别码(Association ID,简称 AID)来回应。AID本身是数值形式的识别码,在逻辑上则是用来辨识暂存帧所要传递的行动式工作站。 b. 关联请求如果失败,就只会返回状态码,并且中止整个过程。 3、基站开始为移动式工作站处理帧。在常见的产品中,所使用的分布式系统媒介通常是Ethernet。当基站所收到的帧目的地为与之关联的移动式工作站时,就会将该帧从 Ethernet桥接至无线媒介,如果该移动式工作站处于省电(Power-Saving)状态,则为之暂存帧。在共享式Ethernet中,该帧会被送至所有基站,不过只有正确的基站会进行桥接处理。在交换式Ethernet 里,该工作站的MAC地址得以跟某个特定的交换端口(Switch Port)形成关联。当然,该交换端口必须连接到当前为该工作站提供服务的基站。
说了那么多的Wi-Fi链接,其基石除了nl802.11协议,还有最基石的几个协议,比如ARP\ICMP\TCP,这些是我们最常用到的协议栈。 一般我们会见到OSI的7层架构,给这些协议做了划分
ARP(Address Resolution Protocol)地址解析协议,目的是实现IP地址到MAC地址的转换。
主机A的IP地址为192.168.42.1,MAC地址为0A-11-22-33-44-01 主机B的IP地址为192.168.42.15,MAC地址为0A-11-22-33-44-02 当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.42.15)解析成主机B的MAC地址 以下为工作流程: (1)根据主机A上的路由表内容,IP确定用于访问主机B转发IP地址是192.168.42.15。然后A主机就在自己的本地ARP缓存中检查主机B的匹配MAC地址。 (2)如果主机A在ARP缓存中没有找到映射,它将询问192.168.42.15的硬件地址,从而将ARP请求帧广播道本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,他将丢弃ARP请求。 (3)主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存(主机B)中。 (4)主机B将包含其MAC地址的ARP回复消息直接发送回主机A。 (5)当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。
主机B的MAc地址一旦确定,主机A就能向主机B发送IP通信了
下图为抓到的一个ARP的请求 具体可以看以下表格 ARP的回复包:
注意了 内容格式和请求相似,不过会有目的地址对应的MAC地址,ARP数据包类型字段为2。 重点就在opcode。
从上面大家可以看出ARP是一个非常简单的包,如果是黑客的,他会咋么做呢? 不卖关子了,我可以截取ARP,将其挟持成自己的主机,有段时间你可能发现你的主机变慢了,网络卡了,那么有可能是受到了ARP的攻击哟。 一般来讲 ①ARP缓存表基于"后到优先"原则,IP与MAC的映射信息能被覆盖; ②ARP攻击基于伪造的ARP回应包,黑客通过构造"错位"的IP和MAC映射,覆盖主机的ARP表(也被称为"ARP毒化"),最终截取用户的数据流; ③一旦遭受ARP攻击,账号密码都可能被窃取(如果通信协议不是加密的);
对于商业级的交换机来讲,都会有DAI(Dynamic ARP Inspection)- 动态ARP检测。 主要工作为: 1.交换机记录每个接口对应的IP与MAC,生成DAI检查表 2.交换机价差每个接口发过来的ARP回应包,根据DAI表判断是否违规,并惩罚相关接口
那么我们消费级的就没有办法了吗? 还是有的。模拟DAI的算法,通过软件的模式,不断地处理网络包,并在本地做保护。 ARP防火墙: 1.绑定正确的IP与MAC映射 2.自动识别局域网内存在的ARP扫描和欺诈行为
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。所以我们就需要一种协议来完成这样的功能–ICMP协议。 主要功能:
确认IP包是否成功到达目标地址通知在发送过程中IP包被丢弃的原因最常用的Ping就是ICMP报文:
一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。 而我们一般需要关注的类型有以下这几个
这是我抓到的2笔ping过程中的ICMP报文 其具体数据如下:
一个请求,一个回复,注意这边的type与code,这个是构成ICMP类型的重要组成。根据这个你能够知道到底发生了什么事情
通常为以下状态: 类型8,代码0:表示回显请求(ping请求)。 类型0,代码0:表示回显应答(ping应答) 类型11,代码0:超时
有很工程,我们一般都是使用TCP通信的,什么3次握手,我在此就不说了,主要还是说说协议。 还是一样要关注的仍然是其首部。 这里大家应该注意的是这个FLAGS,这个可以跟3次握手一一对应起来,有兴趣的家人们可以直接试试。回头还会分享一下我是咋么抓包的。
前面讲的那么多,其实是已经分析出来的东西了。而在这些报文之前还有报文,这个那就是IP报文
这里关注首部与原目标即可,还有PROTOCOL。这个非常重要。
当然哦,IP报文之前,还有一笔报文,我们称其为以太网的封装。 具体组成如下:
大家可以看到这个是组成发包,而到接受端一样是逐一解包。这里就不一一说明了。