网络原理(5)—— 数据链路层详解

目录

一. 以太网

1.1 认识以太网

1.2 网卡与以太网

1.3 以太网帧格式

二. 认识MAC地址

三. MAC地址 与 IP地址 的区别

4.1 定义

4.2 分配方式

4.3 工作层次

4.4 地址格式

4.5 寻址方式

四. ARP协议 

4.1 引入 

4.2 ARP的概念

4.3 ARP工作原理

五. MTU 与 MSS 

 5.1 MTU 

5.2 MSS 

 5.3 TCP分段与IP分片 

5.4 避免分片 


一. 以太网

1.1 认识以太网

   以太网(Ethernet)不是一种具体的网络,而是一种广泛使用的局域网(LAN)技术,它规定了物理层和数据链路层的通信协议。以太网可以使用多种传输介质,包括同轴电缆、双绞线和光纤,就像是家里的电线系统,只不过它是用来连接电脑和其他设备的。

   路由器通过以太网线连接到调制解调器(俗称“猫”,“光猫”-->“光纤调制解调器”),然后通过这个调制解调器连接到互联网,这样就能上网了。

举个例子:

   如果你家里有很多电器,比如灯泡、电视和冰箱,它们都需要用电来工作。电线就是连接这些电器和电源的一个通道,让电能够从电源传到每个电器。以太网也是这样,它是一种通道,让电脑和其他设备能够互相“说话”和交换信息。 

1.2 网卡与以太网

   网卡(Network Interface Card,简称NIC)是一种硬件设备,用于将计算机连接到计算机网络,使计算机能够通过该网络与其他计算机进行通信。网卡通常插在计算机的主板扩展槽中,或者通过USB接口连接,现在很多计算机的网卡都是直接集成在主板上。

   网卡与以太网的关系,可以这样理解:以太网是一种常见的局域网技术,而网卡就是用来实现电脑与以太网连接的“桥梁”。简单来说,如果你想用电脑上网,就需要通过网卡连接到以太网,这样才能上网。就好比你想打电话给朋友,需要先拿起电话(网卡),然后通过电话线(以太网)连接到对方。

   网卡是实现以太网通信的关键组件之一,提供了计算机与以太网传输介质(如双绞线、光纤等)之间的物理接口使得计算机能够按照以太网的标准进行网络通信。没有网卡,计算机就无法直接连接到以太网网络。

1.3 以太网帧格式

二. 认识MAC地址

   MAC地址,全称媒体访问控制地址(Media Access Control Address),是一个唯一的标识符,用来定义网络设备的位置。每个网络设备(比如网卡、路由器、交换机等)在出厂时都会被分配一个唯一的MAC地址。 在局域网(比如家里的网络)中,设备之间通过MAC地址来直接通信。

   MAC地址通常由六组两位的十六进制数字组成,这些数字通过冒号或者短横线分隔。例如:00:1A:2B:3C:4D:5E 或者 00-1A-2B-3C-4D-5E。

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

三. MAC地址 与 IP地址 的区别

4.1 定义
  • MAC地址:是一个唯一的硬件地址,它被烧录在网络接口卡(NIC)上,用于在局域网(LAN)中标识硬件设备
  • IP地址:是一个逻辑地址,用于在网络中标识设备的网络位置,可以是局域网、广域网或互联网。
4.2 分配方式
  • MAC地址:通常是固定的,由网络接口卡的制造商分配,并在生产过程中烧录到硬件中。
  • IP地址:可以是静态分配的,也可以是动态分配的(通过DHCP服务器)。IP地址可以根据网络配置的变化而改变。
4.3 工作层次
  • MAC地址:工作在数据链路层(OSI模型的第二层),负责同一网络段内,相邻设备之间传输数据帧。(微观)
  • IP地址:工作在网络层(OSI模型的第三层),负责不同的网络之间路由数据包,进行路由规划(宏观)
4.4 地址格式
  • MAC地址:通常6个字节表示,MAC地址当前仍然可以给每个设备,都分配一个唯一的地址值。
  • IP地址:对于IPv4,使用4个字节表示;对于IPv6,使用16个字节表示
4.5 寻址方式
  • MAC地址:用于直接在局域网内寻找设备,通常是通过ARP将IP地址解析为MAC地址。以太网数据帧里面的MAC地址随着转发的过程,源MAC和目标MAC都会时刻发生改变(每经过一个交换机/路由器都会发生变化)MAC地址描述的是路途上的每一个区间的起点和终点
  • IP地址:用于在网络层寻址和路由数据包,进行路由规划,确保数据能够从源地址传输到目的地址。 IP地址描述的是路途总体的起点和终点

四. ARP协议 

4.1 引入 

   ARP协议就像是一个电话簿,帮助电脑在网络中找到其他电脑的"家门号码"。想象一下,你在一家大公司里,想要找到同事张三的家,但是你只知道他的名字(IP地址),不知道他家的具体地址(MAC地址)。这时候,你会在公司的大厅(局域网)里大声喊:“张三,你在哪?告诉我你家地址!”(发送ARP请求)。张三听到后,会告诉你他家的地址(发送ARP回复)。这样,下次你想找张三的时候,就可以直接按地址去找他了,而不需要再大声喊叫。
   简单来说,ARP协议就是电脑之间相互询问和告知彼此物理地址(MAC地址)的一种方式,这样它们就能在网络中正确地发送信息了。

4.2 ARP的概念

   ARP(Address Resolution Protocol)协议工作在OSl模型的第二层,即数据链路层。它的主要功能是将网络层(第三层)使用的IP地址解析为数据链路层(第二层)使用的MAC地址。

   在发送数据包时,网络层的IP协议负责确定数据包的目标IP地址,但是数据链路层的以太网协议需要知道目标的MAC地址才能在局域网内传输数据包。ARP协议就在这个转换过程中起到桥梁作用,它通过查询局域网内的设备来获取目标IP地址对应的MAC地址,从而确保数据包能够被正确地发送到目的地。 

4.3 ARP工作原理

1. 解析请求:当一个设备需要向局域网内的另一个设备发送数据时,它会首先检查自己的ARP缓存(一个内存表,用于存储IP地址与MAC地址的映射关系)
   如果目标IP地址的MAC地址不在缓存中,源设备将发送一个ARP请求,广播到局域网上的所有设备。

(ARP请求包含以下信息:a. 发送设备的IP地址和MAC地址    b. 目标设备的IP地址    c. 一个标志字段,表示这是一个ARP请求)

2. 解析响应:局域网上的所有设备都会收到这个ARP请求,但只有目标IP地址对应的设备会响应,响应设备会发送一个ARP回复,其中包含其MAC地址

3. 更新ARP缓存:源设备收到ARP回复后,会将目标IP地址和对应的MAC地址存储在自己的ARP缓存中,以便将来使用。

4. 数据传输:现在源设备知道了目标设备的MAC地址,它就可以将数据帧发送到局域网上的正确设备。

ARP的正常工作流程

  1. 设备A想要与设备B通信,但只知道设备B的IP地址,不知道MAC地址。
  2. 设备A会在局域网内广播一个ARP请求:“谁是IP地址X的拥有者,请告诉我你的MAC地址。”
  3. 设备B收到这个请求后,会回复一个ARP响应,告诉设备A自己的MAC地址。
  4. 设备A收到设备B的MAC地址后,就可以开始通信了。 

ARP欺骗(攻击行为)

   攻击者发送伪造的ARP响应给局域网中的设备,告诉它们:“我是IP地址Y的拥有者,我的MAC地址是Z。”  这样其他设备就会错误地将原本发送给IP地址Y的数据发送给攻击者的MAC地址。攻击者可以拦截、修改或丢弃这些数据。


ARP协议可以让当前设备获取到周围设备上的IP地址和MAC地址之间的映射关系。

  • IP协议路由转发的过程是拿着 “IP地址” 进行路由查表,得到的是 “网络接口”(抽象的概念);
  • ARP协议就是将“网络接口”转换成更具体的MAC地址,知道是具体的某个设备(IP地址 --> MAC地址)

网络接口

1. 定义

  • 网络接口指的是网络设备的物理或逻辑端口,用于设备与网络之间的连接。例如,计算机上的以太网端口、无线网卡或者虚拟网络接口。

2. 与IP地址的关系

  • 网络接口使用IP地址来发送和接收数据包。当一个设备想要与另一个设备通信时,它会将数据包发送到目标设备的IP地址。
  • 每个网络接口都需要至少一个IP地址来在网络上进行通信。一个网络接口可以配置一个或多个IP地址,这取决于网络配置和需求。
  • 在配置网络接口时,IP地址会被绑定到该接口上,这样当数据包发送到该IP地址时,网络设备就知道应该通过哪个接口来处理这些数据。
  • 网络接口负责将IP地址转换为MAC地址(通过ARP协议),以便在数据链路层上进行实际的帧传输。 

通过ARP协议,就可以得到网络接口与MAC地址的映射关系表: 

五. MTU 与 MSS 

 5.1 MTU 

    MTU(Maximum Transmission Unit),是指网络中一个数据包的最大传输单元,也就是一个数据包能够携带的最大数据量。

MTU的作用:

   MTU的大小决定了网络设备在发送数据时是否需要将数据分割成多个较小的数据包。如果数据包超过了MTU的大小,它就需要被分割,这个过程称为分片(fragmentation)分片会增加网络的开销,降低传输效率,还可能因为分片导致数据包丢失。

以太网 MTU:以太网MTU通常指的是在以太网(局域网技术)中,一个网络帧可以携带的最大数据量,以太网帧的负载就是以太网MTU。对于标准的以太网,这个值通常是1500字节。

IP MTU:IP MTU指的是在IP层,IP数据包的大小就是 IP MTU。这通常比以太网MTU要小,因为它需要为IP头部预留空间,可以说以太网MTU相当于IPMTU的一个容器,但IP MTU和以太网MTU通常会是一样的大小。

5.2 MSS 

   MSS(Maximum Segment Size)是指在一个TCP分段(segment)中,除去TCP头部的数据部分的最大大小。 MSS是在TCP连接建立时,两端协商的一个值,它决定了在TCP层每个数据包可以携带的有效数据量。

MSS的作用:

   MSS是为了确保TCP数据包在加上TCP头部后,整体大小不会超过网络的MTU,从而避免IP层对数据包进行分片通常,MSS的值会设置为MTU - IP头部 - TCP头部。通过适当设置MSS,可以优化网络性能,减少数据包分片的几率,提高网络的传输效率。

举个例子:

  • 假设以太网的MTU是1500字节。
  • IP头部通常是20字节,TCP头部通常是20字节。
  • 那么MSS可以是1500-20(IP头部)-20(TCP头部)=1460字节。 

 5.3 TCP分段与IP分片 

   如果发送了应用层发送了一个超大的数据,TCP就会进行分段(TCP Segmentation),分成多个TCP段发送,在分段的时候会考虑到网络层和数据链路层各自的职责。换句话说,TCP分段就是为了后面的IP不用再分片,因此TCP需要确保MSS的值不会过大。

    所以,在TCP三次握手阶段,客户端会和服务器进行协商,在协商MSS之前,两边都会比较自己的MSS缓冲区大小,以及MTU大小。如果客户端通知的MSS是1460,服务端通知的是1440,则会选择较小值1440,这样可以最大程度地避免数据包在中途被分片。 

   但是,数据包依旧可能会遇到链路上的设备接口低于MTU低于1500的路由,此时可能会进行IP分片(IP Segmentation)

   假如,你在上网的时候,数据包经过了一个只支持MTU为576字节的接口,这个时候数据包会被迫分为三份(具体分数看数据包大小),并且在每个数据包加上IP首部。如果原本只有20字节的IPv4首部,那么对于三层来说就额外多了40字节(20+20)。

  也许你会觉得40字节也不会挤压多少带宽,但如果这三个数据包丢了其中一个呢?此时会进行“重传”,但负责重传的是TCP或者4层以上进行,而不是网络层的IP进行重传。IP协议本来就是不可靠传输,因此其中一个IP分片丢失了,需要重传所有分片,也就是重传那一段TCP数据,传输的效率大幅度降低,而且有时候分片更容易导致丢包

   在IPv4协议的首部,有三个区域在分片时候起到重要作用。

  • 标识:标记分片,方便重组这些分片。
  • 片偏移:在重组时需要根据片偏移进行排序。
  • 标志:在分片的时候,其中的MF标志位会用到,MF是more fragment的缩写。当MF标志位为1时,表示后面还有分片。

   这里的问题是,如果路由设备收到中间的一个分片,可以用MF标志位判断出后面是否还有分片,但不知道后面还有多少分片而路由设备的缓冲区是有限的,分片太多,很可能会因为缓冲区的限制,导致部分分片被丢弃。

5.4 避免分片 

   处于三层的路由设备,职责就是更快更高效的传输数据包,分片会增加路由设备的算力和内存的负担。为了避免分片,很多路由设备会有一种叫MSS Climbing的功能。路由设备在看到TCP的SYN或者SYN/ACK包的时候,会把里面MSS的值和链路MTU进行对比。如果MSS值大于MTU值,很明显就会导致分片。因此,就会降低MSS的值以适应链路MTU。


   但是链路上的MTU如何被确定呢?就可以用到 PMTUD(Path MTU Discovery,路径最大传输单元发现)这项技术了。

   IPv4首部标志位里有个DF标志位,DF就是Don't Fragment的意思。

   如果设置了DF标志位,链路上的设备碰到超过MTU的数据包,不会进行分片处理,而是直接丢掉这个包,并且返回消息,告诉发送方需要进行分片,这样发送方就需要降低MTU,然后再次发送,直到发现MTU的最小值。

   但是,在IPv6就不一样了,IPv6只允许发送源对数据包进行切分,不允许链路上的设备进行分片。

   因此,IPv6不需要另外设置。如果数据包太大,链路上的设备直接丢包,并且返回消息告诉对方太大,这样也是可以发现MTU最小值的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始的LeetCode-算法】922. 按奇偶排序数组 II

给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。 对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。 你可以返回 任何满足上述条件的…

H264原始码流格式分析

1.H264码流结构组成 H.264裸码流(Raw Bitstream)数据主要由一系列的NALU(网络抽象层单元)组成。每个NALU包含一个NAL头和一个RBSP(原始字节序列载荷)。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…

AI大模型(二)基于Deepseek搭建本地可视化交互UI

AI大模型(二)基于Deepseek搭建本地可视化交互UI DeepSeek开源大模型在榜单上以黑马之姿横扫多项评测,其社区热度指数暴涨、一跃成为近期内影响力最高的话题,这个来自中国团队的模型向世界证明:让每个普通人都能拥有媲…

图的基本术语——非八股文

我之前只看到了数据结构与算法的冰山一角,感觉这些术语只会让知识越来越难理解,现在来看,他们完美抽象一些概念和知识,非常重要。 本篇概念肯定总结不全,只有遇到的会写上,持续更新,之前文章已经…

oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区

分区表 是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表,这些子表称为分区。 分区可以基于不同的维度,如时间、数值范围、字符串值等,将数据分散存储在不同的分区 中,以提高数据管理的效率和查询性能,同时…

本地快速部署DeepSeek-R1模型——2025新年贺岁

一晃年初六了,春节长假余额马上归零了。今天下午在我的电脑上成功部署了DeepSeek-R1模型,抽个时间和大家简单分享一下过程: 概述 DeepSeek模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司,致力于开发高效、高性能…

C++11详解(一) -- 列表初始化,右值引用和移动语义

文章目录 1.列表初始化1.1 C98传统的{}1.2 C11中的{}1.3 C11中的std::initializer_list 2.右值引用和移动语义2.1左值和右值2.2左值引用和右值引用2.3 引用延长生命周期2.4左值和右值的参数匹配问题2.5右值引用和移动语义的使用场景2.5.1左值引用主要使用场景2.5.2移动构造和移…

手写MVVM框架-构建虚拟dom树

MVVM的核心之一就是虚拟dom树,我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称(英文大写)ele, // 对应真实节点children,…

【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

pytorch实现门控循环单元 (GRU)

人工智能例子汇总:AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快,参数更少相对较慢,参数更多结构复杂度只有两个门(更新门和重置门)三个门(输入门、遗忘门、输出门)处理长时依赖一般适…

PAT甲级1032、sharing

题目 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, loading and being are stored as showed in Figure …

最小生成树kruskal算法

文章目录 kruskal算法的思想模板 kruskal算法的思想 模板 #include <bits/stdc.h> #define lowbit(x) ((x)&(-x)) #define int long long #define endl \n #define PII pair<int,int> #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); using na…

为何在Kubernetes容器中以root身份运行存在风险?

作者&#xff1a;马辛瓦西奥内克&#xff08;Marcin Wasiucionek&#xff09; 引言 在Kubernetes安全领域&#xff0c;一个常见的建议是让容器以非root用户身份运行。但是&#xff0c;在容器中以root身份运行&#xff0c;实际会带来哪些安全隐患呢&#xff1f;在Docker镜像和…

ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解ConcurrentHashMap为什么线程安全&#xff1b;ConcurrentHashMap的具体细节还需要进一步研究 目录 ConcurrentHashMap介绍JDK7的分段锁实现JDK8的synchr…

[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置

2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方&#xff0c;在空白处鼠标右键选择通过Code打开 打开Vscode&#xff0c;点击platformIO图标&#xff0c;选择PIO Home下的open&#xff0c;最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…

述评:如果抗拒特朗普的“普征关税”

题 记 美国总统特朗普宣布对美国三大贸易夥伴——中国、墨西哥和加拿大&#xff0c;分别征收10%、25%的关税。 他威胁说&#xff0c;如果这三个国家不解决他对非法移民和毒品走私的担忧&#xff0c;他就要征收进口税。 去年&#xff0c;中国、墨西哥和加拿大这三个国家&#…

九. Redis 持久化-AOF(详细讲解说明,一个配置一个说明分析,步步讲解到位 2)

九. Redis 持久化-AOF(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位 2) 文章目录 九. Redis 持久化-AOF(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位 2)1. Redis 持久化 AOF 概述2. AOF 持久化流程3. AOF 的配置4. AOF 启…

基于Springboot框架的学术期刊遴选服务-项目演示

项目介绍 本课程演示的是一款 基于Javaweb的水果超市管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附…

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 补环境逆向 部分补环境 …

java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数

卸载好注册表,然后安装11g 每次在执行orderby的时候相当于是做了全排序,思考全排序的效率 会比较耗费系统的资源,因此选择在业务不太繁忙的时候进行 --给表添加注释 comment on table emp is 雇员表 --给列添加注释; comment on column emp.empno is 雇员工号;select empno,en…