当前位置: 首页 > article >正文

【Linux网络(七)】数据链路层

目录

1、认识MAC地址

2、 mac帧格式

3、局域网的通信原理

4、ARP协议

浏览器输入url1后发生的事情:(面试题)


数据链路层解决的是:直接相连的主机(不仅仅包括电脑,还包括路由器)之间,进行数据交付的问题

1、认识MAC地址

Mac地址用来在同一个局域网中,区分特定的主机。

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

MAC地址 像身份证号(唯一标识设备硬件),IP地址 像邮寄地址(逻辑定位网络位置)

信封(数据帧)上写收件人MAC地址(快递员只看这个送货到下一站)

信纸(IP包)内写收件人IP地址(确保最终送到正确城市和街道)

MAC地址 是设备硬件的“身份证”,负责局域网内精准投递。

IP地址 是网络中的“邮政编码”,负责全局路由定位。

协作方式:IP地址决定数据包的最终目的地,MAC地址决定下一跳交给哪个设备(如路由器或本地主机)。两者缺一不可,共同实现网络通信。

为什么需要MAC地址,只用IP地址不行吗?

IP地址是逻辑分配可变的,而MAC地址是物理设备的唯一标识,交换机等二层设备依赖MAC地址在局域网内高效转发数据

2、 mac帧格式

ARP:IP换mac

RARP:mac换ip

1、mac帧如何做到解包和封装?

采用定长报头       将报头和有效载荷进行分离

目的地址:下一跳主机要去的mac地址  

源地址:这台主机的mac地址

2、如何做到分用?

如何知道我的有效载荷是什么数据呢?

类型:0800  载荷是IP报文    0806 是ARP报文  8035 是RARP报文

通过类型就可以只要我要将我的有效载荷交给上层的谁。就可以做到分用。

3、局域网的通信原理

mac帧只在局域网中有效,经过路由器要经过解包和重新封包的过程。

局域网中的主机越多,发生碰撞的概率就越大。  碰撞避免算法来防止碰撞

交换机可以划分碰撞域,减少局域网中的碰撞。

发送的数据尽量少,因为数据量大需要花费的时间就长,发生碰撞的概率就会变大。因此一次要发送尽量少的数据。让更多的报文在局域网中岔开发送。即上面的最多1500字节。IP分片,tcp分段根本原因就是局域网通信原理。

因为要减少碰撞,所以最多发1500.那么数据链路层就给网络层说数据发送要少,IP层可以分片,但是分片不好,所以要减少分片。即网络层:1500-20(报头长度)=1480 ,那么控制数据的发送速度就是要传输层来控制,即tcp控制,那么tcp报头+有效载荷   = 1480  , 1480 - 20 = 1460 

1460:MSS---传输层(TCP) 单次能发送的应用层数据最大长度(不包括TCP/IP头部)

MTU 是物理网络的限制,决定数据链路层能传输的最大包大小。

MSS 是TCP为避免IP分片而主动限制的应用数据长度,基于MTU计算。

数据发送到目标网络,本质是通过无数个连续的子网实现的。

4、ARP协议

ARP协议是局域网协议。在局域网中进行通信,就一定要将数据封装成数据帧。在局域网中,将目标主机的IP转为mac地址!因为在路由器转发时是要进行解包和重新封包,因为只知道目标IP而不知道目标mac地址。

先进行广播,然后再一对一把地址反向回来。

以太网头部时mac帧 

ARP协议属于MAC帧上层,但是归属到数据链路层。

硬件类型:指网络类型,写1表示以太网。

协议类型:要转化的地址类型    0800代表的是IP地址

op:1表示ARP请求    2表示ARP应答

先进行广播,然后再一对一把地址反向回来。

在arp过程中,收到任何arp报文,都是先看op!!

 op决定了arp的类型是请求还是应答。如果是请求就看目的mac地址和目的ip地址,如果是应答就看发送端mac地址和发送端IP地址。

收到一个报文,它的入口路由器中会存在很多内网当中主机的ip地址到mac地址的映射关系

arp的周边问题:

1、arp只有在缓存失效的时候才会触发,不必每次都做。

2、ping会触发arp请求  ping目标IP 如果目标IP存在arp就会解析其mac地址并缓存到本地 ARP 表。就可通过 arp -a(Windows)或 arp -an(Linux)查看缓存的 IP 和 MAC 地址。

浏览器输入url1后发生的事情:(面试题)

http过层+域名解析:通过域名解析,拿到目标服务器的IP地址,浏览器拿着目标主机的IP地址进行http请求,三次握手建立连接,构建http请求,构建它的请求行,经过网络转发到达目标主机,目标主机进行http应答,构建响应,构建响应报头,加正文,再通过tcp连接把响应发给我,浏览器得到之后对报文做解析,解析之后对正文做解释,浏览器渲染就可以看到结果。https提一下

1、解析URL 

如果输入的URL是  (http://www.example.com/index.html)

协议:如HTTP或HTTPS,决定后续的通信方式

域名:如www.example.com  需要转化为ip地址

路径:/index.html,服务器上的资源路径

2、DNS查询-----将域名转化为IP地址

浏览器缓存:检查本地缓存是否有该域名的IP

系统缓存:查询操作系统(如本地hosts文件)

路由器缓存:检查本地路由器的DNS缓存

ISP的DNS服务器:向互联网服务提供商的DNS服务器发起递归查询

根域名服务器→顶级域名服务器(.com)→权威域名服务器(如example.com的NS记录),最终返回 IP。

3、建立TCP连接(和TLS加密)

浏览器通过ip地址和端口(默认HTTP是80,HTTPS是443)与服务器建立TCP连接,过程为三次握手:

a、客户端发送SYN   

b、服务器返回SYN+ACK

c、客户端发送ACK,连接建立

如果是HTTPS,需要进行TLS握手,以建立安全连接:

  1. 客户端发送支持的加密算法列表和随机数。

  2. 服务器返回选择的加密算法、证书(含公钥)和随机数。

  3. 客户端验证证书合法性(如颁发机构、有效期)。

  4. 客户端生成预主密钥,用服务器公钥加密后发送。

  5. 双方根据随机数和预主密钥生成对称会话密钥,后续通信加密。

4、发送HTTP请求

浏览器发送HTTP请求报头,内容包含:
请求行:方法(GET/POST)、路径、协议版本

请求头:Host、User-Agent、Accept、Cookie 等。

请求体:如POST请求中的表单数据)。

5、服务器处理请求并返回响应

服务器处理请求后返回 HTTP 响应报文:
·状态行:状态码(如200 0K、404 Not Found)。
·响应头:Content-Type、Content-Length、Cache-Contro1 等。
·响应体:HTML、CSS、JavaScript 等资源内容

6、浏览器解析和渲染页面

浏览器解析响应内容并渲染页面:
1. 构建 DOM 树:解析 HTML生成文档对象模型(DOM)。
2.构建 CSSOM 树:解析 CSS 生成 CSS 对象模型。
3.合并为渲染树:结合 DOM 和 CSSOM,排除非可见元素(如<head>)。
4.布局(Layout):计算元素的位置和尺寸(如盒模型)。
5.绘制(Paint):将渲染树转换为像素数据,显示到屏幕。
6.执行JavaScript:遇到<script>标签时,可能阻塞渲染,直到脚本执行完成。

7、断开连接

若使用 HTTP/1.1的 Connection:keep-alive,TCP 连接会保持复用;否则通过 四次挥手断开连接:
1. 客户端发送 FIN 包。
2.服务器返回ACK 包。
3.服务器发送 FIN 包。
4.客户端返回ACK 包。

telnet23端口, ssh22端口, 那么ping是什么端口 ???

ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. ICMP中根本就不关注端口号这样的信息

5、NAT技术

主机A、B、C都是通过路由器进行转发的。那么。要从服务器往回转发的时候,通过路由器时,路由器怎么知道要发给哪个主机?

路由器会维护转换表左边的IP地址唯一(就算相同,端口号也会不同) 右边也唯一,一一对应就可以反向查表,把数据给主机。

相关文章:

【Linux网络(七)】数据链路层

目录 1、认识MAC地址 2、 mac帧格式 3、局域网的通信原理 4、ARP协议 浏览器输入url1后发生的事情&#xff1a;&#xff08;面试题&#xff09; 数据链路层解决的是&#xff1a;直接相连的主机&#xff08;不仅仅包括电脑&#xff0c;还包括路由器&#xff09;之间&#x…...

Nginx RTMP 处理模块 (ngx_rtmp_handler.c) 详细分析

ngx_rtmp_handler 是 Nginx RTMP 模块中的核心处理部分&#xff0c;主要负责处理 RTMP 流会话中的数据接收、发送、ping 操作以及分块大小的设置等。 1. 全局变量 ngx_rtmp_naccepted: 记录接受的 RTMP 连接数。 ngx_rtmp_bw_out 和 ngx_rtmp_bw_in: 分别表示输出带宽和输入带…...

2025年渗透测试面试题总结-某奇安信-Ateam(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 奇安信-Ateam 一、SQL注入攻防技术体系 1.1 SQL注入类型矩阵&#xff08;基于利用方式&#xff09; …...

前端工程化--gulp的使用

gulp 介绍 gulp 是一个基于 Nodejs 的自动化构建工具&#xff0c;中文主页能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的合并、压缩、检查、监听文件变化、浏览器自动刷新、测试等任务 使用步骤&#xff1a; 安装 nodejs 全局安装 gulp npm install…...

谈谈对spring IOC的理解,原理和实现

一、IoC 核心概念 1. 控制反转&#xff08;Inversion of Control&#xff09; 传统编程中对象自行管理依赖&#xff08;主动创建&#xff09;&#xff0c;而IoC将控制权转移给容器&#xff0c;由容器负责对象的创建、装配和管理&#xff0c;实现依赖关系的反向控制。 2. 依赖…...

Windows 10 ARM64平台MFC串口程序开发

Windows 10 IoT ARM64平台除了支持新的UWP框架&#xff0c;也兼容支持老框架MFC。使得用户在Windows 10 IoT下可以对原MFC工程进行功能升级&#xff0c;不用在新框架下重写整个工程。熟悉MFC开发的工程师也可以在Windows 10 IoT平台下继续使用MFC进行开发。 本文展示MFC串口程序…...

31天Python入门——第16天:模块与库详解

你好&#xff0c;我是安然无虞。 文章目录 Python模块模块之间的调用 Python包库的概念Python标准库安装第三方库 \_\_name\_\_ \_\_main\_\_ Python模块 在 Python 中, 模块是一个包含函数、变量和类等代码定义的py文件. 所以也可以说, 普通的py文件就是一个模块. 模块可以…...

设计模式(创建型)- 原型模式

目录 定义 类图 角色 优缺点 优点 缺点 应用场景 案例展示 浅克隆 深克隆 定义 原型模式旨在创建重复的对象&#xff0c;同时确保良好的性能表现。它通过复制现有对象&#xff08;原型&#xff09;来创建新对象&#xff0c;而非使用传统的构造函数创建方式。这种设计…...

Redis + Caffeine多级缓存电商场景深度解析

Redis Caffeine多级缓存 Redis Caffeine多级缓存电商场景深度解析一、实施目的二、具体实施2.1 架构设计2.2 组件配置2.3 核心代码实现 三、实施效果3.1 性能指标对比3.2 业务指标改善3.3 系统稳定性 四、关键策略4.1 缓存预热4.2 一致性保障4.3 监控配置Prometheus监控指标 …...

spring-ai ollama小试牛刀

序 本文主要展示下spring-ai ollama的使用 示例 pom.xml <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency>这里以ollama示例 配置 spring:ai:olla…...

在 CentOS 系统中开机自动执行 Shell 脚本

在 CentOS 系统中&#xff0c;可以通过以下方法设置开机自动执行 Shell 脚本。推荐使用 systemd 服务&#xff08;现代 Linux 系统的标准方式&#xff09;&#xff0c;也可以使用传统的 /etc/rc.local 方法。 方法 1&#xff1a;使用 Systemd 服务&#xff08;推荐&#xff09;…...

【Linux】应用层协议 HTTP

应用层协议 HTTP 一. HTTP 协议1. URL 地址2. urlencode 和 urldecode3. 请求与响应格式 二. HTTP 请求方法1. GET 和 POST (重点) 三. HTTP 状态码四. HTTP 常见报头五. 手写 HTTP 服务器 HTTP&#xff08;超文本传输协议&#xff09;是一种应用层协议&#xff0c;用于在万维网…...

Linux下的socket演示程序3(udp)

server.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define SER_PORT 8888 //端口号 #define SER_IP "10.148.4.168" //服务器IP…...

数据可视化TensorboardX和tensorBoard安装及使用

tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具&#xff0c;而 TensorBoardX 是其社区驱动的替代品&#xff0c;支持 PyTorch 等其他框架。以下是它…...

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…...

AWTK-WEB 快速入门(6) - JS WebSocket 应用程序

WebSocket 可以实现双向通信&#xff0c;适合实时通信场景。本文介绍一下使用 Javacript 语言开发 AWTK-WEB 应用程序&#xff0c;并用 WebSocket 与服务器通讯。 用 AWTK Designer 新建一个应用程序 先安装 AWTK Designer&#xff1a; https://awtk.zlg.cn/web/index.html …...

tcl语法中的命令

tcl语法中存在多少个命令呢&#xff1f; 如下&#xff0c; after errorInfo load pwd tcl_rcFileName append eval lrange re_syntax tcl_startOfNextWord apply exec lrepeat read tcl_startOfPreviousWord argc exit lreplace refchan tcl_traceCompile argv expr lreverse r…...

ESLint报错:Could not find config file.

如果你的ESLint的版本大于 8&#xff0c;同时使用 .eslinrc.js 和 .eslintignore 作为配置文件&#xff0c;且目前用的是 VSCODE &#xff0c;就有可能遇到报错&#xff1a; Could not find config file. 这个是因为 VSCode 中 ESLint 插件的配置 eslint.useFlatConfig 的问题…...

北斗导航 | 基于北斗三号短报文通信的北斗-YOLO融合系统原理,算法公式,系统流程框图,matlab代码,应用场景

以下是关于基于北斗三号短报文通信的北斗-YOLO融合系统的详细解析,包含原理、算法公式、系统流程、Matlab代码框架和应用场景。一、系统原理 北斗-YOLO融合系统结合了北斗三号短报文通信(双向通信能力)和YOLO目标检测算法,用于在无地面网络覆盖区域实现实时目标检测与数据传…...

Vue3 中使用 vuedraggable 实现拖拽排序功能,分组拖拽

Vue3 中使用 vuedraggable 实现拖拽排序功能&#xff0c;分组拖拽 安装draggable npm install vuedraggablenext --save基础用法示例 <template><div class"app-container"><draggable v-model"list" item-key"id":group"…...

使用VSCODE导致CPU占用率过高的处理方法

1&#xff1a;cpptools 原因&#xff1a;原因是C/C会在全局搜索文件&#xff0c;可以快速进行跳转&#xff1b;当打开的文件过大&#xff0c;全局搜索文件会占用大量CPU&#xff1b; 处理方法&#xff1a; 1&#xff1a;每次只打开小文件夹&#xff1b; 2&#xff1a;打开大文…...

【力扣hot100题】(004)盛水最多的容器

现在能这么快做出来纯粹是因为当时做的时候给我的印象实在太深了。 犹记得这题是当年开启我用CSDN记录leetcode日记历史的开端。 总之印象太深了不会都不行啊&#xff01;&#xff01;记得当年是想到用各种动态规划回溯等等等等最终发现是最简单贪心和双指针。 解法也是非常简…...

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏&#xff0c;承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏&#xff0c;包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者&#xff0c;都能从本文中获得启发。 …...

宝塔面板部署 Laravel 项目无法访问静态资源的解决方法

提示:“奔跑吧邓邓子” 的常见问题专栏聚焦于各类技术领域常见问题的解答。涵盖操作系统(如 CentOS、Linux 等)、开发工具(如 Android Studio)、服务器软件(如 Zabbix、JumpServer、RocketMQ 等)以及远程桌面、代码克隆等多种场景。针对如远程桌面无法复制粘贴、Kuberne…...

C/C++中的条件编译指令#if

#if 是 C/C 中的预处理指令&#xff0c;用于条件编译。它允许根据预定义的条件来决定是否编译某段代码。#if 通常与 #define、#ifdef、#ifndef、#else 和 #endif 等指令一起使用。 基本语法 #if 条件表达式// 如果条件表达式为真&#xff0c;编译这部分代码 #else// 如果条件…...

【设计模式】策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;详解 一、策略模式的定义 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一组算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以相互替换&#xff0c;从而让算法的…...

Eclipse IDE for ModusToolbox™ 3.4环境通过JLINK调试CYT4BB

使用JLINK在Eclipse IDE for ModusToolbox™ 3.4环境下调试CYT4BB&#xff0c;配置是难点。总结一下在IDE中配置JLINK调试中遇到的坑&#xff0c;以及如何一步一步解决遇到的问题。 1. JFLASH能够正常下载程序 首先要保证通过JFLASH(我使用的J-Flash V7.88c版本)能够通过JLIN…...

修改git在提交代码时的名称

在git中&#xff0c;如果想修改提交代码作者的名字&#xff0c;可以进行以下操作&#xff1a; 1.在桌面或者文件夹内右击鼠标&#xff0c;点开Git Bash here。 2.进入后&#xff0c;通过git config user.name 回车查看当前名称。 3.通过git config --global user.name "…...

前端显示no data(没有数据,一片空白)

◎浏览器查看显示 message: "Request failed with status code 404", name: "AxiosError", code: "ERR_BAD_REQUEST" ◎后端gateway 模块显示: 无需验证&#xff0c;通行。/business/admin/save 显示正确的路径&#xff0c;但是没有返回结果…...

CCF编程能力等级认证GESP—C++7级—20250322

CCF编程能力等级认证GESP—C7级—20250322 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)图上移动等价消除 单选题&#xff08;每题 2 分&#xff0c;共 …...