网络协议(五)数据链路层 ARP协议

目录

一、数据链路层

二、局域网的通信原理

三、交换机

[四、ARP协议 局域网协议](#四、ARP协议 局域网协议)

原理:

ARP协议格式

模拟一次ARP过程

ARP欺骗

[五、DNS 域名解析协议](#五、DNS 域名解析协议)

浏览器中输入url后发生的事情

[1. 解析地址:DNS 域名解析(寻找商店位置)](#1. 解析地址:DNS 域名解析(寻找商店位置))

[2. 建立连接:TCP 三次握手(确认收货双方身份)](#2. 建立连接:TCP 三次握手(确认收货双方身份))

[3. 加密加固:TLS 握手(如果是 HTTPS)](#3. 加密加固:TLS 握手(如果是 HTTPS))

[4. 发送请求:HTTP Request(提交订单)](#4. 发送请求:HTTP Request(提交订单))

[5. 服务器处理(后端逻辑处理)](#5. 服务器处理(后端逻辑处理))

[6. 返回响应:HTTP Response(发货)](#6. 返回响应:HTTP Response(发货))

[7. 浏览器渲染(拆快递并陈列)](#7. 浏览器渲染(拆快递并陈列))

[8. 断开连接:TCP 四次挥手(礼貌告别)](#8. 断开连接:TCP 四次挥手(礼貌告别))

一、数据链路层

上一章解决的问题是通过ip来使得数据能够从主机A传递到主机B

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

负责在同一物理网络(广播域)内 ,通过MAC地址 进行"直接"寻址和帧传输。它确保数据帧能从一个设备准确送达另一个直接相连的设备。

需要用到的就是MAC地址,区分在同一个局 域网中,区分特定的不同的主机

上图中的以太网帧就是在数据链路层所进行封装和解封

二、局域网的通信原理

当一个局域网中的mac1发送给mac7一条数据时,会把这条消息发送给每个主机,当拿到这个消息时,发现源端和目的端和自己没有关系就会丢弃掉,这条消息也就在这样的情况下进行数据碰撞,直到传递到了mac7地址。

A主机发送一条消息到达另一侧的B主机,首先在路由表上看到下一跳的路由地址R,于是数据链路层进行数据的打包,传递到R路由器的数据链路层,再由R数据链路层进行数据的拆分,拿到里面的IP报头数据,再R上的路由表上进行分析,获得到它下一跳的地址。

数据在路由表上获得了它下一条的数据之后,再由R路由器的数据链路层对该IP数据报进行向下封装,此时目的端和源端地址更新为MACX和MACR,然后重复上面的操作,继续进行路由转发,以上就是数据链路层在这个路由转发时的角色

MAC帧只在局域网中有效,因为再每次进行解包之后就进行丢弃,转发时又会进行新的MAC帧的封装

三、交换机

在一个局域网中,数据之间的传递靠不断地进行**数据碰撞。**那么更多主机以及路由器的出现就会导致更多的数据碰撞,为了缓解这个问题,就引入的交换机。

在数据链路层,根据目标MAC地址,将数据帧智能地转发到正确的端口,而非广播。

如下图,交换机的出现,划分了碰撞域,减少了局域网碰撞

另外,抓包工具,实际就是在数据链路层中,对接收到的数据进行获取

四、ARP协议 局域网协议

上面提到了,局域网中,不同主机之间通过mac地址进行数据转发,问题是,从一个路由器到达另一个路由器进行拆分时,在网络层识别到了需要跳转的下一跳ip地址

例如路由器D的网络层解析到了 这个是由主机A发送给主机B的,并且将目的ip与本路由器掩码相与,得到就是本路由器的网络号,就确定了你要找的主机B就是本子网内部的主机,于是向下数据链路层进行MAC封装成帧,但是问题是封装的帧头中主机B的MAC地址不知道呀

就需要一个技术,在局域网中,能够把目标主机的ip地址转换为mac地址,也就是ARP协议。

原理:

主机A广播给本局域网一条ARP请求,然后主机B再看到这个请求之后,发现是对应自己的IP地址,于是把自己的MAC地址以APR响应返回给主机A。

ARP协议格式

也就是主机A广播了一条下面格式的报文,主机B之间返回给了主机A下面格式的报文

协议格式中的硬件类型、协议类型、硬件地址长度、协议地址长度一般都是固定的

硬件地址、以太网地址也就是mac地址,协议地址也就是ip地址

模拟一次ARP过程

ARP协议是在数据链路层,MAC帧以上的位置,如下进行封装

以上封装的MAC帧就在如下局域网中广播

错误响应:

局域网中每台设备都会接收到这条ARP帧,例如macA接收到这个帧之后,进行拆封之后,发现op字段是1(表示请求帧)然后看请求ip,发现和自己不对应,这是发给ipB的就会进行丢弃

正确响应

当这条MAC帧广播到正确的MACB的设备时,macb进行拆封,发现其ARP协议字段中op字段为1(表示为请求),然后再看请求ip就是本主机ip,于是就会构建一个应答ARP报文,这个应答报文中的OP字段为2(表示应答),以及其余的信息,就可以直接将该ARP报文封装一对一发送到MACR。

当MACR再次接收到上面那个应答帧时,查看OP字段为2,然后拿到自己想要的ip地址的MAC地址

小tips:

所有的APR请求都是广播(ARP协议字段的第一个以太网目的地址为全F )给每个设备,由每个设备经由数据链路层进行拆分,上交给网络层时,通过ip比对,才能发现这个请求是否是发送给本设备的,从而在网络层选择丢弃

但是所有的APR应答,在其余不相干设备接收时,直接在数据链路层进行丢弃,因为ARP协议字段的第一个以太网目的地址已经确认为MACR

如此一个设备就可以访问到其余其他设备的mac地址

arp 主机mac地址和ip地址,会被主机缓存起来,临时缓存起来

1、arp只有在缓存失效的时候,才会进行

2、我可以通过我的ip和子网掩码,得到我的网络号,然后拼接ip地址,ping所有的主机,从而得到所有主机的ip和mac

3、如果收到了多次同样的arp应答,会以最新的为准

ARP欺骗

主机之间可以封装ARP成为MAC帧,那么如果有一个主机C在已经建立联系好的俩个主机A、B之间,不断给A发送一个新的ARP请求,将主机A绑定主机B的mac地址修改为C的mac地址,导致A本来想给B发送的消息只能发送给主机C,这就叫做ARP欺骗

五、DNS 域名解析协议

DNS 是一整套从域名映射到 IP 的系统
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序 . 但是 IP 地址不方便记忆 .
于是人们发明了一种叫主机名的东西 , 是一个字符串 , 并且使用 hosts 文件来描述主机名和 IP 地址的关系
本地浏览器要访问腾讯的网址,输入www.qq.com后,先会去DNS服务器上获取其对应的映射ip,然后再拿这个ip去访问腾讯

浏览器中输入url后发生的事情
1. 解析地址:DNS 域名解析(寻找商店位置)

你在浏览器输入的是 www.baidu.com(域名),但计算机只认识 IP 地址。

  • 浏览器缓存:首先查浏览器有没有记录。

  • 操作系统缓存 & Hosts 文件 :如果没有,查电脑本地记录(比如你之前配置虚拟机 IP 时改过的 C:\Windows\System32\drivers\etc\hosts)。

  • DNS 递归查询:如果本地都没有,就去问运营商的 DNS 服务器,一层层往上找,直到拿到对应的 IP 地址。

2. 建立连接:TCP 三次握手(确认收货双方身份)

拿到 IP 后,浏览器要和服务器打个招呼,建立一个稳定的连接。

  • 第一次握手:客户端发个包:"你好,能听到吗?"(SYN)

  • 第二次握手:服务器回个包:"听到了,你能听到我吗?"(SYN/ACK)

  • 第三次握手:客户端回个包:"我也听到了,那我们要开始说话了。"(ACK)

3. 加密加固:TLS 握手(如果是 HTTPS)

现在的网站基本都是 HTTPS。在 TCP 建立后,双方会协商一套加密算法 并交换证书,确保你发出的 NER 文本数据不会被中间人窃听。

4. 发送请求:HTTP Request(提交订单)

连接建好了,浏览器正式发出请求。它会包含:

  • 方法:GET(获取页面)或 POST(提交数据)。

  • 路径/index.html/api/ner

  • 请求头:你的浏览器型号、Cookie 等信息。

5. 服务器处理(后端逻辑处理)

这是你作为开发者最关心的部分。服务器收到请求后:

  • Web 服务器(如 Nginx)接收请求。

  • 应用层处理:请求转发到 Python(Flask/FastAPI)或 Java 程序。

  • 核心逻辑 :程序调用你的 BERT-BiLSTM-CRF 模型进行实体识别。

  • 多智能体介入 :如果置信度低,触发多智能体辩论,各 Agent 交换意见,最终汇总结果。

6. 返回响应:HTTP Response(发货)

服务器处理完后,把结果包好发回来。

  • 状态码200 OK 表示成功;404 表示找不到;500 表示你的深度学习模型崩了。

  • 内容:HTML 页面代码,或者是 NER 识别出的 JSON 结果。

7. 浏览器渲染(拆快递并陈列)

浏览器拿到代码后开始干活:

  • 解析 HTML 构件 DOM 树。

  • 加载资源:下载 CSS、JS、图片(同样会重复上面的步骤)。

  • 执行 JS:如果是单页应用(Vue/React),此时才会动态渲染出页面。

8. 断开连接:TCP 四次挥手(礼貌告别)

当数据传输完毕,双方会通过四次挥手确认断开连接,释放服务器资源。

相关推荐
June`2 小时前
深入解析网络层与数据链路层
linux·服务器·网络
老王熬夜敲代码2 小时前
计算机网络--IP概念
linux·网络·笔记
网安Ruler2 小时前
DrayTek Vigor3910 工业路由器固件解密与逆向分析:CVE-2024-41592/23721漏洞复现
网络·智能路由器
玥轩_5212 小时前
防火墙技术-综合应用实验
运维·网络·网络协议·网络安全·智能路由器·路由器·防火墙
最贪吃的虎2 小时前
网络是怎么传输的:从底层协议到浏览器访问网站的全过程剖析
java·开发语言·网络·http·缓存
北京盟通科技官方账号2 小时前
合规、安全与扩展:NetStaX新版本如何应对EtherNet/IP协议的技术挑战?
服务器·网络·网络协议·自动化·制造
小尧嵌入式2 小时前
Linux网络介绍网络编程和数据库
linux·运维·服务器·网络·数据库·qt·php
我要学脑机3 小时前
一个图谱映射到功能网络yeo7或17的解决方案
开发语言·网络·php
foundbug9993 小时前
C#实现的自动升级系统
服务器·网络·c#