数据链路层中存在的报文ip,arp,rarp

news2024/11/27 3:54:03

IP数据报

ARP请求/应答报

RARP请求/应答报

IP数据报

这里的目的地址和源地址是MAC地址。

这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

MAC 地址是一个很容易让人误解的地址。因为 MAC 地址号称全球唯一,不会存在有相同 MAC 地址的网卡。这就很容易让我们想,既然全球唯一,那网络通信直接用 MAC 地址不行吗?为什么要加个 IP 地址,多封装一层,再去通信呢?

当然是不行的。我们想把一个网络包从一个地方传到另一个地方,除了有确定的地址外,还需要有定位功能。就像你去广州找博主一样,我只告诉你我的身份证号,你能在广州找到我吗?这种寻找无异于大海捞针。但是如果我告诉你我的详细地址,你就可以直接通过导航找到对应的地址,然后再找到我。

IP 地址在一定程度上就承担了详细地址这种远程地位的功能。MAC 地址更像是身份证号,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面,不用担心冲突。

当然,MAC 地址也有一定的定位功能。就像你来到了博主所在的办公室,你可以在办公室喊身份证号是 XXX 的是哪位?博主听到了,就会站起来回答你。但是如果你在博主听不到的地方喊,那肯定不会有人应你。这就说明,MAC 地址的通信范围比较小,仅仅局限在一个子网内。

网络协议 2 - IP 地址和 MAC 地址 - 知乎 (zhihu.com)

但是我知道这个房间的所有人的身份证号(ip),但是我并不知道对应的身份证到底是谁(mac),这个时候我就需要在这房间(局域网)内,广播找到对应身份证的人。

这就需要ARP报协助ip数据报寻觅ip对应的mac。

ARP请求/响应报

在每一次通信的时候我们都需要找到下一跳路由的mac地址,才能将其报文传送出去,为什么不能直接和远程主机直接通信呢?你搁哪洲际导弹呢?

所以在网络包发送前都需要先发送ARP请求报文找到下一跳的mac地址。A主机需要B主机/路由器,根据路由表找到对应的ip号发送arp请求报文,这个报文属于广播报文,所有主机都会接收到,并且处理报文。

流程

 这是报文会被所有的主机接收到,因为arp报文的目的mac地址是0xffffffffff,所有的主机都意识到,这是个广播报文,然后接收查看帧类型,决定交给网络层还是arp处理方式。

确定是arp包,然后先查看op确定包类型,op字段为1表示ARP请求,op字段为2表示ARP应答,

如果是请求,则再去查看目的ip是否是给我发的,是则构建响应arp报文,进行响应,不是则丢弃

如果是响应,直接获取响应arp报文的源mac地址,构建对应的ip数据报。

为什么不直接看ip呢?

因为解耦,所以arp层并不知道mac层是这么收获的报文,所以先查看arp的op项,先查看op,为1是申请报文,再去查看目的端ip查看是否向我申请的报文。为2是应答报文,无需查看目的端ip,因为是对我一对一的,直接查看发送端mac地址。因为如果直接看目的ip就算是给我的,也得再看op是应答arp还是申请arp才能后后续操作。

每次发送ip报都需要arp吗?并不是的,主机和路由器会短期存储mac和ip的映射关系,后续如果再一次访问对应ip,先查看自己的arp映射表是否有该ip的映射mac,然后再决定下一步。外面的arp请求报发送给对方时候,对方也会建立源ip和源mac的映射,需要mac发送ip报的主机,接收到arp响应报,也会条件映射关系到arp映射表中。

为何不将映射关系永久呢?注意当今的ip为动态分配,你的手机链接路由器wifi的情况下,路由器给你分配的IP地址前一次和后一次是不一样的,如果永久映射了,如果A主机换一个地方链接网络,会直接使用对应的arp表中的路由地址,在当前局域网是找不到对应的mac地址路由器的,导致了A主机无法上网。

RARP请求/响应报

这个是与ip反过来的,发出mac地址获取ip地址,这个mac和ip是本机地址,一般是嵌入式设备入网时使用的,如果存在这样的设备,我们就需要架设RARP服务器(个人电脑直接链接设备,也是可以为其指定ip地址,但是使用DHCP自动分配的ip地址,有时会遇到无法知道所分配的ip是多少的情况)。

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

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

相关文章

深度学习_7_实战_点集最优直线解_优化版代码解析

完整版优化代码: import torch from torch.utils import data from d2l import torch as d2l # 特定导入 from torch import nndef load_array(data_arrays, batch_size, is_trainTrue):dataset data.TensorDataset(*data_arrays) #解包传递,转成张量…

【Linux】Nignx的入门使用负载均衡前端项目部署---超详细

一,Nignx入门 1.1 Nignx是什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它使用事件驱动的异步框架,可同时处理大量请求,支持负载均衡、反向代理、HTTP缓存等常见Web服务场景。Nginx可以作为一个前端的Web服务器,也可…

使用docker进行nextcloud+onlyoffice环境搭建(在线 or 离线)

1.安装 MySQL(有MySQL就可以不装) docker run -itd --name mysql8.0 -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot --restartalways -e TZ"Asia/Shanghai" -v /home/docker/workspace/mysql:/var/lib/mysql mysql:latest --lower_case_table_na…

【案例】3D地球

效果图&#xff1a; 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …

用Python实现批量下载文件——代理ip排除万难

目录 前言 一、准备工作 二、批量下载文件 三、添加代理ip 四、处理异常 完整代码 总结 前言 下载文件是我们在日常工作中常常要做的一件事情。当我们需要从互联网上批量下载大量文件时&#xff0c;手动一个一个去下载显然不够高效。为了解决这个问题&#xff0c;我们可…

Unity内打开网页的两种方式(自带浏览器、内嵌浏览器)

1.自带浏览器 这个比较简单&#xff0c;直接调用unity官方的API即可&#xff0c;会直接使用默认浏览器打开网页&#xff0c;这里就不多做解释了。 代码 public InputField input;private void OpenUrlByUnity(){string inputStr input.text;if (!string.IsNullOrEmpty(input…

JVM虚拟机:你是如何理解Java中的垃圾?

什么是垃圾&#xff1f; 垃圾就是内存中不再被使用到的空间&#xff0c;当一个对象不再被引用后那么久成为垃圾可以回收了&#xff0c;但是线程计算没有引用也可以独立运行&#xff0c;因此线程和对象不同。如果一个对象没有任何一个引用指向它了&#xff0c;那么这个对象就是…

什么是Web 3.0?

什么是Web 3.0&#xff1f;简而言之&#xff0c;就是第三代互联网。 在回答Web 3.0之前&#xff0c;让我们先看一下Web 1.0和Web 2.0。 互联网革命 Web 1.0&#xff0c;第一代互联网&#xff0c;从互联网诞生到1997年。 在Web 1.0&#xff0c;互联网的信息是静态的只读网页&a…

MySQL 配置文件添加参数后服务起不来了

如何正确地向数据库添加配置参数。 作者&#xff1a;王雅蓉&#xff0c;DBA&#xff0c;负责 MySQL 日常问题处理和 DMP 产品维护。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本文约 1000 字&#xff0c;预计阅读需…

CFCA国产SSL证书

随着国潮风的兴起和中国自主技术的发展&#xff0c;很多组织单位对网络信息安全产品的需求逐渐倾向国产化。在SSL证书需求方面也有很多的组织单位更倾向于国产SSL证书。今天&#xff0c;我们就先来侧重介绍一下国产SSL证书CFCA的相关特点。 CFCA国产SSL证书 CFCA拥有国家多项认…

linux jdk配置

1.下载jdk &#xff0c;以jdk1.8为例子 Java Downloads | Oracle JDK 8 Update Release Notes (oracle.com) 2.配置环境变量 1.下载相关jdk版本&#xff0c;执行以下命令安装jdk tar -zxvf jdk-8u144-linux-x64.tar.gz 2.编辑命令 vi /etc/profile 3.在最后加入下面配置 e…

完美解决:Nginx安装后,/etc/nginx/conf.d下面没有default.conf文件

目录 1 问题&#xff1a; 2 解决方法 方法一&#xff1a; 方法二&#xff1a; 3 查看 1 问题&#xff1a; /etc/nginx/conf.d下面没有default.conf文件。 2 解决方法 方法一&#xff1a; 自己创建default.conf文件。 vi /etc/nginx/conf.d/default.conf 添加如下内容&…

overflow溢出属性、定位、前端基础之JavaScript

overflow溢出属性 值 描述 visible 默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。 hidden 内容会被修剪&#xff0c;并且其余内容是不可见的。 scroll 内容会被修剪&#xff0c;但是浏览器会显示滚动条以便查看其余的内容。 auto 如果内容被修剪&#xff0…

【算法挑战】设计一个支持增量操作的栈(含解析、源码)

1381.设计一个支持增量操作的栈 https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/ 1381.设计一个支持增量操作的栈 题目描述方法 1: 用数组或链表模拟栈 数组复杂度分析链表复杂度分析代码 方法 2: 空间换时间 图解复杂度分析代码 题目描述 请…

企业服务总线ESB有什么作用?和微服务有什么区别?会如何发展?

企业服务总线ESB是什么 下面这张图&#xff0c;稍微了解些IT集成的朋友应该不陌生。 随着信息化发展不断深入&#xff0c;企业在不同的阶段引入了不同的应用、系统和软件。这些原始的应用系统互不连通&#xff0c;如同一根根独立的烟囱。 但是企业业务是流程化的&#xff0c;…

Vue入门——核心知识点

简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面&#xff1a;就是将后端返回来的数据以不同的形式(例如&#xff1a;列表、按钮等)显示在界面上。渐进式&#xff1a;就是可以按需加载各种库。简单的应用只需要一个核心库即可&#xff0c;复杂的应用可以按照需求…

LeetCode 501. 二叉搜索树中的众数【二叉搜索树中序遍历+Morris遍历】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Express框架开发接口之跨域cors

1.跨域是什么&#xff1f; 跨域&#xff0c;是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是浏览器对JavaScript实施的安全限制。 同源策略限制了一下行为&#xff1a; Cookie无法读取DOM 和 JS 对象无法获取Ajax请求发送不出去 同源是指&…

数据可视化篇——pyecharts模块

在之前的文章中我们已经介绍过爬虫采集到的数据用途之一就是用作可视化报表&#xff0c;而pyecharts作为Python中可视化工具的一大神器必然就受到广大程序员的喜爱。 一、什么是Echarts&#xff1f; ECharts 官方网站 : https://echarts.apache.org/zh/index.html ECharts 是…

Golang Gin 接口返回 Excel 文件

文章目录 1.Web 页面导出数据到文件由后台实现还是前端实现&#xff1f;2.Golang Excel 库选型3.后台实现示例4.xlsx 库的问题5.小结参考文献 1.Web 页面导出数据到文件由后台实现还是前端实现&#xff1f; Web 页面导出表数据到 Excel&#xff08;或其他格式&#xff09;可以…