【Linux网络编程十一】网络原理之数据链路层
数据链路层
- 1.工作原理
- 2.MAC帧
- 3.ARP协议
1.工作原理
数据链路层解决的是,直接相连主机(主机和路由器)之间数据交付的问题。
在网络中真正的发送数据的是在数据链路层,在数据链路层根据MAC地址来进行发送。
MAC地址是用于在同一子网内部确认双方身份的。
网络层的IP协议是用来决策路径的,可以找到目的网络在哪里,但在该目的网络中具体的主机还需要数据链路层的MAC地址来唯一标识。
网络协议当中,每一层都有它自己的作用,IP解决的是跨网络传送到主机的问题,但你再怎么跨网络你得先找到下一跳(路由器),然后自下向上交付到路由器的网络层再进行决策,再重新交到下层再找到下一跳,找到后再进行自下向上交付到网络层,直到跳到目的主机上。
要注意MAC帧只工作在数据链路层,IP工作在网络层,所以在网络层的路径决策转发跟MAC一点关系都没有。网络层的路由转发是根据IP地址的。
2.MAC帧
【如何分离报头和有效载荷】
MAC帧采用定长报头,将定长的报头拿下来就是有效载荷了
【如何交给上层,如何分用】
MAC帧报头里面有个类型,不同的类型表示交给上层的协议不一样
类型为0800表示上层使用的是IP协议
类型为0806表示上层使用的是ARP协议
【MAC地址】
1.MAC地址用来识别数据链路层中相连的节点;
2.长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
3.在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
【MAC地址与IP地址】
IP地址描述的是路途总体的起点和终点。
MAC地址描述的是路途的各种路段的起点和终端。
3.ARP协议
我们已经知道在网络中真正发送数据的是在数据链路层,根据MAC地址进行发送。那么进行转发时,路由器是如何知道MAC地址的呢?
路由器是根据ARP协议找到目标主机的MAC地址的。
而ARP协议准确来说不是网络层的协议,,而是一个介于数据链路层和网络层之间的协议;
【原理】
路由器其实一开始并不知道目的主机的MAC地址的,而是通过发送ARP请求报文,目的主机接收到ARP请求后,就会发送ARP应答,这个应答里就保存了目的主机的MAC地址,这时候路由器接收到ARP应答后,就能知道目的主机的MAC地址了。而ARP报文中报头的目的地址一开始不知道就填为FFFFFF表示广播地址。根据局域网的通信原理,我们知道这个报文是会向局域网中所有的主机都发送一次。
【实践】
ARP请求
ARP应答
每台主机它不区分是请求还是应答,只要收到ARP报文,就先看op,是二这个主机才识别到这是一个arp的应答,它立马意识到,一定是我曾经发起过请求所以我的主机收到了应答。op提取完,路由器就直接提取发送端的mac地址和发送端的ip地址,这样路由器就知道了目标主机MAC地址和它对应的IP地址所对应的映射关系。
所以在ARP的过程中,收到任何的ARP报文,都是先看OP字段。
根据op字段决定ARP的类型。
请求时看有效载荷中的目的地址
应答时看的是有效载荷中的发送方地址