数据链路层

  简称链路层,功能在于将数据包封装成帧,控制帧对介质的访问。链路层连接了物理介质和其之上抽象层,可以使上层不用关心用什么方法在什么介质中传输信息。

  在帧被传输时经过的每一跳,每个中间设备(通常也是路由器)会对帧做如下一些处理:

  1. 从介质接收帧

  2. 把帧解封为数据包

  3. 把本设备处理完的数据包再次封装成适合传输向下一个介质的帧

  4. 将新帧通过下一介质转发出去

  5. 对帧进行错误检查,如果发现错误就把帧丢弃

  如何将帧放到介质上or如何从介质上取得帧的技术被称为介质访问控制或者MAC方法。MAC方法控制着数据进出介质,防止比如不同帧同时在同一介质中传输等问题。针对不同的介质比如光纤,双绞线和无线介质,它们具有不同的性质,为了能更贴切地利用好这些介质最好要有不同的MAC方法。MAC方法就好比是交通规则,没有了MAC方法,数据从节点进入介质好比汽车无视信号灯进入路口,会引起混乱。

  终端设备常用适配器来连接到网络,比如主机要连接到LAN的话,设备会使用合适的NIC(网卡)来连接介质,通过介质进入网络。

  中间设备如路由器通常需要面临多种传输介质,此时就需要其有多个物理接口来顺利连接不同的介质。比如家里用的无线路由器一般就有一个WAN的串行接口,若干个LAN接口和一根天线(无线介质接口)。

■  MAC方法——把数据放入介质

  链路层协议中定义了许多访问不同介质时所用的MAC方法

  其实主要是看两个要素来确定改用什么MAC方法:1.节点间是否存在共享介质 2. 节点间连接拓扑如何

  ●  当有共享介质的情况存在时

  因为要考虑到多台设备同时访问介质的情况,所以有两种类型的基本MAC方法可以选择,分别是受控制访问和争用访问。

  受控访问:每台节点依次访问介质,如果某节点不需要使用介质就把访问介质的机会交给下一个等待中的节点,当介质上有某节点的某个帧的话,直到该帧传输完毕为止,都不允许其他设备放其他帧到介质上去。受控访问类的MAC方法常用于如令牌传递等场景。这种访问控制没有冲突,秩序好,并且提供可以预测的吞吐量,只是效率有点低。

  争用访问:每个节点在需要介质时访问介质。为了防止混乱,这类方法使用CSMA(载波侦听多路访问)先检测介质上是否有正在传输的信号。但是光检测了也并不代表万无一失,有可能会出现检测时OK但是发出信号后就冲突了的情况。为了解决潜在的信号冲突的危险,CSMA还被细分成两种具体的形式,CSMA/CD(冲突检测)和CSMA/CA(冲突避免)。冲突检测是说,节点一边监听一边传输信号,当监听到冲突的时候立刻停止传输信号以减少垃圾信号的生成,节省传输成本,以太网就是以这种方式处理冲突信号的。另一种冲突避免则是说在进行传输之前节点先进性介质的预约,让其他节点知道这里有信号要传输了,因为无线介质的物理特性决定了其不能同时收发信号,所以无线协议如802.11大多都是用这种方式来处理冲突信号的。

  ● 无共享介质的情况

  由于没有共享介质(比如点对点的拓扑结构),MAC方法基本不需要控制信息。只需要考虑该用半双工还是全双工的模式

  半双工:节点可以通过介质发或者收信号,但不能同时那么做,相当于单车道

  全双工:就是双车道了

  ●  物理or逻辑拓扑

  物理拓扑是指设备在现实中的接线情况形成的拓扑图,而逻辑拓扑则是只网络节点间通过网络的逻辑连接起来的拓扑图。链路层协议主要关注不同的逻辑拓扑。

  常见的逻辑拓扑有:

  多路访问拓扑中,每个节点都会接受到帧但是只有目的节点可以处理它并作出回应。环状结构中各个节点依次接收到帧,如果该节点不是目的地就继续发往下一个节点。

■  帧的结构

  任何一种链路层协议的帧都包含了数据(通常是来自网络层的数据包),帧头,帧尾三部分。

  帧头:包含了链路层协议对特定逻辑拓扑和介质的控制信息,不同的链路层协议有不同且唯一的帧头。帧头中比较重要的一个信息就是编址,即目的地址。这个目的地址和网络层的目的地址不同,指的是目的的物理地址即MAC地址。MAC地址只用于本地传送,而如果把它放到本地LAN以外的网络是没有意义的。

  帧尾:包括验证帧内容是否出错的信息——帧校验序列和停止字段。

■  链路层协议实例

  链路层协议有很多种,比如以太网,PPP,HDLC,帧中继,以太帧等等。

  因特网中有两类基本的网络环境即WAN和LAN。WAN和LAN对技术有不同的要求,比如LAN要求协议可以支持高带宽多用户,因为地理范围小且反应时间快,而WAN可能要求传输的稳定性和跨区域。对协议的要求因此也是不同的,也就是说,LAN和WAN有着各自不同的链路层协议。

  LAN的以太网:广义的以太网是IEEE 802.2和802.3标准中定义的一系列互联网技术,其包括了物理层和链路层的一些技术。以太网用CSMA/CD(冲突检测)的MAC方法保证数据对介质的访问有效且安全。同时以太网帧含有以下信息:

    前导码

    目的地址

    源地址

    上层协议类型(以上是帧头中的信息)

    数据包

    帧校验序列(帧尾中的信息)

  WAN的PPP协议:PPP(点对点协议)用于两个节点之间传送帧的情况。可以用于不同的物理介质。PPP分成上下两层工作,下层为不同的介质建立起PPP会话,借此隐蔽了上层对物理介质的感知。。PPP帧的内容包括了:

    帧开始标志

    地址

    控制

    协议(以上帧头)

    数据包

    帧校验序列(帧尾)

  LAN无线协议802.11:802.11是对IEEE 802.2标准的一个扩展,为了适应无线传输的不稳定性和不确定性,新加入了许多额外的控制功能。IEEE 802.11又被人称为Wi-Fi(Wireless Fidelity),因为可能还存在一些通过其他协议建立起来的无线局域网,所以WLAN(Wireless Local Area Network)是个更大的概念。Wi-fi是WLAN重要且主要的组成部分。

  802.11采用争用访问的方式来管理主机间对介质的竞争,使用CSMA/CA(冲突避免)的MAC方法解决共享介质可能导致的冲突。

  802.11的帧比较复杂。

■  以太网

  以太网是由IEEE标准描述的一系列LAN产品的家族。也是目前占主导地位的有线LAN技术。以太网的标准编号是IEEE802.3,最初开发以太网标准是为了解决OSI模型中第一层和第二层下半层的需求。

  以太网的发展过程:

    最原始的以太网设计为多台计算机互联的总线结构,其物理拓扑也维持总线结构,融入了CSMA/CD的MAC方法。这类以太网的规模和效率都被限制得比较小,由于介质最早使用的是单轴铜缆。

    传统以太网改变最原始的铜缆为成本更低且更方便的非屏蔽双绞线。且运用集线器作为子网网段的中心,将物理拓扑改为星型(逻辑上仍然是总线结构)。集线器使得人们可以把一些节点看做一组,一个独立单元来处理。传统以太网仍然用介质争用访问的模式与CSMA/CD方法。所有设备共享介质且检测冲突的存在。相比于上一代以太网,这种集线星型拓扑的以太网可靠性更高不会因为其中某一条电缆故障使得全盘瘫痪。

    当今的以太网使用交换机取代了集线器成为网段中心的设备,它可以为节点提供全部带宽而无介质争用的情形。它可以隔离每个端口,只把帧发送到正确的目的地而非总线一样每个节点都要收到,这样就大幅度降低了冲突的发生,相当于把每一次单独的通信都转变成了点对点的逻辑拓扑。

    在次世代(我觉得现在应该已经开始在普及了)将会出现的是带宽在1G以上的以太网。对于这种需要更高带宽,更广域的以太网,对介质和交换机的升级是主要手段。比如把铜缆换成光纤,可以得到更高的传输速度以及更低的出错概率。在未来,WAN和LAN之间在规模和速度上的差别会变得不那么明显了。

  以太网的一个帧的结构:

  同其他链路层协议一样,以太网规定了其帧的结构。一个以太网帧最小定义为64字节,最大为1518个字节,如果接受到的帧大小大于最大值或小于最小值设备可能就会认为帧被破坏,将主动丢弃这个帧。产生这种情况的原因在于冲突或者其他的多余的信号等等。

  帧的结构中包含前导码(7字节);帧定界符(1字节);目的地址(6字节);源地址(6字节);长度(2字节);数据(46-1500字节);帧校验序列(4字节)。

物理层

  物理层将来自链路层的处理好的比特码通过介质(铜缆,光纤,无线介质等)进行传输,这些比特码包括从应用层到链路层添加的所有控制信息和源内容。物理介质上传输的信号可以是电压,光信号,无线电波等,因为物理信号可能会受到共享介质或者外部因素的影响而产生畸变,所以物理层设计时重要的内容之一就是消除这些畸变对通信的影响

  总的来说,物理层的任务有1. 将逻辑信息和物理能量互相转换 2. 保证通信不受到信号畸变的影响

■  物理层信号与编码,比特

  ●  比特时间

  只OSI第二层的网卡产生一个比特的数据并将其作为信号传送到介质上发送至接收方所花的时间。不同介质的比特时间不同,不同网络状况,不同网卡输出能力的比特时间也都不同。

  

  从通信学的角度来讲,一共有三种信号要素可以收到人工的改变来承载信息,幅度;频率和相位。不同地调制这三个要素,以及不同的约定物理信号为逻辑数值的方法称为信号方法。典型的信号方法有NRZ(不归零方法),曼彻斯特编码等(曼彻斯特编码只每个比特时间电压变化,从低变高则表示数值1,从高变低表示数字0)

■  数据传输能力

  有三种指标可以衡量网络的数据传输的能力,单位都是bit/s。分别是理论带宽,实际吞吐量和实际有效吞吐量。

  理论带宽:表示在硬件一定的情况下,能够传输的最大速率

  吞吐量:由于通信会受到干扰,错误,介质共享等影响,带宽往往不能得到完全的发挥,而其实际通过的数据传输量就是吞吐量。影响吞吐量的因素有流量大小,数据流类型,网络规划等等。

  有效吞吐量:在吞吐量的基础上除去协议开销,错误检查,重传等操作的数据量,剩下的对于源信息本身的传递用掉的数据量就是有效吞吐量。根据网络连接和设备质量的不同,有效吞吐量可能和实际吞吐量有很大差别。

【网络】 数据链路层&物理层笔记的更多相关文章

  1. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  2. 关于Python网络爬虫实战笔记③

    Python网络爬虫实战笔记③如何下载韩寒博客文章 Python网络爬虫实战笔记③如何下载韩寒博客文章 target:下载全部的文章 1. 博客列表页面规则 也就是, http://blog.sina ...

  3. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  4. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  5. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  6. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

  7. csapp网络编程初学笔记

    csapp网络编程初学笔记 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型,服务器管理某种资源,并且通过操作来为它的客户提供某种服务 客户端-服务器模型中的基本操作是transacti ...

  8. 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理

    概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...

  9. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

随机推荐

  1. 5.3 存储器、I/O和配置读写请求TLP

    本节讲述PCIe总线定义的各类TLP,并详细介绍这些TLP的格式.在这些TLP中,有些格式对于初学者来说较难理解.读者需要建立PCIe总线中与TLP相关的一些基本概念,特别是存储器读写相关的报文格式. ...

  2. FFmpeg-音频和视频应用程序的瑞士军刀

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库l ...

  3. Google最新的图片格式WEBP全面解析

    前言 不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值 ...

  4. 图像处理------Fuzzy C Means的聚合算法

    Fuzzy C-Means聚合算法在图像分割(segmentation)和图像视觉处理中常常被用到聚合算法之 一本文是完全基于JAVA语言实现Fuzzy C-Means聚合算法,并可以运用到图像处理中 ...

  5. MFC中CFileDialog用法

    用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址,和王工调试了半天,怎么跟踪也没发现错误,原来如此......... CFileDialog文件选择 ...

  6. javaWeb之自动发送邮件生日祝福(ServletContextListener监听)

    在看完本随笔仍然不理解的可以看  javaWeb邮箱发送  :里面有具体的邮箱服务器配置 企业在员工生日当天发送邮箱生日祝福: 一般是用监听器完成:  而合适的监听是ServletContextLis ...

  7. 芝麻HTTP:Python爬虫实战之爬取糗事百科段子

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...

  8. 芝麻HTTP:Python爬虫入门之Cookie的使用

    为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓 ...

  9. pat1041-1050

    没想到半天就做完了10题 = =,这几题太简单了,基本10分钟一题 1041 #include<cmath> #include<map> #include<iostrea ...

  10. 2016-2017 CT S03E06: Codeforces Trainings Season 3 Episode 6 The Baguette Master

    比赛看不懂 之后不确定题意去瞄了题解,需要分类讨论?囧 之后按照队友已经ac的题意 就是求外面一圈周长,直接可以求得 #include<bits/stdc++.h> using names ...