又是新的一年,展望2023年,博主给大家带来了网络中数据链路层的重点总结,附上博主本人的实例,帮助大家更好的理解数据是怎么在网络中传输的。
MAC地址,即 Media Access Control Address,用于标识网络设备的硬件物理地址。
MAC地址用来识别数据链路层中相连的节点;
长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。
特殊的MAC地址:
广播数据报:发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报的MAC地址为:FF:FF:FF:FF:FF:FF
以下为主机B传输数据到主机C经过的网络设备:
对于以上经过的网络设备:
集线器和二层交换机不会对数据报封装和分用,不算在下一跳设备。
对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从A到B的过程:
总的来说:
“以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了 一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
以太网帧格式:
以太网的帧格式如下所示:
源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固 化的;
帧协议类型字段有三种值,分别对应IP、ARP、RARP;
帧末尾是CRC校验码。
以太帧来进行数据的封装
以太帧真正的给到了网卡,让物理介质进行传输的数据:
经过网络层(IP协议)处理之后,我们根据路由表从长期目标(目标ip)计算出了短期目标(下一条ip)。但数据链路协议的目标地址需要的是一个mac地址,怎么把下一跳ip换成mac地址?
由配置路由表 + 路由计算算法来保证!!
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
上述遗留了一个问题: 一台主机能否知道同一个LAN内其他主机IP -> MAC 的映射关系?
能,本机内部通过一张ARP表来进行维护
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不 符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来 获得目的主机的硬件地址
如下图:
静态是一开始自带的,动态是计算出来的。
下图是抓了一个ARP协议的包:
bu段
举一个在博主总结的网络编程博文中的例子:
链接如下:
下图很直观地解释了数据是怎么从应用层一层一层封装然后从网卡发送出去,一跳一跳地到达目标主机的:
客户端在主机内存就以及通过OS封装好了数据,并从网卡发送到路由器上,然后路由器分用拆包,更改下一条的mac地址,又封装起来继续在网络中发送…重复这个过程直到到达目标主机,然后不断向上分用,服务器最终就能拿到数据,并且做出响应。
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。
以上就是数据链路层的重点总结了,要是各位伙伴有什么疑问或者博主写的不对的地方,欢迎私信博主