see also:http://course.cc.shu.edu.cn/safe/tcpip/start.htm
很详细的介绍物理层:http://www.highteck.net/EN/Physical/OSI_Physical_Layer.html
什么是4B/5B编码?
4B/5B编码是百兆以太网中线路层编码类型之一,就是用5bit的二进制数来表示4bit二进制数,映射方式如下表所示:
为什么要进行4B/5B编码?
在通信网络中,接收端需要从接收数据中恢复时钟信息来保证同步,这就需要线路中所传输的二进制码流有足够多的跳变,即不能有过多连续的高电平或低电平,否则无法提取时钟信息。
Manchester编码可以保证线路中码流有充分的跳变,因为它是用电平从“-1”到“+1”的跳变来表示“1”,用电平从“+1”到“-1”的跳变来表示“0”,但是这种编码方式的效率太低,只有50%,相当于用线路的有效带宽来换取信号的跳变,十兆以太网就是使用Manchester编码,虽然线路的有效带宽只有10Mbps,但实际带宽却是20Mbps。
百兆以太网用的4B/5B编码与MLT-3编码组合方式,发送码流先进行4B/5B编码,再进行MLT-3编码,最后再上线路传输;千兆以太网用的是8B/10B编码与NRZ编码组合方式;万兆以太网用的是64B/66B编码;PCIE 3.0用的是128B/130B编码。
4B/5B编码规则有哪些?
4B/5B编码其实就是用5bit的二进制码来代表4bit二进制码。此编码的效率是80%,比Manchester码高。4B/5B编码的目的在前面已经说过了,就是让码流产生足够多的跳变。4位二进制共有16种组合,5位二进制共有32种组合,如何从32种组合种选取16种来使用呢?这里需要满足两个规则:
1). 每个5比特码组中不含多于3个“0”;
2). 或者5比特码组中包含不少于2个“1”;
此规则是怎么来的?这就要从MLT-3码的特点来解释了。MLT-3码的特点简单的说就是:逢“1”跳变,逢“0”不跳变。为了让4B/5B编码后的码流中有足够多的跳变就需要编码后的码流中有尽量多的“1”和尽量少的“0”。
关于线路编码类型,如NRZ、NRZI、HDB3、B3ZS、B8ZS、AMI、CMI、MLT-3、Manchester等。
问:如何实现单片以太网微控制器?答:诀窍是将微控制器、以太网媒体接入控制器(MAC)和物理接口收发器(PHY)整合进同一芯片,这样能去掉许多外接元器件。这种方案可使MAC和PHY实现很好的匹配,同时还可减小引脚数、缩小芯片面积。单片以太网微控制器还降低了功耗,特别是在采用掉电模式的情况下。
问:以太网MAC是什么?
答:MAC就是媒体接入控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了一个数据链路层。最新的MAC同时支持10Mbps和100Mbps两种速率。通常情况下,它实现MII接口。
问:什么是MII?
答:MII即媒体独立接口,它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需要16个信号。管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。

问:以太网PHY是什么?
答:PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范。
问:造成以太网MAC和PHY单片整合难度高的原因是什么?
答:PHY整合了大量模拟硬件,而MAC是典型的全数字器件。芯片面积及模拟/数字混合架构是为什么先将MAC集成到微控制器而将PHY留在片外的原因。更灵活、密度更高的芯片技术已经可以实现MAC和PHY的单芯片整合。
问: 除RJ-45接口外,还需要其它元件吗?
答:需要其它元件。虽然PHY提供绝大多数模拟支持,但在一个典型的实现中,仍需外接6、7只分立元件及一个局域网绝缘模块。绝缘模块一般采用一个1:1的变压器。这些部件的主要功能是为了保护PHY免遭由于电气失误而引起的损坏。
问:10BaseT和100BaseTX PHY实现方式不同的原因何在?
答:两种实现的分组描述本质上是一样的,但两者的信令机制完全不同。其目的是阻止一种硬件实现容易地处理两种速度。10BaseT采用曼彻斯特编码,100BaseTX采用4B/5B编码。
问:什么是曼彻斯特编码?
答:曼彻斯特编码又称曼彻斯特相位编码,它通过相位变化来实现每个位(图2)。通常,用一个时钟周期中部的上升沿表示“1”,下降沿表示“0”。周期末端的相位变化可忽略不计,但有时又可能需要将这种相位变化计算在内,这取决于前一位的值。
[url=http://blog.sina.com.cn/main/html/showpic.html#url=http://static7.photo.sina.com.cn/orignal/4899b874dd086780c791e]

问:什么是4B/5B编码?
答:4B/5B编码是一种块编码方式。它将一个4位的块编码成一个5位的块。这就使5位块内永远至少包含2个“1”转换,所以在一个5位块内总能进行时钟同步。该方法需要25%的额外开销。

6.2.2. 100BASE-T
协议
采用802.3标准、CSMA/CO访问方式,又称快速以太网。
传输介质
有三种访问介质分别为100Base-TX、100Base-FX。100Base-T4。
- Cable: 两对5类UTP(非屏蔽双绞线),或两对1型STP(屏蔽双绞线)
- 编码: 4B/5B码
- Connector: RJ45(有1-8根Pin)
- 连线与100Base-T相同
Pin 1, 2 : 发送;
Pin 3, 6 : 接收;
其余未用 - 工作站与HUB之间最长距离为100米,故它不适用于大型网
- Cable: 2根多模光纤
- 编码: 4B/5B码
- Connector: SC, MIC(Media Interface Connector), ST
- 最长距离400米
- Cable: 4对3, 4, 5类UTP
- 编码: 8B6T码
- Connector: RJ45
- Pin 1, 2 TX-D1 : 发送
Pin 3, 6 RX-D2 : 接收
Pin 4, 5 BI-D3 : 双向传送
Pin 7, 8 BI-D4 : 双向传送 - 最长距离100米
2 编码
NRZ(Nonreturn to Zero)
- NRZ-L(-level)
图 1
这种编码最简单,也最常用
NRZI Nonreturn to Zero,invert on ones
属于查分编码
“1”有变化,“0”无变化
图 2
其优点是:减少噪声和失真的影响
(1)4B/5B码
每四位二进制代码由5位编码表示,这5位编码称为编码组(code group),并且由NRZI方式传输。
4B/5B码举例:
每个code group中“0”的个数不超过3个。
实用4B/5B码的最大优点是能够在很大程度上降低线路传输中的调制速率,从而降低了对线路的要求。
所谓调制速率是指单位时间内线路状态变化的数目,以波特(baud)为单位。
我们一般所说的数据信号传送速率是指单位时间内传送的信息量,以每秒多少比特(位)为单位,即bps(bit per second)。
注意:不要将数据传送速率与调制速率相混淆,如果1个调制时间间隔和1个代码相对应,则两者在数值上相等。如是多相调制,那么它们在数值上不同,例如曼彻斯特编码,它在每个调制时间间隔内跳动两次,故其波特率将是数据传送速率的两倍。
在快速以太网中,数据传输速率为100Mbps,如果采用曼彻斯特编码,波特率将达200Mbps,对传输介质和设备的技术要求都将提高,也增大了传输成本。
使用4B/5B编码后,在传输速率为100Mbps的情况下,其调制速率为:
100M×(5/4)=125M(baud)
即波特率仅为125M baud,大大低于曼彻斯特编码时的200M baud,这样就在快速以太网中使用非屏蔽双绞线成为可能。
(2)8B6T码
8B6T码将8位二进制代码由六位三重信号的编码来表示,从下式计算可知,8B6T码对100Mbps的信号传输率来说,使其调制速率进一步降低为25M baud。
100M×(6/8)×(1/3)=25M(baud)
8B6T码采用三重信号(ternary sianaling)即:正电压值,负电压值和零电压值。具体编码如下:
|
|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
图 3
从8位代码转换成6位三重信号的过程见下图所示:
图
因为6B6T码的调制速率仅是25M baud,所以100BASE-T4可以使用传输质量最低的3类双绞线。
=====================================================================================
根据RFC894的说明,以太网封装IP数据包的最大长度是1500字节,也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符,具体就是:7字节前导同步吗+1字节帧开始定界符+6字节的目的MAC+6字节的源MAC+2字节的帧类型+1500+4字节的FCS。
按照上述,最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1514字节,为什么不是1526字节呢?原因是当数据帧到达网卡时,在物理层上网卡要先去掉前导同步码和帧开始定界符,然后对帧进行CRC检验,如果帧校验和错,就丢弃此帧。如果校验和正确,就判断帧的目的硬件地址是否符合自己的接收条件(目的地址是自己的物理硬件地址、广播地址、可接收的多播硬件地址等),如果符合,就将帧交“设备驱动程序”做进一步处理。这时我们的抓包软件才能抓到数据,因此,抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,其最大值是6+6+2+1500=1514。
以太网规定,以太网帧数据域部分最小为46字节,也就是以太网帧最小是6+6+2+46+4=64。除去4个字节的FCS,因此,抓包时就是60字节。当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充以满足数据帧长不小于64字节。由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同,抓包程序的优先级可能比设备驱动程序更高,也就是说,我们的抓包程序可能在设备驱动程序还没有填充不到64字节的帧的时候,抓包程序已经捕获了数据。因此不同的抓包工具抓到的数据帧的大小可能不同。下列是本人分别用wireshark和sniffer抓包的结果,对于TCP 的ACK确认帧的大小一个是54字节,一个是60字节,wireshark抓取时没有填充数据段,sniffer抓取时有填充数据段。
wireshark抓包结果,帧是54字节,帧数据部分没有填充数据段
sniffer抓包结果,帧是60字节,帧数据部分后有6字节的填充数据
查看网络接口MTU的方法:
WINDOWS下,在命令提示符下输入netstat -e -v
FreeBSD下输入netstat -i
常见网络的MTU(RFC1191):
Plateau MTU Comments Reference
------ --- -------- ---------
65535 Official maximum MTU RFC 791
65535 Hyperchannel RFC 1044
65535
32000 Just in case
17914 16Mb IBM Token Ring ref. [6]
17914
8166 IEEE 802.4 RFC 1042
8166
4464 IEEE 802.5 (4Mb max) RFC 1042
4352 FDDI (Revised) RFC 1188
4352 (1%)
2048 Wideband Network RFC 907
2002 IEEE 802.5 (4Mb recommended) RFC 1042
2002 (2%)
1536 Exp. Ethernet Nets RFC 895
1500 Ethernet Networks RFC 894
1500 Point-to-Point (default) RFC 1134
1492 IEEE 802.3 RFC 1042
1492 (3%)
1006 SLIP RFC 1055
1006 ARPANET BBN 1822
1006
576 X.25 Networks RFC 877
544 DEC IP Portal ref. [10]
512 NETBIOS RFC 1088
508 IEEE 802/Source-Rt Bridge RFC 1042
508 ARCNET RFC 1051
508 (13%)
296 Point-to-Point (low delay) RFC 1144
296
68 Official minimum MTU RFC 791