以太网有两种数据包格式
总共包括了5个部分,其中重要的是二层地址(MAC ADDRESS)
目的MAC地址 (Destination) 6 BYTE |
源MAC地址 (Source) 6 BYTE |
类型 (TYPE) 2 BYTE |
数据帧 (DATA) 46~1500 BYTE |
帧校验 (CRC) 4 BYTE |
目的MAC地址:6 字节,标志数据帧接收方的数据链路层地址(二层地址)
源MAC地址:6 字节,标志数据帧发送方的数据链路层地址(二层地址)
类型:2 字节,表示数据链路层之上的第三层协议的协议类型
例如: type = 0x0800,代表第三层使用的就是IPV4
type = 0x86dd,代表第三层使用的就是IPV6
帧校验:用于数据帧的差错校验,传输过程中数据有没有变化。这个CRC是根据以太网的帧头部分(源MAC,目的MAC,类型,14个字节)和负载部分(数据帧,包括3~7层的数据计算得到),用于数据帧的纠错。纠错机制就是源端计算一次数值,填写在CRC字段中,目的端收到之后在进行一次计算,将两次的结果进行比较,用于保证可靠传输。
数据经过以太网的打包,增加了18个字节
数据帧的大小也有规范:最小是46字节,最大是1500字节。所以可以得出以太网帧的大小范围
最小数据帧:6(目的MAC) + 6(源MAC) +2(类型)+ 46(数据帧) + 4 (CRC) = 64 字节
最大数据帧:6(目的MAC) + 6(源MAC) +2(类型)+ 1500(数据帧) + 4 (CRC) = 1518 字节
备注:
帧头:源MAC+目的MAC+类型 = 帧头
帧尾:CRC校验字段
目的MAC地址 (Destination) 6 BYTE |
源MAC地址 (Source) 6 BYTE |
长度 (Length) 2 BYTE |
802.2子层(LLC子层) 8 BYTE |
数据帧 (DATA) 38~1492 BYTE |
帧校验 (CRC) 4 BYTE |
802.3的组成部分:目的MAC + 源MAC + 长度+ CRC
长度:2 字节,表示的是802.2子层和数据帧负载部分的数据总长度,单位是字节,取值范围为46~1500
802.2(逻辑链路控制,LLC logic link control):8 字节,由于LLC已经占了8个字节,所以数据帧的范围减少了8,取值范围变成了38~1492 字节
备注:
怎么判断帧头的最后两位是类型(type)还是长度(length)
类型:帧头最后两个字节的取值> = 0x0600,1536时,其含义是类型(type)
长度:帧头最后两个字节的取值<= 0x05dc,1500时,其含义就是长度(length)
802.3(MAC子层) + 802.2(LLC子层)格式的以太网帧使用比较少。
在以太网帧链路中传输的时候,并不是直接把以太网数据帧发出去,而是一个以太网帧之前需要发送8个固定的字节,分别为前导码(7个字节)和帧开始界定符(1个字节)。只要想要发送以太网帧,必须先发送以太网的前导符和帧开始界定符。
前导码 7 BYTE |
帧开始界定符 1 BYTE |
以太网帧 |
帧间隙 最小 12 BYTE |
前导码 7 BYTE |
帧开始界定符 1 BYTE |
以太网帧 |
前导码(preamble):7字节,由0和1交互构成,固定取值如下
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
10101010 0xAA |
帧开始界定符(start of frame delimiter,SFD):一字节,固定取值为10101011(0xAB)
前导码+帧开始界定符:一共8个字节,代表了一个以太网帧的开始
帧间隙(interframe gap,IFG):指的是以太网中相邻以太网帧之间的时间间隙,简称IFG
数据帧之间的最小的时间间隔为发送12个字节(96 bit)的数据所对应的时间,计算公司如下,
IFG(s) = 96 (bit) /带宽(bps)
举个栗子,如果接口带宽为100Mbps(百兆带宽),则IFG = 96 / 100 = 960 ns
举个栗子,如果接口带宽为1000Mbps(百兆带宽),则IFG = 96 / 100 = 96 ns
所以说,带宽越大,IFG越小。一般就说IFG的大小为12字节。
MAC总共6个字节,分为前后各3个字节。
组织唯一标识符(3个字节) OUI Origanizationally unique Identifier 由IEEE来分配 |
扩展唯一标识符 Extended Unique Identifier EUI 由厂家分配 |
这只是一个小知识点,实际上MAC地址根据厂商号和批次号唯一确定。
数据包在传输过程中,每经过一个三层路由设备,其数据链路层的帧头的MAC地址都会发生变化。这里的三层路由设备指的是具有具有路由功能的网络设备,如路由器,三层交换机,防火墙。
三层路由设备不包括普通的二层交换机。
这里有一个疑问,二层交换机 三层交换机是啥区别。盲猜三层交换机有网卡,二层没有。
下层中会标识上层协议的原因就是因为上层协议的类型比较多,不标识的话接收方根本不知道怎么处理这个数据包,接收方根据标识逐步解包进行分析。
举个栗子,下面是一个以太网数据包,以16进制进行表示
首先这是一个以太网报文,二层网络,根据以太网的报文结构
数据链路层 2层
6 字节目的MAC 8C-53-C3-DB-14-6F,6 字节源MAC 24-41-8C-74-FC-66
下面是重点,2字节 08-00,到底是Ethernet II的报文还是802.3的报文,根据数值可以判断,0x0800 > 0x0600,所以是Ethernet II报文,而且是IPV4协议的。
网络层 3层
根据IPV4的报文进行分析
传输层 4层
应用层 5层
注:内容整理自B站UP主《牛兮兮的书》的系列视频,视频讲解非常好。