在网络的应用层 传输层 网络层 数据链路层 物理层中我的上一篇博客粗略的介绍了网络层的ip协议,在这篇博客你将花费8分钟看有关数据链路层的有关信息
1.对比理解“网络层”和“数据链路层”
假如有一个主机A想要发送主机B一些数据报文,这些数据报文会从路由器转发到主机B的局域网,再从局域网里给主机B发送数据报文,这个工作就是网络层的IP协议所干的事情。
ip协议能够让数据报文从A主机运送到B主机。路线如下

在忽略掉ip分片等细节后,数据报文就从A主机传输到B主机,如果传输失败,ip协议上层的传输层TCP协议会有相关的机制。
那ip协议所在层的下一层数据链路层解决的就是从点到点局域网内的传输。
在数据链路层我们需要了解以下概念
1。以太网
- “以太网”不是一种具体的网络,而是一种技术标准,既规定了数据链路层的内容,又有一些网络层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率
- 以太网是当前应用最广泛的局域网技术和以太网并列的还有令牌环网,无线LAN等。
以太网帧
当数据从网络层到数据链路层,要做的就是加上报头封装,以太网的帧格式如下

要注意以下几点 - 目的地址和源地址是MAC地址,而不是IP地址
- 类型指的是上层传入的数据类型有三种IP ARP RARP反应在格式中填入的值为 0800 0806 8035
- 帧末为是CRC校验码,功能和IP协议格式里的16位校验码一样,确定报文是否损坏。
- 数据有最大最小的传入大小分别为16字节和1500字节(MTU),这导致了IP报文的分片。
- 以太网帧的报头是定长的,易于分离报头和数据。
从上面我们看到了相对于网络层新的概念
2.MAC地址
- MAC地址用来识别数据链路层中相连的节点; 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改.
- mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).
linux中可以使用指令ifconfig查看MAC地址

对比IP地址和MAC地址
MAC地址描述的是路线上每一个区间的起点和终点,会不断改变。
IP地址描述的是路途总体的起点和终点,终点的IP地址一般不会变化。
3.ARP协议
ARP协议属于数据链路层的协议,但是又不是单纯属于数据链路层,而是一个介于数据链路层和网络层之间的协议
ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系。
- 在网络通讯时,源主机是知道目标主机的IP地址的,但是不知道目标主机的MAC地址,无法完成数据链路层的报头。
- 数据包首先被网卡接收到再去处理上层协议的,如果接受的数据报的硬件地址与本机不符合,则直接丢弃
- 在通讯传输数据包时必须获得目的主机的硬件地址。

因为ARP请求应答的字节数为28比最低数据量还低,因此需要填充18个比特位。
ARP数据报格式如下

- 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的,因为当数据链路层传到上层会进行解封 会把以太网的报头丢弃。
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节;
- 协议地址长度对于和IP地址为4字节;
- op字段为1表示ARP请求,op字段为2表示ARP应答
假设有两个主机A,B。主机A的IP地址设为172.20.1.1 MAC地址设为08:00:20:74:CE:EC 主机B的IP地址设为 172.20.1.2 MAC地址设为08:00:20:74:CE:ED
主机A要获取主机B的MAC地址,首先它会发送ARP请求应答的以太网帧。
首先A主机会发送一个ARP请求报文 。根据各项格式要求创建ARP数据报,op设为1,因为主机A不知道主机B的MAC地址所以将目的以太网地址的比特位全部设置为1,广播发送,收到报文的其他主机首先根据以太网目的地址确定是给自己发送的报文,再从格式和OP的值确定这是ARP请求,从目的IP地址确定不是发送给自己的ARP请求,丢弃报文。
对于主机B收到了一个ARP请求,并且从目的IP地址确定是请求自己的MAC地址,从请求中获得了以太网源MAC地址,因此发了一个ARP相应包,将以太网目的地址填入主机A的MAC地址,以太网源地址填入自己的MAC地址,其他的根据各项格式要求创建ARP数据报,op设置为2,向四周发送,周围的其他主机从以太网目的地址确定不是发给主机的响应,丢弃。
主机A收到的帧从目的报文中确定是给自己发送的,再从格式和op确定是发给自己的ARP协议,得到主机B的MAC地址。
由此发送创建数据帧给主机B。
总结以下,过程如下
- 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网 段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自 己的硬件地址填写在应答包中;
ARP缓存表
假设主机A和主机B前几分钟确定了彼此的MAC协议,又有数据从A发送到B,就不需要再进行ARP请求和响应,主机A中有一张ARP缓存表,记录了主机B的MAC地址,再linux中可以用命令arp -p查看。

- 缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
为什么缓存表不是一直有效的?
假设有两个主机A B,之前两个主机成功通讯过,A主机的缓存表记录了B主机的MAC地址,有一天B主机的网卡出现了故障,换了一块新网卡,因此B主机有了一个新的MAC地址,如果缓存表一直有效,A主机会一直往失效的MAC地址发数据。
4.其他重要协议或技术
DNS(Domain Name System) **
DNS是一整套从域名映射到IP的系统
DNS背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆. 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.
对于DNS这一篇文章写的很详细,就不重复说了。域名系统DNS
ICMP协议
ICMP协议是一个网络层协议**
我们知道TCP协议能够稳定的传输数据,但是有时候如果TCP通过IP协议传输数据不断失败就会用到ICMP协议,举个例子。
TCP就像是个老板IP协议就像是老板手下的马仔,有一天老板手下有一批货要叫马仔从A城运到B城,但是运一次失败了,第二次运输还是失败了,作为老板一方面要安排人再重新发货,另一方面也要知道为什么前几次发货失败,是汽车抛锚了,还是警察抓的严了。
因此老板叫了一个机灵的小弟来送货,并且告诉他说“如果这次还失败,回来把失败原因说清楚”。
ICMP就是那个小弟。ICMP正是提供这种功能的协议; ICMP主要功能包括:
- 确认IP包是否成功到达目标地址.
- 通知在发送过程中IP包被丢弃的原因.
- CMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
- ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;
总结本博客知识点
- 以太网是一种技术规范,既规定了数据链路层的内容,又有一些网络层的内容
- MAC地址用来识别数据链路层中相连的节点,在网卡出厂时就确定了, 不能修改.
- 3.ARP协议建立了主机IP地址和MAC地址的映射关系,用于获得目的节点的MAC地址
- ICMP协议是一个网络层协议,用于判断数据传输失败的原因。

本文深入探讨了数据链路层的基本概念,包括以太网、MAC地址、ARP协议及其工作机制,同时简要介绍了ICMP协议的功能。

被折叠的 条评论
为什么被折叠?



