以太网协议
-
问题
- 如何让目标设备识别到是我发送给它的数据,而不是我发送出去后,让所有连接我的的设备都收到?
- 数据通过电信号0或1发送,当数据发送到数据链路层时,如果直接发送0或1,假设数据达到对方,对方如何知道你发送的是什么,只知道是一堆0或1电信号?
-
提出
- 当数据包下发到数据链路层,以一种规则进行约束(以太网协议),通过把数据添加头部信息包含目标地址,源地址,以及检验信息等,让数据通过电缆能够发送到指定的另一端,并且能够还原到原先数据。
-
知识
- 网络通讯实际上是电信号通讯,是通过MAC地址交流的,而不是IP。
- 网络设备的MAC地址是全球唯一的物理地址。MAC地址长度为48比特,通常用十六进制表示。
- 以太网协议规定,一组电信号(0或1组成)构成一个数据包,称为帧,每一个帧都由标头和数据两部分组成。
-
结构
目前以太网中大多数的数据帧使用的是EthernetII格式。
-
其中目的地址,原地址,类型共有18个字节,组成以太网帧的头部
目的地址,指的是目标网卡的MAC地址。
源地址,指的是自己的MAC的地址,
类型,用来识别这个数据用来做什么的。 -
数据部分,1500字节是IP层下发下来的数据包。
-
CRC占用4个字节。
-
该以太网帧共有1518个字节。
- 以太网帧的范围大小为64-1518字节。。
数据不得超过1500字节(MTU),并加上以太网头部,共有1518个字节,14以太网首部,CRC4个字节。
如果数据不足64位,会填补0位到64位发送。 - 以太网帧的头部固定大小是18位,当接收方收到时,可以根据18位数来解析头部消息,以便解析数据,俗称边界信息,这里没有长度记录,只能通过边界信息判断。
- 附上目的地MAC物理地址,以太网帧的MAC地址获取是通过ARP协议获取的,通过广播发送给局域网获取MAC地址的数据报,一般获取MAC的数据报,以太网帧的类型为0x0806。
- 在发送出去之前,会计算数据的CRC用于验证数据的完整性,并记录到数据报上,当接收端收到后,重新计算该数据报的CRC与记录的CRC比较,如果不同,则认为丢失或者被破坏了。
- 把以太网帧广播出去,每个设备的数据链路层收到后,通过类型判断这是获取MAC地址的ARP协议还是其他的,如果是获取ARP,就把MAC地址等信息(包含IP等)回馈回去,如果不是,则比较MAC地址是否跟自己的物理地址一致,如果是,就接收,如果不是,就放弃。
-
以太网协议中有个类型,这个类型指明这个数据是用来做什么的,比如,IP协议对应的Type值为0x0800,是用来上传给上一层IP协议处理的,ARP协议对应的Type值为0x0806,是获取MAC地址的。
-
关于MAC地址的获取,可以参考下ARP协议,ARP协议就是通过咨询或者广播的方式获取MAC地址,有些路由器会接入设备时,会自动的发送一个消息来获取新接入的MAC地址,IP地址映射的MAC物理地址会被记录起来。
-
设备上网络适配器都有MAC地址