这是我在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。主要是传输延迟。
- 长的连接或的小的带宽都会造成延迟,普通情况下仅仅有一种原因占主要部分
- 拨号上网。延迟D=5ms,传播速率R=56kbps,消息长度M=1250bytes。
- 带宽延迟积
- 消息是有长度的
- 带宽延时积=带宽*延时
- 带宽延时积举例
- 家庭光纤。跨国。R=40Mbps。D=50ms。
最后计算出带宽延时积=250KB,也就是说一条电线上保存着250KB的数据!
- 家庭光纤。跨国。R=40Mbps。D=50ms。
- 物理层的功能
-
媒介
-
类型
-
有线、光纤、无线
-
-
有线
-
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 |