数据链路层

目录

1.以太网初识

1.1以太网帧格式

1.2认识MAC地址

1.3Mac与IP地址

1.4认识MTU

1.5MTU对IP协议的影响

1.6MTU对UDP协议的影响

1.7MTU对于TCP协议的影响

1.8查看硬件地址和MTU

2.ARP协议

[2.1 ARP协议的作用](#2.1 ARP协议的作用)

2.2ARP协议的工作流程

2.3ARP数据报的格式

2.4ARP欺骗(仅了解)


用于两个设备(同一种数据链路节点或者子网、网段)之间进行传递

1.以太网初识

"以太网"不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;

例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;

以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;

1.1以太网帧格式

源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;

帧协议类型字段有三种值,分别对应IP、ARP、RARP,表示上层要交付的协议的类型。

帧末尾是CRC校验码。

如下为AI内容:

1.2认识MAC地址

MAC地址用来识别数据链路层中相连的节点;

长度为48位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)

在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址).

1.3Mac与IP地址

IP地址描述的是路途总体的起点和终点;

MAC地址描述的是路途上的每一个区间的起点和终点;

1.4认识MTU

MTU相当于发快递时对包裹尺寸的限制.这个限制是不同的数据链路对应的物理层,产生的限制

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位(前面图里的PAD);注意,是有效载荷,而不是整个mac帧大小。

最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;

如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);

不同的数据链路层标准的MTU是不同的;

1.5MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包

将较大的IP包分成多个小包,并给每个小包打上标签;

每个小包IP协议头的16位标识(id)都是相同的;

每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);;

到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;

一旦这些小包中任意一个小包丢失,接收端的重组就会失败.但是IP层不会负责重新传输数据;

1.6MTU对UDP协议的影响

一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报.

这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败.那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

1.7MTU对于TCP协议的影响

TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);简单的理解就是,MTU是mac帧有效载荷的大小限制,那么往上,依次去掉网络层标准的20字节报头,传输层标准的20字节报头,那么传输层的MSS即tcp的有效载荷大小最大就是1460(假设MTU为1500)。

TCP在建立连接的过程中,通信双方会进行MSS协商

最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)

双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,

然后双方得知对方的MSS值之后,选择较小的作为最终MSS。

MSS的值就是在TCP首部的40字节变长选项中(kind=2);
稍微总结下,整个网络通信的过程中(以太网协议),假设主机A把消息发给主机B,那么,过程如下:

主机A把消息从应用层向下传递,依次封装。

其中,网络层会把自己的ip、主机B的ip放入报头,数据链路层则放入自己的mac地址,和本地子网的路由器的mac地址(假设主机B在路由表中没有被发现,被发现的话会填入主机B的mac地址,另外,不清楚mac地址的话就要靠ARP协议,详情看下面)。

然后将报文通过物理层发送到整个局域网里,此时以太网中,所有主机都会收到这个报文,根据这个报文的目的mac,与自己的mac进行比较。

没有校对成功的主机在数据链路层就把报文丢弃,上层不清楚这个报文的存在,校对成功的主机则将报文进行分用,继续向上层传递。

接着报文在网络中经过了复数个子网,最后到达了主机B所在的子网,以类似的原理最终将报文送到了主机B。

注意,以太网中是有碰撞检测的(就是多个主机都发了报文,然后内容就乱了),发送碰撞就要进行碰撞避免(比如这几个主机都先沉默,等一会儿再发,减少碰撞的概率)等等。
我们想下,如果局域网里的主机太多,那么发送碰撞的概率几乎是必然的,那怎么办呢?这时候就是交换机的作用了。具体的我就不说了,了解下即可。如下为AI

1.8查看硬件地址和MTU

linux下ifconfig

windows下ipconfig /all和netsh interface ipv4 show subinterface

2.ARP协议

虽然我们在这里介绍ARP协议,但是要注意!!!,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议;

2.1 ARP协议的作用

ARP协议建立了主机IP地址和MAC地址的映射关系.

· 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;

数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;

因此在通讯前必须获得目的主机的硬件地址;

2.2ARP协议的工作流程

以下图片为AI生成

源主机发出ARP请求,询问"IP地址是192.168.0.1的主机的硬件地址是多少",并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);

目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;注意,不管是请求还是应答,所有主机都是先看mac帧的报头中的目的mac地址,是广播且帧类型是arp就直接交付给上层协议arp,单播则跟自己的mac地址进行比较,一致且帧类型是arp的交付给上层协议arp,否则丢弃。在arp里,先看op字段,如果是1,即请求的话,看目的ip地址跟自己的ip地址是否一致,一致的话,构建arp应答(源是自己的ip和mac,目的是请求里的源ip和mac),进行单播,不一致的话,就在arp协议处丢弃报文;如果是2,即应答的话,看目的ip跟自己的ip是否一致,一致的话把应答里的源ip和源mac的关系进行缓存。

每台主机都维护一个ARP缓存表,可以用arp-a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

为什么要有缓存表?提高效率,减少带宽占用。

为什么表项要有过期时间而不是一直有效?减少无效缓存(比如主机的网卡换了mac也就换了,或者说干脆这个主机就不连这个局域网了)。

2.3ARP数据报的格式

下图为AI生成

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网;

协议类型指要转换的地址类型,0x0800为IP地址;

硬件地址长度对于以太网地址为6字节;

协议地址长度对于IP地址为4字节;

op字段为1表示ARP请求,op字段为2表示ARP应答。

2.4ARP欺骗(仅了解)

这是一种中间人攻击的方法,原理就是,假设一个局域网里有2台主机AB,一台路由器C。

C缓存了macA-IPA,A缓存了macC-IPC。

此时B发送大量arp应答给A、C(即使没有收到请求)。在应答里分别把源IP和源mac填入(macB-IPC)(macB-IPA),因为缓存表是使用新的映射关系,所以之后,A和C互相发送的消息,都必须先经过B,然后由B发送给另一方。

相关推荐
寂柒3 小时前
信号量——基于环形队列的生产消费模型
linux·ubuntu
一袋米扛几楼984 小时前
【密码学】CrypTool2 工具是什么?
服务器·网络·密码学
林姜泽樾6 小时前
Linux入门第十二章,创建用户、用户组、主组附加组等相关知识详解
linux·运维·服务器·centos
xiaokangzhe7 小时前
Linux系统安全
linux·运维·系统安全
feng一样的男子7 小时前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
南棱笑笑生7 小时前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip
yy55277 小时前
LNAMP 网络架构与部署
网络·架构
XDHCOM8 小时前
ORA-32152报错咋整啊,数据库操作遇到null number问题远程帮忙修复
服务器·数据库·oracle
Highcharts.js8 小时前
Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理
linux·运维·javascript·ubuntu·react.js·数据可视化·highcharts
Godspeed Zhao8 小时前
现代智能汽车系统——CAN网络2
网络·汽车