以太网和WiFi是连接层的两种协议。在连接层,信息以帧(frame)为单位传输。帧像信封一样将数据(payload)包裹起来,并注明收信地址和送信地址。连接层实现了“本地社区”的通信。我们先来看看以太网的帧。

以太网的帧格式

帧本身是一段有限的0/1序列。它可以分为头部、数据(Payload)和尾部三部分:

帧按照上面的顺序从头到尾依次被发送/接收。我们下面进一步解释各个区域。

头部

帧的最初7个byte被称为序言(preamble)。它的每个byte都是0xAA(这里是十六进制,也就是二进制的10101010)。通常,我们都会预定好以一定的频率发送0/1序列(比如每秒10bit)。如果接收设备以其他频率接收(比如每秒5bit),那么就会错漏掉应该接收的0/1信息。但是,由于网卡的不同,发送方和接收方即使预订的频率相同,两者也可能由于物理原因发生偏差。这就好像两个人约好的10点见,结果一个人表快,一个人表慢一样。序言是为了让接收设备调整接收频率,以便与发送设备的频率一致,这个过程就叫做时钟复原(recover the clock)。

(就像在收听广播之前,调整转钮,直到声音清晰。网卡会在接收序言的过程中不断微调自己的接收频率,直到自己“听到”是...1010...)

时钟调整好之后,我们等待帧的起始信号(SFD, start frame delimiter)。SFD是固定的值0xAB。这个0xAB就好像“小喇叭开始广播啦”一样,提醒我们好节目就要上演了。

Preamble和SFD

紧随SFD之后的是6 byte的目的地(DST, destination)和6 byte的发出地(SRC, source)。这就是我们在邮差和邮局中的介绍一样,为信封写上目的地和发出地。要注意,这里写在信封上的是对地址的“本地描述”,也就是MAC地址。MAC地址是物理设备自带的序号,只能在同一个以太网中被识别 (正如邮差只熟悉自己的社区一样)。

头部的最后一个区域是Type,用以说明数据部分的类型。(比如0x0800为IPv4,0x0806为ARP)

数据

数据一般包含有符合更高层协议的数据,比如IP包。连接层协议本身并不在乎数据是什么,它只负责传输。注意,数据尾部可能填充有一串0(PAD区域)。原因是数据需要超过一定的最小长度。

尾部

跟随在数据之后的是校验序列(FCS, Frame Check Sequence)。校验序列是为了检验数据的传输是否发生错误。在物理层,我们通过一些物理信号来表示0/1序列(比如高压/低压,高频率/低频率等),但这些物理信号可能在传输过程中受到影响,以致于发生错误。如何来发现我们的数据是正确的呢?

一个方法是将数据发送两遍,然后对比一下是否一样。但这样就大大降低了网络的效率。FCS采用了CRC(Cyclic Redundancy Check)算法。这就好像是一家饭店的老板雇佣了一个收银员,但他又担心收银员黑钱。可是每天营业额很大,老板即使坐在旁边看,也不能用记住收到的总数。所以他采取了一个聪明的办法:只记住收到钱的最后一位 (比如收到19元,老板记住9)。当有新的进账(比如13,尾数为3),他就将新的尾数和旧的尾数相加,再记住和的尾数(也就是2)。当收银员交给老板钱的时候,老板只用看总额的最后一位是否和自己记的最后一位相同,就可以知道收银员是否诚实了。如果说我们的数据是收银的总额的话,我们的FCS就是老板记录的尾数。如果两者不相符,我们就知道数据在传输的过程中出现错误,不能使用。

有FCS在盯着

上面的比喻实际上是用营业总额不断的除以10,获得最终的尾数。CRC算法也相类似。n位CRC算法取一个n bit的因子,比如下面的1011。数据序列结尾增加n-1个0。因子与数据序列的不断进行XOR运算,直到得到n-1位的余数,也就是100。该余数各位取反(011),然后存储在FCS的位置。

11010011101100 000 

集线器(Hub) vs. 交换器(Switch)

以太网使用集线器或者交换器将帧从发出地传送到目的地。一台集线器或交换器上有多个端口,每个端口都可以连接一台计算机(或其他设备)。

集线器像一个广播电台。一台电脑将帧发送到集线器,集线器会将帧转发到所有其他的端口。每台计算机检查自己的MAC地址是不是符合DST。如果不是,则保持沉默。集线器是比较早期的以太网设备。它有明显的缺陷:

1) 任意两台电脑的通信在同一个以太网上是公开的。所有连接在同一个集线器上的设备都能收听到别人在传输什么,这样很不安全。可以通过对信息加密提高安全性。

2) 不允许多路同时通信。如果两台电脑同时向集线器发信,集线器会向所有设备发出“冲突”信息,提醒发生冲突。可以在设备上增加冲突检测算法(collision detection):一旦设备发现有冲突,则随机等待一段时间再重新发送。

交换器克服集线器的缺陷。交换器记录有各个设备的MAC地址。当帧发送到交换器时,交换器会检查DST,然后将帧只发送到对应端口。交换器允许多路同时通信。由于交换器的优越性,交换器基本上取代了集线器。但比较老的以太网还有可能在使用集线器。

下面的一个视频来自CISCO,更加形象的解释了这两种设备

http://v.youku.com/v_show/id_XNDgwNTQ5OTI4.html

WiFi

WiFi的工作方式与集线器连接下的以太网类似。一个WiFi设备会向所有的WiFi设备发送帧,其它的WiFi设备检查自己是否符合DST。由于WiFi采取无线电信号,所以很难像交换器一样定向发送,所以WiFi的安全性很值得关注。WiFi采用加密的方法来实现信息的安全性。

(早期的WEP加密方法非常脆弱,建议使用WPA或者WPA2加密方法。隐藏WiFi设备ID的方法不是很有用。)

总结

我们深入了连接层协议的一些细节。连接层是物理与逻辑的接口,它的设计兼顾了物理需求(比如时钟复原,CRC)和逻辑需求(比如地址、数据)。由于连接层处于网络逻辑的底层,有许多基于连接层的攻击手法,这需要我们对连接层的工作方式有一定的了解,以设计出更好的网络安全策略。

作者:Vamei 出处:http://www.cnblogs.com/vamei

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

wifi协议_以太网(Ethernet)和WiFi协议相关推荐

  1. TCP/IP协议(2): 以太网(IEEE 802.3) 协议 —— 构成有线局域网的基本协议

    #TCP/IP协议(2): 以太网(IEEE 802.3)协议 -- 构成有线局域网的基本协议 关于以太网(IEEE 802.3) 协议 以太网(Ethernet) 是一套广泛应用于局域网(LAN), ...

  2. ethercat通讯协议_工业控制常用接口协议大全,长见识了

    I/O接口概念 I/O接口是一电子电路(以IC芯片或接口板形式出现 ),其内有若干专用寄存器和相应的控制逻辑电路构成.它是CPU和I/O设备之间交换信息的媒介和桥梁.CPU与外部设备.存储器的连接和数 ...

  3. igmp是哪个层协议_【干货】IGMPv1协议闲聊

    本期与大家聊聊IGMPv1(因特网组管理协议),分享我个人见解,以及梳理一下IGMPv1相关知识点. 一 它是干嘛用的? 我们学一个协议时,首先,最想知道的就是它是干嘛用的?什么时候才需要它?部署场景 ...

  4. dhcp协议_记录一次DHCP协议的学习过程

    DHCP 动态主机设置协议(Dynamic Host Configuration Protocol,缩写:DHCP)是一个局域网的网络协议,使用UDP协议工作. BOOTP BOOTP(Bootstr ...

  5. python 读取wifi数据_通过Python实现WiFi测试数据分析

    通过 Python 实现 WiFi 测试数据分析 周春宇 [期刊名称] <通信电源技术> [年 ( 卷 ), 期] 2020(037)006 [摘要] Python 是一种面向对象的解释型 ...

  6. python实现mqtt协议_自己动手实现MQTT协议

    写在前面 前段时间弄IoT相关的东西,系统学习了一下 MQTT 协议,在此分享出来. 本文先是对 MQTT 协议做了简单的介绍:接着是对 MQTT协议的内容做了较为全面的解读:最后使用 Python ...

  7. 为什么tcp不采用停等协议_为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?...

    看到了一道面试题:"为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?",想想最近也到金三银四了,所以就查阅了相关资料,整理出来了这篇文章 ...

  8. java mqtt协议_基于 tio 实现 mqtt5 协议之 micamqtt

    一.简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)是一种基于发布/订阅范式的"轻量级"消息协议,由 IBM 发布 ...

  9. 怎么更改wifi频段_科普 | 你了解WiFi信号扩展器吗?

    为什么要使用WiFi信号扩展器? 弥补不足:WiFi信号扩展器可以增强主路由的WiFi信号,也可以覆盖家中WiFi死角,哪里信号不好放哪里: "共享"WiFi:有很多朋友自家或出租 ...

  10. ocsp协议_什么是在线证书状态协议(OCSP)和示例教程?

    ocsp协议 Certificates like SSL, X.509 are used to secure network traffic. But every certificate has it ...

最新文章

  1. 全民自动驾驶5年内真的会来吗?这是Lyft的自动驾驶2.0
  2. 这样写的博客才有更多的人愿意看
  3. windows 7安装sql server2005以及com (-1073737712错误)+ 8004e00f错误
  4. python mysql 分号_Python中使用MySQL
  5. 接口映射的实现及原理
  6. mysql报错1172该怎样解决_ORA-01172、ORA-01151错误处理
  7. HTML 引用Css样式的四种方式
  8. Redhat/CentOS修改主机名
  9. SQL语句如何判断某字段是以字母开头而不是汉字开头
  10. SQL还原数据库剔除占用
  11. MacOS 迅速上手 Makefile 编译 C / C++ 工程
  12. c语言简易计算器大作业报告,c语言计算器的实验报告
  13. 全志F1C100S/F1C200S学习笔记(12)——问题解决汇总
  14. 微信小程序富文本解析点击图片放大_小程序富文本提取图片可放大缩小
  15. VSCODE + 搜狗输入法,两次文字突然变成繁体?
  16. 上海“富爸爸” 神奇投资之路
  17. Python爬取新浪微博热搜榜
  18. 脑洞大开,晚安月亮纸尿裤透气性实验!
  19. Win7高级应用技巧
  20. NodeMCU文档中文翻译 5 上传代码

热门文章

  1. autofac文档:适配器和装饰器
  2. 11.企业安全建设指南(金融行业安全架构与技术实践) --- 互联网应用安全
  3. 30.Linux/Unix 系统编程手册(上) -- 线程:线程同步
  4. 3.jenkins 基础
  5. 35.MySQL 常见问题
  6. python 全栈开发,Day109(客户管理之动态二级菜单)
  7. mac+nginx+php70+mysql环境搭建
  8. Python语法命令学习-Day3(作业练习)
  9. 洛谷 P1993 小K的农场 解题报告
  10. [C++]动态规划系列之币值最大化