TCP/IP详解--以太网帧结构 IP层关注的MTU 网络中MSS大小

对于千兆以太网,每秒能传输1000Mbit数据,即125000000B/s,每个以太网frame的固定开销有:前导码和帧开始符preamble(8B)、MAC(12B)、type(2B)、payload(46B~1500B)、CRC(4B)、gap(12B),因此最小的以太网帧是84B,每秒可以发送1488000帧。最大的以太网帧是1538B,每秒可发送81274帧。接下来算TCP有效负荷:一个TCP segment包含IP header(20B)和TCP header(20B),还有Timestamp option(12B),因此TCP的最大吞吐量是81274*(1500-51)=117MB/s。
        上面的解释是正确的:

结构

以太网链路上的数据包称作 以太帧。以太帧起始部分由前导码和帧开始符组成。后面紧跟着一个以太网报头,以 MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包(例如 IP协议)。以太帧由一个32位 冗余校验码结尾。它用于检验数据传输是否出现损坏。

        来自线路的二进制数据包称作一个帧。从物理线路上看到的帧,除其他信息外,还可看到前导码和帧开始符。任何物理硬件都会需要这些信息。

下面的表格显示了在以1500个八位元组MTU传输(有些吉比特以太网甚至更高速以太网支持更大的帧,称作巨型帧)时的完整帧格式。[note 2] 一个八位元组是八个位组成的数据(也就是现代计算机的一个字节)。

TCP/IP详解--以太网帧结构 IP层关注的MTU 网络中MSS大小_第1张图片

前导码和帧开始符

一个帧以7个字节的前导码和1个字节的帧开始符作为帧的开始。快速以太网之前,在线路上帧的这部分的位模式是10101010 10101010 10101010 10101010 10101010 10101010 10101010 10101011。由于在传输一个字节时最不重要的位最先传输(即低位最先传输),因此其相应的16进制表示为0x55 0x55 0x55 0x55 0x55 0x55 0x55 0xD5。

10/100M 网卡(MII PHY)一次传输4位(一个半字)。因此前导符会成为7组0x5+0x5,而帧开始符成为0x5+0xD。1000M网卡(GMII)一次传输8位,而10Gbit/s(XGMII) PHY芯片一次传输32位。 注意当以octet描述时,先传输7个01010101然后传输11010101。由于8位数据的低4位先发送,所以先发送帧开始符的0101,之后发送1101。

报头

报头包含源地址和目标地址的MAC地址,以太类型字段和可选的用于说明VLAN成员关系和传输优先级的IEEE 802.1Q VLAN 标签。

帧校验码

帧校验码是一个32位循环冗余校验码,以便验证帧数据是否被损坏。

帧间距

当一个帧发送出去之后,发送方在下次发送帧之前,需要再发送至少12个octet的空闲线路状态码。

(PS:其实可以这么简单的理解,在以太网传输帧时,一帧数据最大是1538,出去以太网帧头帧尾这些附带数据外,以太网帧的最大负载就是1500字节,那么这1500个字节是来自上层协议总的数据包,在网络层中IP头有20个字节,也就是说在IP层可以接受上层协议最多的字节就是1480,在传输层中,如果使用TCP的话,除去TCP的头,还有12字节为TCP的时间戳,在传输层可以接受上层协议的最大数据就是1480-20--12=1448字节),这1448字节就是应用层的最大负载数据,这么一来,如果使用TCP作为传输层协议传输数据时,应用层每包的数据不要超过1448字节,不然会造成分包的操作。TCP的协议数据单元被称为段。

参考http://blog.csdn.net/yusiguyuan/article/details/21439903

你可能感兴趣的:(C++,线程,网络编程,以太网)