MAC、ARP、NAT

文章目录

  • MAC
    • MAC帧格式
    • MAC地址
  • ARP协议
    • ARP的数据包格式
  • NAT和代理
    • IP地址的数量限制
    • NAT
    • 代理服务器

MAC

数据在局域网中如何发送就是数据链路层解决的。

MAC帧格式

在这里插入图片描述
源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的。
帧协议类型字段有三种值,分别对应IP、ARP、RARP。
帧末尾是CRC校验码。

IP报文在向下层传输需要封装MAC帧报头,然后在局域网中通过MAC地址进行传输,每当到以及设备都会对MAC帧报头进行解包分析以及重新封装,所以数据报在传输的过程汇总MAC地址是一直在变化的,目的IP是一直不变的,源IP在私网传输中也是在一直变化的,直到拥有一个合法的公网IP。

MAC如何进行报头和有效载荷的分离?
MAC采用的是固定报头的方式。

如何进行分用?
通过帧协议可以判断把数据交给上层的哪种协议。
在这里插入图片描述

MAC地址

MAC地址用来识别数据链路层中相连的节点(路由器)。
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的。
在这里插入图片描述
MAC vs IP
MAC地址描述的是路途上的每一个区间的起点和终点;
IP地址描述的是路途总体的起点和终点;

在局域网中,任何一个时刻,只允许一个主机向局域网发送数据,如果同时发送,会发生局域网数据碰撞的问题,这时候需要进行碰撞检测和碰撞避免,发生数据碰撞的主机需要让自己随机休眠一段时间再接着发送。因为局域网中的主机也是可以拿到自己发送的数据的,所以可以知道数据是否发生了碰撞。

但是现在是我们知道目的IP,不知道主机的MAC地址,怎么办呢??
这就需要arp协议了。

ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;
在这里插入图片描述

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;

在这里插入图片描述
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;如果不符,则直接丢弃。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。
在这里插入图片描述
因为arp表是有大小限制的,所以就会有时间限制。arp缓存如果收到了很多同类型的arp应答,它会将最新的arp应答记录下来。

ARP的数据包格式

在这里插入图片描述
ARP中并没有具体的数据,因为它只是为了获取目的IP的MAC地址。
硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;
硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
op字段为1表示ARP请求,op字段为2表示ARP应答。

所以对于一次ARP的请求,不管是MAC报头还是ARP报头的目的以太网地址都是广播地址FF:FF:FF:FF:FF:FF这个局域网的所有主机都会对这个报文进行解析,得到ARP的数据报,对比目的IP之后是自己的就留下构建应答报文,不是话就丢弃,应答因为知道了对方的MAC地址,就不需要进行广播了,所以其他的主机收到了并不会对MAC报头进行解析,直接丢弃,所以请求和应答各个主机的做法也是不同的。

假设主机A想主机B请求ARP
A的请求报文
在这里插入图片描述
E的应答报文
在这里插入图片描述

NAT和代理

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址,CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用.

有三种方式来解决

  1. 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
  2. NAT技术
  3. IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

NAT

NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;
NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法,很多学校,家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;NAT从私有IP到公网IP的转化过程在上一节已经介绍过了,现在主要是如何从公网回到内网的问题。这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系。

在这里插入图片描述
NAT路由器的右侧不一定是公网,可能还是运营商的子网。NAT的替换的时候不仅仅是替换IP,当端口冲突的时候也会替换端口。这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项。

缺陷:

  1. 无法从NAT外部向内部服务器建立连接;
  2. 装换表的生成和销毁都需要额外开销;
  3. 通信过程中一旦NAT设备异常, 所有的TCP连接也都会断开;

代理服务器

代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端,代理服务器分为正向代理和反向代理。

正向代理用于请求的转发。
反向代理往往作为一个缓存。

NAT和代理服务器的区别:

  1. 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
  2. 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  3. 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
  4. 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

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

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

相关文章

AI在招聘领域的应用:提高效率、降低成本与增强候选人体验

一、引言 在数字化浪潮席卷全球的今天,人工智能(AI)技术已经渗透到社会的各个领域,其中也包括人力资源管理中的招聘环节。AI技术的引入不仅为企业带来了前所未有的便利,更在提升招聘效率、降低成本以及增强候选人体验等…

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范: 1.写一个类MessageInfo对象,添加构造方法 虽然有快捷键,但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库,通过添加注…

【年报文本分析】Python+Selium获取互动易平台投资者提问与上市公司回应文本数据

目录 序言excel文件准备全部代码 序言 互动易平台链接:https://irm.cninfo.com.cn/views/interactiveAnswer 需要提前下载好三个库,都可以用pip install轻松下载,稍微麻烦点儿的是需要去下载个对应版本的chromedriver.exe驱动,放…

Android 生成Excel并导出全流程

前言 最近接到需求,要在安卓上离线完成根据数据生成Excel文件,但搜到了都不是能立马使用 例如 // implementation org.apache.poi:poi:3.17 // implementation com.alibaba:easyexcel:4.0.1 这两最大的问题是专用于java的,如果And…

git sendemail使用

教程参考: git-send-email - 以电子邮件形式发送补丁集 1、安装git-email 2、配置 SMTP 服务器 git config --global sendemail.smtpserver smtp.163.com git config --global sendemail.smtpserverport 465 git config --global sendemail.smtpuser xxxxxx163.c…

恒创科技:如何排查和解决服务器高负载问题?

服务器负载过高是业务正常运行的主要威胁之一。高平均负载意味着系统或服务器超载,许多进程正在等待 CPU 时间。因此将有许多进程等待完成,这些进程将进入队列,导致服务器负载增加。 高负载的主要原因 1.服务器超载 2.垃圾邮件 3.硬盘性能 4.…

Navicat Premium Lite数据库管理软件

首先我们大家可以通过下面的地址下载我们的Navicat Premium Lite: https://www.navicat.com.cn/products/navicat-premium-lite 1、Navicat精简版 2、下载 3、运行界面 。。。

前端面试项目细节重难点分享(十三)

面试题提问:分享你最近做的这个项目,并讲讲该项目的重难点? 答:最近这个项目是一个二次迭代开发项目,迭代周期一年,在做这些任务需求时,确实有很多值得分享的印象深刻的点,我讲讲下面…

【Linux】基本指令1

文章目录 1. find2. which3. alias4.whereis5.grep6. sort 、uniq7. linux怎么编辑文件中的内容 1. find 1.1 find: 查找文件所在的位置。(当我们进行find搜索的时候,可能需要访问磁盘进而导致效率低下。) 1.2 find / file.txt 在Linux系统是…

Qt自定义MessageToast

效果&#xff1a; 文字长度自适应&#xff0c;自动居中到parent&#xff0c;会透明渐变消失。 CustomToast::MessageToast(QS("最多添加50张图片"),this);1. CustomToast.h #pragma once#include <QFrame>class CustomToast : public QFrame {Q_OBJECT pub…

MinIO存储桶通知 - Kafka小测

概述 公司的某个项目需要用上这玩意&#xff0c;所以在本地搭建测试环境&#xff0c;经过一番折腾&#xff0c;测试通过&#xff0c;博文记录&#xff0c;用以备忘 MinIO安装 该节不做说明&#xff0c;网络有很多现成的帖子&#xff0c;自行搜索去 配置步骤 控制台添加事件…

ROS2入门到精通—— 2-11 ROS2实战:实现基于voronoi_planner的全局规划(一)!!!保姆级教程

实现基于voronoi_planner的全局规划将分为两篇博文进行讲解 本文参考该大佬代码: https://github.com/nkuwenjian/voronoi_planner.githttps://github.com/nkuwenjian/voronoi_layer.git将上面的ROS1代码移植到ROS2,移植不易,中间遇到很多坑 0 前言 针对一些狭窄区域,可能…

海山数据库(He3DB)性能优化方案解析

前端优化是一个永恒的话题&#xff0c;每个前端开发者都希望自己的页面能够快速加载&#xff0c;给用户良好的体验。但往往事与愿违。因此&#xff0c;本文从编码优化、构建优化、部署优化三方面入手进行web页面性能优化。 1. 编码优化 1.1. Css优化 1.1.1. 合理使用css选择…

谷粒商城实战笔记-60-商品服务-API-品牌管理-效果优化与快速显示开关

文章目录 一&#xff0c;显示状态列改为switch开关二&#xff0c;监听状态改变 首先&#xff0c;把ESLint语法检查关掉&#xff0c;因为这个语法检查过于严格&#xff0c;在控制台输出很多错误信息&#xff0c;干扰开发。 在build目录下下webpack.base.conf.js中&#xff0c;把…

python基础巩固

基本数据类型 可以用isinstance来判断 a111 isinstance(a,int) True数值运算&#xff1a; >>> 2 / 4 # 除法&#xff0c;得到一个浮点数 0.5 >>> 2 // 4 # 除法&#xff0c;得到一个整数 0 >>> 17 % 3 # 取余 2Python 字符串不能被改变。向一个…

【LLM】-08-搭建问答系统-语言模型,提问范式与 Token

目录 1、语言模型 1.1、训练过程&#xff1a; 1..2、大型语言模型分类&#xff1a; 1.3、指令微调模型训练过程&#xff1a; 2、Tokens 3、Helper function辅助函数 (提问范式) 4、计算token数量 1、语言模型 大语言模型&#xff08;LLM&#xff09;是通过预测下一个词…

由bext安装“异常”引出的话题:windows上转义字符的工作原理

由bext安装“异常”引出的话题&#xff1a;Windows上转义字符的工作原理&#xff0c;与ai“闲扯”不经意学习知识点。 (笔记模板由python脚本于2024年07月25日 19:21:13创建&#xff0c;本篇笔记适合喜欢用ai学习的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff…

【Ubuntu】安装 Snipaste 截图软件

Snipaste 下载安装并使用 Snipastefor more information报错解决方案每次启动软件需要输入的命令如下添加开机自启动 下载 下载地址 安装并使用 Snipaste 进入终端输入命令 # 1、进入到 Snipaste-2.8.9-Beta-x86_64.AppImage 所在目录&#xff08;根据自己的下载目录而定&…

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数&#xff1a; import pygame import time import random 游戏源码&#xff1a; import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

数据结构(5):树和二叉树

1 树的定义 1.1 树的基本概念 分支可以称为边&#xff0c;结点可以用于存放数据结构。 除了根节点&#xff0c;其他节点只有一个前驱&#xff01;&#xff01;&#xff01;&#xff01; 互不相交也就是 只有一个前驱结点&#xff01; 树应用的很广的 1.2 结点之间的关系 直接…