首页 > 其他分享 >MAC、ARP、NAT

MAC、ARP、NAT

时间:2024-07-26 17:24:55浏览次数:12  
标签:ARP IP 地址 MAC NAT IP地址

文章目录

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一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

标签:ARP,IP,地址,MAC,NAT,IP地址
From: https://blog.csdn.net/bushibrnxiaohaij/article/details/140672141

相关文章

  • Parallels对Mac的损害大吗 pd虚拟机怎么设置内存和CPU 运行Parallels发热
    Parallels是一家专注于虚拟化软件开发的公司,其旗舰产品ParallelsDesktopforMac为Mac用户带来了运行非原生操作系统的无缝体验。然而,或许有人会忧心使用ParallelsDesktop会给Mac系统带来潜在的损害。下面咱们就对这一问题展开深入探究,并给出应对之策。Parallels......
  • Android 内存分析(java native heap内存、虚拟内存、处理器内存.
    1.jvm堆内存(dalvik堆内存)每个Java应用程序在运行时都会拥有自己的JVM实例,这个实例会为其分配独立的堆内存空间。这意味着不同的应用程序之间不会共享堆内存。不同手机中app进程的jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在AndroidStudio创建模......
  • Mac开发基础04-第一个Mac项目
    一、项目创建创建macOS项目时,在Xcode的项目设置向导中,您会遇到"Interface"、"Language"、和"Storage"等选项。这些选项决定了您项目的基本框架、编程语言以及数据持久化的技术。下面逐一解释这些选项:Interface"Interface"(用户界面)选项让您选择创建用户界面的技术。对于macOS项......
  • Mac开发基础03-学习大纲
    下面提供一个macOS开发学习大纲。这个大纲将帮助初学者系统地掌握macOS开发的核心知识和技能。macOS开发学习大纲1.macOS基础知识macOS系统架构:了解macOS基本架构,包括kernel、系统框架等。macOS和iOS的异同:对比macOS与iOS,理解两者的设计理念、用户界面与交互的差异。2.开......
  • Mac开发基础01-学前教育
    从iOS开发转型到macOS开发是一个相对平滑的过渡过程,尤其是对于那些已经熟悉Swift或Objective-C、以及Apple的软件开发工具和设计理念的开发者来说。以下几点是关于这一转型过程中的学习曲线的概述:1.语言和工具语言共通性:iOS和macOS开发都可以使用Swift或Objective-C,这意味着你......
  • Mac开发基础02-学习指南
    对于iOS开发者转型成为macOS开发者,以下是一个详细的学习步骤指南。这个过程主要包括了解macOS特有的概念和技术、学习AppKit框架以及熟悉macOS设计准则等关键步骤。1.理解macOS与iOS的区别用户界面与交互:macOS允许更复杂的用户交互,包含鼠标操作、右键点击、拖拽等,而这些在iO......
  • 如何安装mysqlclient 1.4.6? (Python 3.6)MacO?
    我安装pipinstallmysqlclient==1.4.6--no-cache-dir但是出现错误:ld:library'ssl'notfoundclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)error:command'clang'failedwithexitstatus......
  • 仅当 Minicom 在 macOS 上运行时,与 Arduino 的串行通信才有效
    我的macOS系统和Arduino设备之间的串行通信遇到问题。除非minicom正在运行,否则我的Rust和Python脚本都无法向Arduino发送消息。下面是问题的详细描述:问题总结环境:macOS(mac硅胶M3max)、Arduino、Rust、Python串口:/dev/cu.usbmodem101波特率:9......
  • Vue3-WebOS网页版os系统|vite5+pinia2+arco-design仿macOS桌面os管理
    原创Vue3+Pinia2+ArcoDesign仿macOS桌面网页版os管理系统ViteMacOS。vite5-vue3-macos基于最新前端技术vite5.x+vue3+pinia2+arco.design+sortablejs+echarts构建网页版osx后台管理系统新解决方案。支持windows+macos两种桌面模式、自定义桌面栅格布局引擎、可拖拽式桌面菜单/程......
  • C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)
    文章目录1.OpenCVSharp简介2.图像基本操作3.图像颜色空间转换4.图像几何变换5.图像阈值处理6.平滑图像7.图像梯度8.图像边缘检测9.图像直方图10.图像轮廓检测11.图像特征匹配12.视频读取与显示13.图像形态学操作14.图像混合与透明度处理15.霍夫变换16.傅......