五 Wireless LANs(Wi-Fi)
现在很流行的一种接入互联网的方式就是Wi-Fi了。我们用的ipad、手机、笔记本电脑等等都能够用这样的方式接入互联网,很方便灵活。一个典型的Wi-Fi网络例如以下图所看到的,一些基本概念大致了解。

1. 802.11标准帧格式
802.11标准规定了Wi-Fi帧格式,例如以下图所看到的,当然,并非每一种类型的帧都具备全部的部分。

一開始的preamble是用来同步的。它依靠于使用的802.11版本号。PLCP提供相应的物理层的一些信息。

我们姑且觉得这两个部分是与物理层相关的一些细节,不用太关心,主要来看MPDU,它类似于以太网帧格式。可是又加入了一些别的东西。

MPDU的開始部分是帧控制字 (Frame Control Word),占领两个bit。用来表示帧类型。帧类型一共同拥有三种,管理帧(management frames),控制帧(control frames)和数据帧(data frames)。

(1)管理帧(management frames)
管理帧用来创建、维持和结束设备和接入点(AP)之间的连接,它也能决定是否使用加密。网络的名称(SSID/ESSID),支持的传输速率以及共同的时基等。这些帧用来提供当一个wifi设备寻找附近的接入点时所必须的信息。
(2)控制帧 (control frames)
控制帧能进行流量控制,即当发送方发送数据速度太快时,接收方告知发送方使其速度慢下来。当接收方收到一帧数据时,能够通过控制帧给发送方发送确认信号,告知它已经成功接收。这和TCP协议比較相似。控制帧还能提供一个可选的功能,request-to-send(RST)/clear-to-send(CTS)。工作过程大概是这种,在发送数据之前。发送方先发送RST表明自己希望发送数据,接收方接收到该RST之后,反馈一个CTS。即清除发送请求。表明自己愿意接收数据,然后发送方開始发送数据。没发送一帧,接收方发送一个确认信号。
无线传输之所以须要确认信号。是由于传输的数据非常easy丢失。假设发送方发送数据之后在一定的时间之内没有收到确认信号,则觉得该数据丢失。又一次发送该数据。并把Frame Control Word里的Retry部分置位。这样接收方知道发生了什么。假设收到两份相同的数据,可以做出对应的处理。
(3)数据帧(data frames)

2.节能模式和Time Sync Function(TSF)
节能模式让设备的无线接收电路在某些时候关闭。没有进入节能模式时,接收电路一直执行,不停的消耗能量。

当进入节能模式时,在Frame Control Word中相应位将置位,然后发送出去。与之连接的AP接收到这些置位的数据帧之后,会将原本应该发送到该设备的帧数据先存到缓存中。等到设备须要时再发送给它。

这里有个同步的问题。wifi协议是使用TSF来进行时间同步的。


3. 802.11介质訪问控制(Media Access Control)
还记得之前讨论以太网的时候介绍了一种CSMA/CD协议,那是一种介质訪问控制(Mac)协议,用来解决多设备同一时候数据传输时的冲突问题。相同,在Wi-FI协议中。也须要类似的协议。802.11标准有三种方法去控制无线媒介的共享问题:PCF。DCF。和HCF。

我们这里主要介绍DCF(distributed coordinating function)。DCF是一种基于竞争的媒介訪问控制协议,与CSMA/CD类似,设备在发送数据之前检測媒介是否空暇。假设空暇则发送数据。否则等待一段时间知道检測到媒介是空暇为止。不同的地方在于,DCF为不同的设备或者不同类型的帧设置了不同的优先级。通常情况下,设备在检測到媒介空暇,准备发送数据之前。会等待一段时间(distributed
inter-frame space or DIFS),让更高优先级的设备接入信道。另外还有个不同的地方在于,DCF有两种检測冲突的方法,物理的方法(physical)和虚拟的方法(virtual carrier sense)。

(1)虚拟冲突检測(virtual carrier sense)
在802.11标准Mac协议中,虚拟冲突检測机制实际上就是观察mac帧数据中的Duration字段。设备会监听哪怕不是发给自己的数据。甚至是在RTS和CTS中也携带Duration字段。当然,数据帧中肯定也是有的,它表示该帧数据知道传输结束所须要占领媒介的时间。也就是告诉别的设备我这帧传输数据完须要多长时间,传输完了你们就能够准备传输自己的数据了。
这个值是依据帧的大小、传输速率以及物理媒介等信息来估算的。

每一个设备都会在本地生成一个NAV(Network Allocation Vector)用来保存当前媒介中正在传输的数据须要多长时间才干传输完。以此决定自己尝试数据传输的时间。假设检測到的Duration值大于本地NAV值。显然要用这个大的值对其进行更新。当然,随着时间的推移,NAV值要慢慢减小,这表示当前数据传输里目的地越来越近。但仅仅要非0。则该数据仍然占领传输媒介。当收到ACK确认信号时,说明已经传输完毕。这个时候将NAV置0.

(2)物理冲突检測(Physical Carrier Sense or CCA)
这是通过物理的方法来检測冲突,不同的传输媒介会提供各自的方法。须要注意的是,MAC层通过物理的方法和上面所说的虚拟检測的方法结合来推断冲突的。
(3)DCF Collision Avoidance/Backoff Procedure
在设备检測到媒介空暇时,会等待一段时间,然后開始发送数据。这里,等待的这段时间。一般是一个随机的整数值和一个叫做slot time的值相乘的结果。

slot time是几十微秒的数量级,随机的整数值在一个固定的范围之内。

这和我们之前讨论的CSMA/CD中。当检測到冲突后。等待一段随机的时间再尝试发送有点类似。这个过程(产生随机等待时间的过程),称为backoff procedure.

在无线环境下,由于接收设备和发送设备很难同步,所以通经常使用冲突避免(collision avoidance)。而不是冲突检測。而且,当接收到一帧数据,须要返回一个ACK确认信号时,通常仅仅会等待很小的一段时间(普通设备正常情况下等待DIFS时间,ACK等待时间小于DIFS),而且,无论此时媒介是忙碌或是空暇,仅仅要成功接收到一帧数据。都是等待这样很小的一段时间就马上发送,我们说,ACK帧具有更高的优先级。

相同,RTS和CTS也有相似的性质。


4.物理层细节
5.Wi-Fi安全

六 点对点协议(PPP)
1.LCP协议(Link Control Protocol)

PPP帧的Protocol字段被置为固定值0xC021。以此来表示这是LCP帧数据。Ident字段是一个序列号码,它由发送方提供。发送方每发送一帧数据,都会提供一个特定的Ident值,而且随着很多其它的数据发送,Ident值相应添加。在接收方没收到一帧数据时。须要对其作出应答,这时接收方会将收到的数据里的Ident值拷贝到应答数据里。反馈给发送者。

这样发送者就知道哪些数据被正确接收。而哪些数据没有。

Code字段表示操作类型。标识该帧是请求帧还是应答帧等等。Lenghth字段表示LCP
packet的长度,单位是字节。须要注意的是,该字段是有LCP packet提供的,普通的PPP协议并不提供该字段。



通过上图。我们能够对LCP协议有个更加直观的了解。LCP协议通过两个对等端的交流协商,负责两者之间链路的创建、维护和终止。典型的交换内容如上图所看到的,包含自身的配置,身份验证。已经终止连接等。

在LCP协议建立连接的过程中。发送方和接收方协商的内容之中的一个是某些选项是否设置。Asynchronous Control Character Map(ACCM)就是当中之中的一个。它用来设置某些控制字符(比方0x00-0x1F范围内的ASCII字符)需不须要转义。

转义的意思就是将原本的字符内容变为转义字符(0x7D)加上原字符与(0x20)作异或的结果。比方0x13的转义字符是0x7D33.这样做是由于某些控制字符可能会对硬件造成某些特殊的影响,转义之后,这样的影响将消失。默认情况下,全部的ASCII控制字符(值小于0x20)都要进行转义。


 由于PPP没有长度字段(Length),因此理论上没有什么办法来限制PPP帧数据的长度。在实际应用中,最大帧长度一般是通过指定MRU来限制的。这有点类似于MTU,最大路径传输单元。当比較大的帧数据和比較小的帧数据同一时候在链路中传输时,大数据将占领大部分带宽,这导致小的传输数据速度变慢。在某些应用中。比方远程登录或者VoIP。须要传输的都是小的数据,在这种环境下可能就会变得不太正常。通过减小MRU能够改善这种现象,当然,这样会导致传输数据效率减少,由于每帧数据都有帧头部分。


PPP还支持一种叫做Link Quality Reports(LQRs)的机制。

在协商过程中,通过配置信息。PPP能够将该功能开启,这样发送端和接收端能够在规定的时间内周期性的交换LQR信息。LQRs表示传输质量的相关參数,包含:magic number,发送和接收的帧数量和大小。接收到的错误帧数量。丢弃帧的数量以及交换的LQR数据总数量。LQRs信息的交换是周期性的,这个周期是能够手动设置的。

当LQRs的值没有达到某个要求时。我们还能够设置终止连接


一些PPP实现还支持回调(callback)能力。典型的异步回调步骤例如以下图:


2.多链路点对点协议(Multilink PPP or MP)
用来将多个点对点链路连接成为一个,就好像我们之前介绍过的将多个port聚合成为一个port一样。一个聚合的链路,我们称之为一个捆绑(bundle),操作起来就像一个完整的虚拟链路一样,它拥有自己的配置信息。当然。实际上这个捆绑是由很多成员链路组成的,每一个成员可能都拥有自己的一些设置选项。
实现MP最直观的方法就是轮流从成员链路中发送数据,可是这样会给其它协议带来不好的影响。

所以通常在每一个MP帧中放置一个2到4字节的序列头字段,然后远程的MP接收者负责依照顺序又一次组装数据。


我们能够从上图看到,有一个開始(B)和结束(E)字段,以及序列数字字段(sequence number),假设一帧数据没有分片(fragment),那么B和E位都置为1,否则。在第一个分片数据内。B置为1。E置为0,最后一个分片数据内,B置为0,E置为1.在中间的分片中,B和E都置为0,而且依照序列号码进行排序。

由于MP捆绑跨越躲过成员链路,因此须要有种方法来确认哪些链路属于同一个捆绑。PPP通过设置endpoint discriminator选项来确定。该值能够是IP地址或者mac地址。
另外。BAP协议能够动态的从一个捆绑中加入或者删除某个链路。BACP能获取BAP过程所必须的信息。

这样使得一个捆绑依据实际情况(比方网络是否拥塞)动态的加入或者删除链路。使得虚拟链路更加灵活。


3. 压缩控制协议(Compression Control Protocol) CCP
压缩控制协议负责在PPP链路上的两端配置并协商使用哪种压缩算法。而且用可靠的方式来标志压缩和解压缩机制的失败。
4. PPP身份验证
PPP定义了一个课扩展的LCP版本号,支持协商身份验证协议,这样路由器在同意网络层协议通过链路数据传输前须要验证对方的身份。
5. 网络控制协议(Network Control Protocols)NCPs
用来建立和配置不同网络层的协议。
6. 头压缩(Header Compression)

六 环回接口
大多数的产品都支持环回接口。以同意执行在同一台主机上的客户程序和server程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。通常,大多数系统吧IP地址127.0.0.1分配给这个接口,并命名为localhost。

一个传给环回接口的IP数据报不能再不论什么网络上出现。可能在我们的想象中,一旦传输层检測到目的端地址是环回地址时,应该能够省略部分传输层和全部网络层的逻辑操作。

可是大多数的产品还是照样完毕传输层和网络层的全部过程。仅仅是当IP数据报离开网络层时把它返回给自己。

看上去用传输层和IP层的方法来处理环回数据似乎效率不高,但它简化了设计,由于环回接口能够被看做是网络层以下的还有一个链路层。网络层把一份数据报传送给环回接口,就像传给其它链路层一样,仅仅只是环回接口把它返回到IP的输入队列中。


七 最大传输单元MTU
数据链路层对数据帧的长度都有一个限制。

比方以太网的数据帧最大不超过1500字节,这个数值就叫做MTU。最大传输单元,不同类型的网络都有一个MTU。假设IP层有一个数据要传,并且数据的长度比链路层的MTU大,那么IP层就须要进行分片。把数据报分成若干片,这样每一片都小于MTU。在PPP中的MTU并不是指的是网络媒体的物理特性,相反,它是一个逻辑限制,目的是为交互使用提供足够快的对应时间。

当在同一个网络上的两台主机互相通信时,该网络的MTU是很重要的。

可是假设两台主机之间的通信要通过多个网络,那么每一个网络的链路层就可能有不同的MTU。这时起决定作用的是两台通信主机路径中最小的MTU,称之为路径MTU。须要注意的是。两台主机之间的路径MTU不一定是个常数。

它取决于当时所选择的路由。而选路不一定是对称的。因此路径MTU在两个方向上不一定是一致的。后面提到IP层和传输层时,还会介绍MTU发现机制。

TCP/IP具体解释学习笔记——数据链路层(2)的更多相关文章

  1. TCP/IP具体解释学习笔记——地址解析协议ARP

    一 概述 我们知道,IP协议是用来在不同的物理网络之间数据传输的.要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址. 一般来说.就是将IPv4地址转换为mac地址 ...

  2. TCP/IP具体解释学习笔记--TCP的超时与重传

    1.基本概念 TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据. 2.超时时间的測量 要測超时时间,TCP ...

  3. TCP/IP具体解释学习笔记--TCP数据流

    1.TCP的交互数据流 (1)基本概念 所谓交互数据流,其对TCP而言,就是他们所产生的大多数的TCP报文段中所包括的数据不超过10个字节.比如聊天等telnet的软件的TCP数据流就属于TCP交互数 ...

  4. TCP/IP具体解释学习笔记--TCP的坚持和保活定时器

    TCP的坚持定时器 1.基本概念 TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0.那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那 ...

  5. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

  6. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  7. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

  8. 【转】TCP/IP详解学习笔记(一)

      TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...

  9. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

随机推荐

  1. Java中文乱码处理

    java编码转换过程 我们总是用一个java类文件和用户进行最直接的交互(输入.输出),这些交互内容包含的文字可能会包含中文.无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这 ...

  2. vue-router 基本使用(vue工程化)

    (1)概念: 路由,其实就是指向的意思,当我点击页面上的home按钮时,页面中就要显示home的内容,如果点击页面上的about 按钮,页面中就要显示about 的内容.Home按钮  => h ...

  3. Fragment Transactions和Activity状态丢失

    本文由 伯乐在线 - 独孤昊天 翻译.未经许可,禁止转载!英文出处:androiddesignpatterns.欢迎加入翻译组. 下面的堆栈跟踪和异常代码,自从Honeycomb的初始发行版本就一直使 ...

  4. C++命名空间、标准库(std,全局命名空间)

    背景 别人遇到的问题: C++ 全局变量不明确与 using namespace std 冲突 我遇到的问题与他相似,函数调用冲突 using namespace std; class compare ...

  5. POJ 1149 PIGS 建图,最大流

    题意: 你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开某一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 已打开的 ...

  6. [LUOGU] P1466 集合 Subset Sums

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  7. Linux 关于umount

    场景:linux下挂载过去的代码目录编译失败.怀疑本地磁盘空间不足问题导致.解决方法:卸载重新挂载. 操作:卸载时报错: 解决方法: 1.umount, 老是提示:device is busy, 服务 ...

  8. 配置python3 项目环境

    安装python3 安装仓库软件 sudo apt-get install software-properties-common python-software-properties 添加仓库 sud ...

  9. Python之函数作业

    Python之函数作业 爬页面 #爬虫页面,send一次爬一次 from urllib.request import urlopen def get(): while True: url = yiel ...

  10. 理解ZAB协议

    ZAB协议 介绍 1.zab协议是为分布式协调服务zookpeer专门设计的一种支持崩溃恢复的原子广播协议 2.在zookeeper中主要依赖ZAB协议来实现数据一致性,基于该协议zk实现了一种主备模 ...