1、数据链路层属于2层
2、传输单元:帧
帧格式:
802.3 有线网卡
802.11 无线网卡,无线路由器都支持802.11
802开头的都是国际标准,是由IEEE国际学术组织制定的标准
3、帧结构的构成:MAC子层(帧头)+上三层数据+FCS(帧尾)
MAC子层(帧头)构成:目标MAC地址(6字节),源MAC地址(6字节),类型(2字节),总的大小=6+6+2 = 14 字节
FCS(帧尾):提供了一种错误检测机制,用来验证帧在传输过程中的完整性(4个字节)。
一个帧的容量是有限的:MTU值(最大传输单元),国内是1500字节,再加帧头+帧尾18个字节 =1518 字节就是帧的最大长度
MAC地址6字节如何算出来的?网卡的MAC地址就是16进制,由12位组成如:A3-CE-C9-11-AA-39
一个16进制转换为2进制是由4位组成,转换为bit:12 * 4 = 48 bit(比特),转为字节单位就是48 / 8 = 6 个字节,所以:MAC地址的2进制长度是48位,大小6个字节
类型:
- 0x0800:IP协议
- 0x0806:ARP协议
- 0x 代表16进制
类型字段的作用:识别上层协议,为上层提供服务
图示:
4、 工作在数据链路层的设备:交换机/网卡
交换机的作用:交换机是根据MAC地址转发数据
网卡的作用:生成帧(就是加帧同和帧尾)
5、交换机的工作原理:
设:当同一局域网下的两台PC进行通信
信息发送到目标的过程:
1)如:MAC地址为AA的PC向DD发送“Hello a”,会从应用层一路往下直到数据链路层,数据链路层的网卡会给数据包(报文)封装帧头和帧尾,形成数据帧,然后把数据继续传。
MAC地址表,记录物理端口和MAC地址的对应关系
2)当数据帧到达交换机的时候:交换机不需要把帧解封装只读取数据帧中的帧头和帧尾,解析完成后就能知道源MAC地址(发送消息PC的MAC)、目标MAC地址(接收消息的PC)和发消息的PC所在的端口(物理端口,如F0/1),然后交换机就完成机生第一次学习学习源MAC地址(一台新的交换机)生成MAC地址表,如果表已经存在那就将记录添加进去(记录物理端口和源MAC地址的对应关系如:AA (源MAC) F0/1(所在的端口))然后交换机根据帧的信息(目标MAC地址DD)转发。
3)转发过程:交换机会先从MAC地址表中寻找,如没找到交换机会把帧除了帧进来的端口都进行广播,连接了这台交换机的设备都会收到这条广播,如:MAC地址为BB的PC也收到了,这时BB的网卡就会判断这个的帧的帧头里面的目标MAC地址是给我的?不是,就不会继续解封装不继续往上送,干掉。直到DD这台PC收到就会进行解封装操作,得到AA发来的数据“Hello a”,这一过程中可能在当前交换机(1)的端口都找不到DD,这时就会找和当前交换机连接的交换机(2),交换机(2)也会继续交换机(1)的过程,生成MAC地址表,进行广播寻找,直到找到DD这台PC进行解封装操作,得到AA发来的数据“Hello a”。这里需要注意的是:交换机(2)生成的MAC地址表的端口地址是他自己的端口地址,也就是交换机1进入交换机2的地址,如:交换机1是从交换机2的F0/2的地址进来的那地址表就是:AA (源MAC) F0/2(所在的端口)。
在整个过程中交换机就干了两件事请:
- 这个帧来源那台PC的MAC地址,我需不需要学习生成MAC地址表
- 这个帧要去哪,我的MAC地址表有没有记录了,没有广播寻找
可参考下图:
目标pc收到信息后会进行响应回包过程如下:
1)这时是开始的目标MAC地址为DD的PC给AA回包, 所以源MAC地址就变成了DD,目标MAC地址就成了AA,DD向AA回包过程中交换机(2)也会进行学习,对源MAC地址进行学习,因为之前交换机已经创建MAC地址表,所以现在是向MAC地址表添加,记录物理端口和源MAC地址的对应关系参照下图就是添加记录:DD(源MAC) F0/1(所在的端口)
2)向MAC地址表添加完记录后,交换机就会安照DD提交的数据帧里面帧头包含的目标MAC地址(AA)进行转发数据,交换机就会找MAC地址为AA的PC在哪里?交换机转发数据的唯一依据就是自己的MAC地址表,恰好有记录目标地址AA与物理端口(F0/2)的对应关系,所以这里不需要广播寻找,直接单播把数据帧发送到AA对应的F0/2物理端口,这是数据帧就来到了交换机(1),交换机(1)就会查看帧头内的源MAC地址,你是谁发送过来的呀?目标PC的MAC地址是谁呀?这时交换机(1)就会发现,自己的MAC地址表没有关于源MAC地址为DD的记录,所以交换机(1)再次学习源MAC地址DD然后添加进自己的地址表内:DD(源MAC) F0/3(所在的端口)
3)到这里可能会疑惑,DD对应数据帧不是从交换机(2)的F0/1端口的PC发出来的?为啥记录在交换机(1)的MAC地址表里面就是 F0/3?因为交换机只管数据从自己的那个端口传进来的,不会管,最开始是从那个交换机端口发出的,(简单理解就是:交换机的MAC地址表,只会记录自己的端口,而且只会学习记录源MAC地址,不学习目标地址)
4)交换机(1)学习完之后,就会找你的数据帧内对应的目标MAC地址我的表里面有没有啊?恰好有记录目标地址AA与物理端口(F0/1)的对应关系,然后交换机(1)会把数据帧,通过单播的形式转发给AA也就是IP地址为10.1.1.1的PC,这时该PC就能都到数据帧了
如果已经某台PC对应的MAC地址已近在,交换机的MAC地址表内记录了,那么把这根网线拔掉对应的记录会默认在300s后消失,如果在这300s内把网线插到另一台PC上,那对应的表记录会立即更新,如:A对应的物理端口是F0/1,把B对应的物理端口是F0/2,拔出换给A,最后A的记录是F0/2(就是同一个MAC地址出现了不同的端口,记录会立即更新到目前的状态)
注意:这里讲的过程在现实中交换机都是自动完成的,而且都是电脑连接交换机之后开机就自动完成了, 因为电脑一开机就会发送DHCP Discovery(发现)广播包(目的:寻求服务器),这时就会被交换机的MAC地址表记录下来,之后就很少会广播里,使用单播,除非,目标是表里没有的,交换机不知道,才会再次广播。