目录

一. 基本概念

二. 以太网

1. MAC地址

2. 以太网帧格式

三. 局域网通信原理

媒体访问控制

交换机

MTU

四. ARP协议

ARP数据报格式

​编辑

五. 跨网络通信流程

结束语


一. 基本概念

数据链路层介于物理层和网络层之间,最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。

  • 主机:配有IP地址,但不进行路由控制的设备
  • 路由器:既配有IP地址,又能进行路由控制、
  • 节点:主机和路由器的统称

链路(Link):一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。链路由传输介质和物理设备组成,传输介质主要有双绞线,光纤,微波。在两个节点进行通信的时候,链路只是一条完整通信路径的一部分

数据链路(Data Link):把实际控制数据传输协议的硬件和软件加到链路上就构成了数据链路

补充:报文在传输层叫数据段(Segment),在网络层叫数据包(Packet),在数据链路层叫做数据帧(Frame)

数据链路层的功能包括:

  1. 封装成帧:将网络层交付下来的数据报封装成帧,每个帧包含了控制信息(如起始标志,目的MAC地址,源MAC地址等)和数据部分
  2. 物理地址寻址:通过物理地址(MAC地址)来唯一标识网络中的设备,在数据链路层中使用MAC地址进行寻址和转发
  3. 媒体访问控制:在共享介质的网络中,数据链路层使用媒体访问控制协议(如CSMA/CD,CSMA/CA等)来协调多个节点之间的传输,避免冲突和碰撞
  4. 差错检查与重传:数据链路层负责检测和纠正传输过程中可能发生的位错误,通过差错检验码(如循环冗余校验码CRC)来实现
  5. 流量控制:数据链路层通过流量控制机制,确保发送方和接收方之间的数据传输速率匹配,避免数据丢失或溢出
  6. 链路管理:数据链路层负责建立,维护和释放链路链接,包括链路的建立,终止,确认以及链路状态的管理

数据链路层的协议有很多种,常见的有以太网(Ethernet),无线局域网(Wi-Fi)和点对点协议(PPP)等。不同协议适用于不同的网络环境和需求

二. 以太网

  • “以太网”不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等
  • 例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等
  • 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等

1. MAC地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为6字节,即48bits。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
  • MAC地址在网卡出厂时就确定了,不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突,也有些网卡支持用户配置mac地址)

MAC地址和IP地址的区别

1. 范围和层次

  • MAC地址是在局域网(子网,内网)范围内唯一标识设备的地址,一般只能在同一局域网内进行通信
  • IP地址可以在广域网(公网,外网)范围内唯一标识设备的地址,可以在不同的网络中进行通信

2. 分配方式

  • MAC地址由网卡厂商分配,通常是固定的,与设备绑定,一般情况下不会改变
  • IP地址由网络管理员分配,可以是静态分配或动态分配(如DHCP),可以根据需要进行更改

3. 使用场景

  • MAC地址主要用于局域网内的寻址和转发,例如以太网的数据链路层使用MAC地址进行设备之间的通信
  • IP地址主要用于跨网络通信和路由选择,在因特网中的网络层使用IP地址进行主机之间的通信

在路由转发的过程中,IP地址描述的是路途总体的起点和终点,MAC地址描述的是路途上的每一个区间的起点和终点

举例:

如果主机A想访问服务器B

  1. 服务器B具有公网IP,所以主机A可以直接使用公网IP进行访问;IP数据包中源IP地址是私有IP——192.168.1.201/24,目的IP地址是公网IP——122.77.241.3/24
  2. 但子网的数据要想发到公网,需要路由器根据路由表进行转发。所以要先将数据发给路由器,但IP报文内的目的IP又不能更改为路由器的IP地址,不然后续无法发送到服务器B。所以需要MAC地址,用于局域网(子网)内的数据发送
  3. 主机A在MAC帧中,源MAC地址为自己的MAC地址,目的MAC地址为路由器的MAC地址,发送数据
  4. 路由器收到主机A的数据帧,解包查看IP地址,发现不是给自己的,再根据路由表进行路由转发,途中可能还需要经过很多个路由器,使用的也是MAC地址,路由转发其实就是在多个局域网间跳转。

所以MAC地址用于局域网内通信,IP地址用于广域网通信,即起点和终点

2. 以太网帧格式

以太网的帧格式如下所示:

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度为48bits,6字节,在网卡出厂时固定
  • 类型有三种,对应后续的有效载荷类型:0800——IP数据包;0806——ARP请求/应答;8035——RARP请求/应答
  • 帧末尾是CRC校验码

两个问题

1. 报头和有效载荷如何分离?

MAC帧的报头是固定长度,即前14字节为报头,后续为有效载荷

2. 有效载荷如何向上交付?

根据报头的类型字段,0800代表IP协议;0806代表ARP请求/应答;0835代表RARP请求/应答。以此交付对应的上层

三. 局域网通信原理

假设有如下子网,有若干设备

如果主机A想和主机D通信,那么MAC帧的报头字段的源地址为macA,目的地址为macD。如果有效载荷为ip数据包,那么类型为0800

数据帧发送到网络中,所有该局域网的主机都会收到该数据帧,但其数据链路层解包发现目的地址不是自己的时候,会直接在数据链路层丢弃该报文。如此就只有主机D会解包,提取有效载荷,向上交付ip数据包

补充:网卡可以设置混杂模式,不论是不是发给自己的数据帧,都向上交付,这就做到了抓包

如此,同一时刻,局域网中只允许有一个数据帧传输。如果多个数据帧同时传输,则会产生数据碰撞,导致数据重叠错误。为此需要进行碰撞避免——媒体访问控制

媒体访问控制

在共享介质的网络中,多个设备可以同时发送数据,但如果两个设备在同一时间发送数据,会导致碰撞,造成数据丢失和网络拥塞。

为了避免碰撞,数据链路层采用了一些技术和协议。最常见的就是CSMA/CD和CSMA/CA


CSMA/CD(载波监听多点接入/碰撞检测)

  • CSMA/CD协议用于以太网等优先局域网中。在发送数据之前,设备会先监听信道,确保没有其他设备同时发送数据。
  • 如果两个设备在同一时间发送数据,会发生碰撞。此时,检测到碰撞的设备会发送一个特殊的信号来通知其他设备,并且会采用一种退避算法来随机延迟一段时间后重新尝试发送数据,以减少再次发生碰撞的可能性。
  • CSMA/CD适用于有线网络,因为在这种情况下可以快速检测到碰撞并采取相应的措施。然而,在现代的以太网中,随着全双工通信和交换式以太网的普及,CAMA/CD已经不再被广泛使用

CSMA/CA(载波监听多点接入/碰撞避免)

  • CSMA/CA协议主要用于802.11无线局域网中。由于无线信道的特性,碰撞检测不如有线网络那样可靠,因此CMSA/CA采取碰撞避免的策略
  • 在CSMA/CA中,设备在发送数据之前同样会监听信道,确保信道空闲。然而,在发送数据之前,设备还会使用一种称为“网络分配矢量”(NAV)的机制来预测信道的使用情况。并且采用随机退避算法来避免与其他设备的数据碰撞。
  • CSMA/CA适用于无线网络,因为它能够在一定程度上避免无线信道上的碰撞,提高了无线网络的效率和可靠性

交换机

  • 交换机目前是在以太网中使用最广泛的互连设备
  • 工作在数据链路层(也包括物理层)
  • 交换机对数据帧的转发是根据其MAC地址进行转发的
  • 使用交换机做为互连设备的以太网,称为交换式以太网,交换机可以根据MAC地址过滤数据帧,即隔离碰撞域

  • 交换机的每一个接口都是一个独立的碰撞域
  • 交换机隔离碰撞域但不隔离广播域(VLAN除外)

交换机左侧的主机也可以和右侧的通信,交换机负责数据转发,如果左侧出现数据碰撞,交换机可以防止数据碰撞影响右侧的网络

MTU

如果数据帧太长,那么在碰撞域中存在的时间就相对更长,那么碰撞的概率就更大。但数据帧太小,发送效率又低,所以数据帧的长度需要综合考虑

所以以太网帧中的数据长度规定最小46字节,最大1500字节。所以数据帧最短为60字节,最长为1514字节。如果ARP数据包的长度不够46字节,要在后面填补

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


MTU对IP协议的影响

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

  • 将较大的IP数据包分成多个分片,并给每个分片打上标签
  • 每个分片的IP协议报头的16位标识(id)都是相同的
  • 每个分片的IP协议头的3位标志字段中,第2位为1,表示允许分片,为0表示禁止分片;第三位来表示”更多分片”,是结束标记(当前是否是最后)。如果为0表示是最后一个分片,为1则不是最后一个分片
  • 到达对端时再将这些分片,按顺序重组,拼装到一起返回给传输层
  • 一旦这些分片中的任意一个分片丢失,接收端的重组都会失败,但IP层不负责重传,所以直接由TCP层进行超时重传

详细分片参看【计算机网络】网络层——IP协议的分片和组装部分


查看硬件地址和MTU大小

Linux下使用ifconfig命令

四. ARP协议

ARP协议并不是数据链路层的协议,而是介于数据链路层和网络层之间的协议

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

  • 在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,但不知道目的主机的MAC地址
  • 数据帧首先是被网卡接收的,如果接收的数据帧的MAC地址与本主机不符,则直接丢弃。
  • 因此在通信前必须获得目的主机的MAC地址

  • 源主机发出ARP请求,询问“IP地址为192.168.0.1的主机的MAC地址是多少”,并将这个请求广播到本地网络(以太网帧首部的MAC地址填FF:FF:FF:FF:FF:FF代表广播)。网卡收到广播的ARP请求,需要向上交付,不过是交付给ARP协议,而不是数据链路层
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本主机相符,则发送一个ARP应答数据帧给源主机,将自己的MAC地址填写在应答数据帧中
  • 每个主机都维护一个ARP缓存表,可以使用arp -a 命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址


ARP数据报格式

  • 前14字节为以太网固定长度报头
  • ARP请求/应答为固定长度28字节
  • 硬件类型指数据链路层网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于IP地址为4字节
  • op字段为1表示ARP请求,为2表示ARP应答
  • 注意到源MAC地址,目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层是以太网的情况是多余的,但如果链路层是其他类型的网络则有可能是必要的

ARP协议过程

有如下局域网

如果主机A想和主机B通信,但第一次通信主机A不知道主机B的MAC地址,因此需要广播ARP请求来获取主机B的MAC地址。ARP请求如下:

因为不知道主机B的MAC地址,所以使用广播,广播的ARP请求,目的MAC地址为全F(FF:FF:FF:FF:FF:FF)

局域网内的所有主机都会收到这个ARP请求,网卡识别目的MAC地址为全F,广播数据,需要向上交付,再根据帧类型识别是ARP请求/响应。所以向上交付给ARP协议。

ARP协议先看op字段,为ARP请求,再看目的IP地址,除主机B外,其他主机发现不是给自己的,就在ARP层丢弃报文,只有主机B会返回ARP响应,报文如下:

主机A收到ARP响应后,还会将主机B的IP地址和MAC地址的映射关系缓存在ARP缓存表中,下次访问主机B时会根据IP地址查表,有则使用,没有则先发送ARP请求获取MAC地址。

五. 跨网络通信流程

1. 应用层:应用程序向操作系统发出请求,例如在浏览器中输入网址——域名解析DNS,获取目标服务器的IP地址。


2. 传输层:操作系统将应用程序的请求封装成传输层数据段(Segment),使用默认的端口号来建立与服务器的连接(三次握手),例如,HTTP为80,HTTPS为443。通常使用TCP协议来提供可靠的数据传输


3. 网络层:操作系统将传输层的数据段封装成IP数据包(Packet),并加上源IP地址和目标IP地址。计算机A需要先判断目标主机是否在同一局域网:

  • 子网掩码必须相同,不同肯定不在同一局域网,再将目标IP和本主机IP分别和子网掩码按位与,结果相同即再同一局域网
  • ARP(地址解析协议),如果通过发送ARP请求可以直接获取到响应,说明在同一局域网网

两个方法二选一即可

如果是同一局域网,那么可以直接通信,不需要路由器

如果目标IP是公网服务器,则操作系统会将数据包发送到默认网关,也就是路由器


4. 数据链路层:操作系统将IP数据包封装成数据链路层数据帧(Frame),并加上MAC地址和目标MAC地址。

如果是同一局域网主机,那么首先查找ARP缓存表看是否有IP地址和MAC地址的映射关系,有则直接使用,没有还需要先发送ARP请求获取目的主机的MAC地址,收到ARP响应后将映射关系保存在ARP缓存表中,然后开始网络通信

如果是外网主机,那么需要进行路由转发和NAT路由器替换,需要先将数据发送给路由器,目的MAC地址是路由器的MAC地址


5. 物理层:数据链路层数据帧通过物理介质(例如以太网)被发送到路由器。路由器会解析数据帧,根据目标IP地址选择下一跳路由器,并重新封装数据帧。这就是路由转发。其中源MAC地址和目标MAC地址一直改变,源IP也一直改变(被替换成出口路由器的IP地址),目的IP地址不变。源IP(私有IP)最终会被转化为NAT路由器的公网IP,数据也就被发送到了公网。

每一次IP地址的替换,路由器都会维护转换记录,保存在NAPT表


6. 重复路由转发和IP地址替换,最后数据到达公网的目的主机,服务器解包,分析需求,返回响应,重复上述操作。在数据返回的时候,根据NAPT表中的转换记录,将目的IP逐步替换,从最开始的NAT路由器的IP地址,换成内网的路由器的IP地址,最后到达内网主机所在子网的出口路由器。出口路由器根据NAPT表,将目的IP地址填写为私有IP,数据成功返回——浏览器显示网页内容

需要注意的是,这只是简单的情况,实际上还有很多因素会影响内网主机访问公网服务器的过程,例如网络拓扑结构,路由策略,防火墙等。不同的应用场景和网络环境可能会有不同的细节和差异

结束语

本篇博客到此结束,感谢看到此处。
欢迎大家纠错和补充
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。