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

news2025/3/31 18:17:26

目录

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地址唯一(就算相同,端口号也会不同) 右边也唯一,一一对应就可以反向查表,把数据给主机。

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

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

相关文章

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

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

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;而非使用传统的构造函数创建方式。这种设计…

【Linux】应用层协议 HTTP

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

数据可视化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 …

使用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;都能从本文中获得启发。 …

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 "…

【Linux】深入解析Linux命名管道(FIFO):原理、实现与实战应用

本文承接上文匿名管道&#xff1a;【Linux】深度解析Linux进程间通信&#xff1a;匿名管道原理、实战与高频问题排查-CSDN博客 深入探讨Linux进程间通信&#xff08;IPC&#xff09;&#xff0c;以匿名管道为核心&#xff0c;详细阐述其通信目的、实现前提及机制。涵盖数据传输…

第十四届蓝桥杯省赛电子类单片机学习记录(客观题)

01.一个8位的DAC转换器&#xff0c;供电电压为3.3V&#xff0c;参考电压2.4V&#xff0c;其ILSB产生的输出电压增量是&#xff08;D&#xff09;V。 A. 0.0129 B. 0.0047 C. 0.0064 D. 0.0094 解析&#xff1a; ILSB&#xff08;最低有效位&#xff09;的电压增量计算公式…

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…

Apache Shiro 统一化实现多端登录(PC端移动端)

Apache Shiro 是一个强大且易用的Java安全框架&#xff0c;提供了身份验证、授权、密码学和会话管理等功能。它被广泛用于保护各种类型的应用程序&#xff0c;包括Web应用、桌面应用、RESTful服务、移动端应用和大型企业级应用。 需求背景 在当今数字化浪潮的推动下&#xff…

NAT—地址转换(实战篇)

一、实验拓扑&#xff1a; 二、实验需求&#xff1a; 1.实现内网主机访问外网 2.实现外网客户端能够访问内网服务器 三、实验思路 1.配置NAT地址池实现内网地址转换成公网地址&#xff0c;实现内网主机能够访问外网。 2.配置NAT Sever实现公网地址映射内网服务器地址&…

用HTML和CSS生成炫光动画卡片

这个效果结合了渐变、旋转和悬浮效果的炫酷动画示例&#xff0c;使用HTML和CSS实现。 一、效果 二、实现 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&quo…

FPGA_YOLO(三)

上一篇讲的是完全映射&#xff0c;也就是block中的所包含的所有的卷积以及归一&#xff0c;池化卷积 举例总共6个等都在pl侧进行处理&#xff08;写一个top 顶层 里面conv 1 bn1 relu1 pool1 conv1*1 conv 2 bn2 relu2 pool2 conv1*1 ....总共6个 &#xff09;&#xff0c;…