博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
札记:计算机网络篇:物理层
阅读量:5960 次
发布时间:2019-06-19

本文共 4975 字,大约阅读时间需要 16 分钟。

这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。

因为计算机网络才诞生不久。眼下正在以快速在发展。所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制。知识相对还是比較新的。覆盖了计算机网络中的各个协议层。从物理层到应用层都讲得很细致。学完这门课程之后对计算机网络会有比較深刻的了解。

本章具体解说了物理层,解说了比特流怎样通过各种介质进行传播。

  • 基本概述
    • 物理层的功能
      • 专注比特信号是怎样传输的,包含模拟信号和数字信号
    • 话题
      • 媒体属性:有线、光纤、无线
      • 影响因素:带宽、衰减、噪音
      • modulation schemes:比特的表示、噪音
      • 基本极限:Nyquist极限、香农极限
    • 简单连接模型
      • 速度
      • 延迟
      • 是否广播、错误率
    • 消息延迟
      • 传输延迟:将消息写进媒介的时间
      • 传播延迟:消息从媒介的一端到还有一端所用的时间
    • 数据的长度单位
      • KB MB GB
    • 延迟举例
      • 拨号上网。延迟D=5ms,传播速率R=56kbps,消息长度M=1250bytes。

        最后计算出延迟L=5ms+1250*8/(56*10^3)=184ms。

        主要是信道延迟

      • 国家之间传输。延迟D=50ms,传输速率R=10Mbps,消息长度M=1250bytes。最后计算出延迟为51ms。主要是传输延迟。

      • 长的连接或的小的带宽都会造成延迟,普通情况下仅仅有一种原因占主要部分
    • 带宽延迟积
      • 消息是有长度的
      • 带宽延时积=带宽*延时
      • 带宽延时积举例
        • 家庭光纤。跨国。R=40Mbps。D=50ms。

          最后计算出带宽延时积=250KB,也就是说一条电线上保存着250KB的数据!

  • 媒介

    • 类型

      • 有线、光纤、无线

    • 有线

      • 5类UTP双绞线:常见的以太网电线。绞线是为了降低噪音

      • 同轴电缆:这样的哦线有更好的保护措施和更好的性能

    • 光纤

      • 光线是又长、又细、又纯净的玻璃

      • 有很巨大的带宽

      • 分为多膜和单膜。

        单膜的性能更好

    • 无线

      • 全部的无线信号都是广播的

      • 邻近的设备同一时候通信时会相互干扰

      • 无线举例:3G  ISM(802.11b/g/n)   Wifi(802.11a/g/n

  • 信号

    • 话题

      • 信号传输的时候发生了什么

    • 频率的表示方法

      • 用三角函数

    • 低带宽带来的影响

      • 让脉冲变得更加圆滑,添加了推断0或1的难度,导致传输速度变慢

    • 在电线中传输

      • 信号会延迟。

        传输速度大约为2/3光速

      • 信号会衰减

      • 高频信号会被吸收

      • 噪音会增多

      • 带宽能够理解为两种,一种是电子project中的带宽,一种是网络project中的带宽。两种这两种带宽的单位不同。电子project中的带宽用Hz作为单位,而网络project中的带宽用Mbps为单位

    • 在光纤中传输

      • 比特流通过三原色进行传输

      • 信号衰减程度很低

    • 在无线中传输

      • 将信号调幅后发送

      • 传播速度是光速

      • 信号衰减速度非常快,大于1/dist^2

      • 同样频率的无线传输之间会相互干扰

      • 从信号干扰衍生出了空间重用率的概念。仅仅要不相互干扰。无线的频率是能够重用的

      • 无线传输还受到其它因素的影响。无线在空间中的传播是很复杂的,和物理环境有关

      • 某些效果仅仅出如今特定的频率中。比方微波的衍射性能强,能够绕过障碍物进行传播。

        比方802.11、3G

    • 无线的多路传播

      • 微波具有衍射特性和反射特性

      • 有些波是直接到达设备的,有些波经过反射到达了设备。两个波会叠加,有时候能增强信号。有时候削弱信号

      • 这样的现象叫做OFDM

  • 调制

    • 话题

      • 信号的表示方法

    • 简单的信号调制

      • 高压+V表示1。负压-V表示0

    • 其它的表示方法

      • 使用很多其它的电压表示很多其它的数据。比方一个电压表示2bit数据

    • 时钟同步

      • 假设一次发送许多的0,那么接收方无法精确知道有多少个0

      • 所以有了Manchester coder孟彻斯特编码和scrambling编码

      • 孟彻斯特就是将0替换成01,1替换成10。

    • 4B/5B

      • 固定的编码

        • 0000 -> 11110

        • 0001 -> 01001

        • 。。。

        • 1110 -> 11100

        • 1111 -> 11101

      • 最多3个连续的0

    • NRZI编码:遇到1就改变电压,遇到0就保持原来的电压

    • Passband调制

      • baseband调制在电线中非常合适。可是在光纤/无线中无法非常好地工作

      • 将每一个比特进行调制。能够调频,调幅,调相

  • 基本极限

    • 话题

      • Nyquist限制

      • Shannon容量

      • 为了达到极限而产生的发明

    • 信道的关键属性

      • 带宽B,强度S,信噪比N

    • Nyquist极限

      • 信号发送的最大速度是2B,也就是两倍带宽(电子project中的带宽)

      • 如果有V种电平,信号发送速率R = 2B log_2(V) bits/sec

    • 香农极限

      • 信息论创始人

      • 信道能够提供多少种电平和信噪比有关

      • 信噪比用db来表示,信造比SNR=10log_10(S/N)

      • 香农容量 C = B log_2(1+S/N) bits/sec,表示一条信道的最大传输速率

    • 有线/无线对照

      • 有线/光纤:能够有固定的传输数据速率

      • 无线:没有固定的传输数据速率

    • DSL

      • 使用电话线的高频部分进行传输

      • DSL使用passband调制

      • 上传和下载是用的是两段不同的带宽

      • 高信噪比时可能1个信号表示15个比特。低信噪比的时候可能1个信号表示1个比特

数据链路层

  • 链路层概述

    • 链路层结构

      • 关注怎样传输消息。一则消息就是一帧

    • 链路层数据包结构为:Header-Packet-Tailer

    • 链路层的典型实现方法

      • 网卡上有链路层的模块和物理层的模块,操作系统中有链路层的驱动。链路层是同一时候分布在软件和硬件中的一个协议层。

    • 话题

      • 帧。区分帧的头和尾的方法

      • 错误检測,错误矫正,错误处理

    • 话题

      • 怎样通过物理层表示一系列帧呢?

    • 区分帧的方法

      • 字节数

      • 字节

      • 实际应用中物理层有时候也会帮助链路层来区分帧

    • 第一次尝试:字节数方法

      • 每一帧的头部是字节数

      • 这样的方法非常easy,看起来也非常实用。可是出错后非常难再次同步

    • 第二次尝试:用字节标志

      • 用特殊的标志字节来标志帧的头和尾

      • 缺点是数据的内容也要进行编码。比如数据内容:A FLAG B,编码后变成 A ESC FLAG B

      • 长处是出错后easy同步

    • 第三次尝试:用数据位来做标志

      • 6个1为头尾标志

      • 数据的内容进行编码。每5个1之后插入一个0。

        解码的时候,每5个1之后删除一个0

      • 举例:0110 1111 1111 1111 1111 0010,编码后0110 1111 1011 1111 0111 1101 0010

    • 链路举例:SONET上的PPP

      • PPP:点对点链路协议

      • SONET:光纤物理层协议

      • 分帧时使用字节标志,0x7E表示FLAG,0x7D表示ESC

      • 0x7E编码后变成0x7D5E。也就是添加了7D,并将第5位进行取反

      • 0x7D编码后编程0x7D5D

      • 这样编码之后数据中就彻底没有FLAG或ESC符号了

  • 错误概述

    • 话题

      • 怎样处理错误

      • 怎样检測错误

      • 怎样矫正错误

      • 怎样又一次发送数据

      • 链路层的可靠性

    • 问题

      • 噪音有时候会造成比特上的误差

    • 方法

      • 添加冗余

      • 错误检測:添加校验位

      • 错误矫正:添加很多其它的校验位

      • 关键问题是,怎样通过最少的校验位来检測到最多的错误

    • 最简单的方法

      • 将数据发送两次。能检測到错误,可是不能矫正

    • 使用校验位

      • 发送方数据的末尾添加检測位,D为数据。检測位R=fn(D)

      • 接收方。接收到数据D和检測位R,计算R==fn(D)。依据计算结果推断是否出错

      • 将数据进行随机修改。普通情况下都能推断出数据中存在错误

    • Hamming距离

      • 距离=两个数据有多少个位是不一样的

      • 最少发生d+1次反转后检測位依旧正确的校验方法,最多能稳定检測到d个错误

      • 最少发生2d+1次反转后检測位依旧正确的校验方法。最多能稳定矫正到d个错误

      • 举例。一段数据添加了检測位。传输之后有2个位发生了反转。并且检測位依旧正确,那么它的距离d就是2

  • 错误检測

    • 话题

      • 数据在接收的时候可能会有误差。我们怎样检測到它呢?

      • 方法:奇偶校验、校验和、CRC

      • 检測错误是为了兴许的矫正错误,比方重发

    • 简单的错误检測方法:奇偶校验

      • 1001100 => 1

      • 性能怎样?

      • hamming距离d=2,最多能稳定检測到1个错误,无法矫正错误

      • 大的误差非常难检測

    • 校验和

      • TCP中1500bytes数据有16bit校验和

      • 比奇偶校验更强

    • 互联网校验和

      • Checksum:the checksum field is 16bit 1's complement of the 1'complement sum of all 16bit words

      • 伪代码:x=sum([e for bit16 in data]); return x + x%0x10000;

      • 发送方步骤

        • 将数据排列成16位一组

        • 将0放在校验位。并把每组数据增加到校验位

        • 将溢出的进位加到校验位

        • 将结果取反

      • 接收方把接接收到的(数据+checksum)计算checksum。假设得到0,那么说明没有错误

      • 性能怎样

        • 距离是2,能稳定检測1个错误,不能矫正错误

        • 连续出现16个位错误时就无法工作了

    • CRC

      • 更强的保护

      • 举例。数据为302。校验位数为1位,生成器为3,那么CRC=3020 % 3 = 2

      • 发送方步骤

        • 在数据后方添加k个0

        • 将数据除以C,取余数。除的时候注意:要将减法换成XOR运算,事实上CRC中的除法并非真正的除法

        • 调整k,使其能够被整除

      • 标准的CRC32生成器是10000010 01100000 10001110 110110111

      • 属性

        • HD=4 Hamming距离,能稳定检測3个连续的错误

        • 能检測奇数个错误

        • 连续出现k个错误时就无法正常工作了

      • 实际应用中的错误检測方法

        • CRC被广泛使用:以太网。802.11 ADSL 线缆

        • 互联网中也有使用:IP TCP  UDP

        • 奇偶校验非常少使用

  • 错误矫正

    • 话题

      • 有时候接收到的数据中有错误,怎样矫正呢

      • 我们可以矫正错误,为什么还要使用检測错误呢

    • 为什么错误矫正非常难

      • 缺少好的校验方法

      • 校验代码也可能出错

    • 错误矫正代码

      • 构建一种Hamming距离为3的错误编码,须要改变3个字节才干让编码成为第二种正确的编码

      • 如果错误仅仅有1位。那么我们能够将错误矫正到近期的编码上

    • Hamming距离

      • 举例:4位数据0101,3个检验位。

        检验1 检验2 数据1 检验3 数据2 数据3 数据4

      • 检验1覆盖了检验1 数据1 数据2 数据4

      • 检验2覆盖了检验2 数据1 数据3 数据4

      • 检验3覆盖了检验3 数据2 数据3 数据4

      • 每一个检验位用奇偶检验法生成。结果是010。和原来的数据合成,得到0100101

      • 解码的时候计算检验位,得到检验1,2,3。依照(检验3,检验2,检验1)进行排列,得到二进制数。

        这个2进制数就表示出错的位置。0表示没有错误

      • ​详细计算方法见下文中的表格

    • 其它矫正错误的方法

      • 实际应用中的矫正方法比Hamming距离复杂得多

      • LDPC

    • 错误检測和错误矫正的对照

      • 如果每10000个位就会发生一个错误

      • 检測错误大约须要10位额外的比特位

      • 矫正错误大约须要1000个额外的比特位。大约占用了1/10的传输时间

      • 有时候检測错误的开销更小。有时候矫正错误的开销更小,主要看数据的传输情况

    • 应用

      • 在物理层中大量使用的是LDPC

      • 错误矫正在CD DVD中也有使用

Hamming代码计算方法

p1 p2 p4等表示校验位,d1 d2 d3等表示数据位。

Bit position 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
Encoded data bits p1 p2 d1 p4 d2 d3 d4 p8 d5 d6 d7 d8 d9 d10 d11 p16 d12 d13 d14 d15
Parity
bit
coverage
p1 X   X   X   X   X   X   X   X   X   X  
p2   X X     X X     X X     X X     X X  
p4       X X X X         X X X X         X
p8               X X X X X X X X          
p16                               X X X X X

转载地址:http://nyuax.baihongyu.com/

你可能感兴趣的文章
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>
Python高效编程技巧
查看>>
Kafka服务端脚本详解(1)一topics
查看>>
js中var self=this的解释
查看>>