【Linux后端服务器开发】MAC地址与其他重要协议

news2024/11/16 21:28:37

目录

一、以太网

二、MAC地址

三、MTU

四、ARP协议

五、DNS系统

六、ICMP协议

七、NAT技术

八、代理服务器


一、以太网

“以太网”不是一种具体的网路,而是一种技术标准:既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构、访问控制方式、传输速率等。

以太网中的网线必须使用双绞线,传输速率有10M、100M、1000M等。 

以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网、无限LAN等。

每张网卡都有一个唯一的sn,该网卡的MAC地址,全球范围内具有唯一性。

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固定的
  • 帧协议类型字段有三种,分别对应IP、APR、PARP
  • 帧末尾是CRC校验码

二、MAC地址

  • MAC地址用于识别数据链路层中相连的节点
  • MAC地址长度为48位,一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
  • MAC地址在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址并不是真实的MAC地址,可能不唯一,也有些网卡支持用户自己配置MAC地址)

IP地址描述路由的起点和终点,MAC地址描述路由中每一个节点的起点和终点。

在局域网中,MAC帧数据传输是公开的,每个主机都会从数据链路中拿到数据,通过分离MAC报头里面的目的MAC地址判断自己是否是接收方,再决定是读取数据还是丢弃数据。

在局域网中,任何时刻,只能有一个主机发送消息,如果多个消息同时发送,就会导致局域网中的数据发生碰撞,产生无效数据。(一个局域网,一个碰撞域)

通过碰撞检测碰撞避免实现在局域网的任何时刻只有一个主机发送数据。(以太网、令牌环)

局域网范围能不能很大?不能很大,主机太多发生碰撞的概率就增加了。

交换机:识别局部性的碰撞,对碰撞数据的区域不做转发,划分碰撞域。

 

三、MTU

MTU相当于发快递时对快递包裹尺寸的限制,这个是限制是不同的数据链路层对应的物理层产生的限制

  • 以太网中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面填充位
  • 最大值1500称为以太网的最大传输单元MTU,不同网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片,不同的数据链路层的MTU是不同的

MTU对IP协议的影响:

  • 将较大的IP数据包分为多个小包,并给每个小包打上标签
  • 每个小包的IP协议报头上的16位标识都是一样的
  • 每个小包的IP协议报头上的3位标志字段中,第二位置0,表示允许分片,第三位用来表示结束分片标记(最后一个小包为0)
  • 到达对端后再将这些小包按顺序重组,拼装到一起返回给传输层
  • 一旦这些小包中任意一个小包丢失,接收端的重组就失败,但是IP层不会负责重新传输数据

MTU对UDP的影响:

  • 一旦UDP携带的数据超过1472 (1500 - 20(IP首部) - 20(UDP首部)),那么就会在网络层分成多个IP数据报
  • 这多个数据报有任意一个丢失,都会引起接收端网络层重组失败,即UDP数据报分层的情况下整个数据丢包的概率加大了

MTU对TCP的影响:

  • TCP的一个数据报也不能无限大,还是受限于MTU
  • TCP单个数据报的最大消息长度称为MSS(Max Segment Size)
  • 最理想的情况,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然受制于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP报头写入自己支持的MSS值,然后双方得知对方的MSS值之后,选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2)

使用 ifconfig 命令,即可查看IP地址、MAC地址和MTU。 

四、ARP协议

APR协议建立了主机IP地址和MAC地址的映射关系

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

ARP协议的工作流程

  • 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  • 每台主机都维护一个ARP缓存表,可以用 arp -a 命令查看,缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还有重新发送ARP请求才能获得目的主机的硬件地址

ARP数据包格式

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其他类型的网路则有可能是必要的
  • 硬件类型指链路层网络类型,1位以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度对于IP地址为4字节
  • op字段为1表示ARP请求,op字段为2表示ARP应答
  • ARP请求比较目的IP地址,ARP应答查看发送端以太网地址

  • IP1发送ARP请求,通过将目的MAC地址置为全1进行广播,想要得到IP6的MAC地址
  • 局域网中所有的主机都可以拿到这个数据包,并且由于是广播,所有主机都通过向上交付给ARP协议,先检查op位判断是请求还是应答,发现是请求就立即比较目的IP和自身的IP是否相等, 若是应答则查看发送端的MAC地址便可拿到想要的数据
  • 所有主机将ARP数据包向上交付给ARP协议之后发现目的IP和自身的IP不一致,将数据包丢弃,只有IP6除外
  • IP6发现这个ARP请求的目的IP是自己,于是生成一份ARP应答,op字段为2,发送端MAC地址写MAC6,发送端IP地址为IP6,将MAC1、IP1写入目的MAC地址、目的IP地址
  • 由于IP6发送的ARP应答指定了MAC地址,故只有IP1拿到了ARP数据包,IP1将ARP数据包向上交付,ARP协议检查op字段,发现是应答,就查看发送端MAC地址,得到IP6的MAC地址

五、DNS系统

DNS是一整套从域名映射到IP的系统

DNS背景:TCP/IP协议中使用IP号和端口号来确定网络上一台主机的一个程序,但是IP地址不方便记忆,于是人们发明了一种叫主机名的东西,是一个字符串,并且使用hosts文件来描述主机名和IP地址的映射关系。

最初,通过互联网信息中心(SRI-NIC)来管理这个hosts文件的。如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts,其他计算机也需要定期下载更新新版本的hosts文件才能上网,这样就太麻烦了,于是就产生了DNS系统。

DNS是一个有组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。如果新计算机接入网络,将这个信息注册到数据库中,用户输入域名的时候,会自动查询DNS服务器,由DNS服务器索检数据库,得到对应的IP地址。

至今,我们的计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。( /etc/hosts )

 

域名介绍:主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。

例如 www.baidu.com 域名使用 . 连接:

  • com:一级域名,表示这是一个企业域名,同级的还有 "net"(网络提供商)、"org"(非营利组织)、"edu"(教育机构)......
  • baidu:二级域名,公司名
  • www:只是一种习惯用法,只是一种习惯用法,之前人们在使用域名时,往往命名成 ftp.xxx.xxx 或 www.xxx.xxx 这样的格式,来表示主机支持的协议

六、ICMP协议

ICMP协议是一个网络层协议。

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。

ICMP功能:验证网络的畅通性

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP被丢包的原因
  • ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用的是ICMPv6

ICMP的报文格式

ICMP大概分为两类报文:一类通知出错原因,一类用于诊断查询。

ping命令

  • ping命令ping的是域名,而不是url,一个域名可以通过DNS解析称为IP地址
  • ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Tiem To Live,生存周期)
  • ping命令会先发送一个ICMP Request给对端,对端接收后,会返回一个ICMP Echo Reply
  • ping命令基于ICMP,是网络层协议,不涉及端口号

traceroute命令也是基于ICMP协议,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。

七、NAT技术

NAT技术是当前解决IPv4地址不够用的主要手段,是路由器的一个重要功能

  • NAT技术能够将私有IP对外通信时转为全局IP,也就是一种将私有IP和全局IP互相转化的技术方法
  • 很多学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或者必要的服务器上设置全局IP
  • 全局IP要求唯一,但是私有IP不需要,私有IP只需要在相同局域网中唯一即可

NAT IP转换过程

  • NAT路由器将源地址从 10.0.0.10 替换成全局的IP 202.244.174.37
  • NAT路由器收到外部的数据时,又会把目标IP从 202.244.174.37 替换成 10.0.0.10
  • 在NAT路由器内部,有一张自动生成的,用于地址转换的表
  • 但 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

NAPT

如果局域网中,有多个主机都访问同一个外网服务器,那么对于服务器的返回数据中,目的IP都是相同的,那么NAT路由器如何解决判定将这个数据转发给局域网中的哪个主机?

这时候NAPT来解决这个问题,使用 IP + port 来建立映射关系。

这种关系也是由NAT路由器自动维护的,例如在TCP的情况下,建立连接时,就会生成这个表项,在断开连接时,就会删除这个表项。

NAT技术的缺陷

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

八、代理服务器

路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。

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

那么NAT设备和代理服务器的区别有哪些呢?

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

代理服务器是一种应用比较广的技术

  • 翻墙:广域网中的技术
  • 负载均衡:局域网中的代理

代购例子

花王尿不湿是一种很经典的日本尿不湿品牌。

我自己去日本买尿不湿很不方便,于是我就请在日本工作的表姐去超市买了寄给我。此时超时看到的买家是我表姐,我表姐就是“正向代理”。

后来找我表姐买尿不湿的人太多了,我表姐觉得天天去超时太麻烦,干脆去超时买了一大堆屯在家里,如果有人要找她代购,就直接把屯在家里的货发出去,而不必再去超市,此时我表姐就是“反向代理”。

  • 正向代理用于请求的转发(借助代理绕过反爬虫)
  • 反向代理往往作为一个缓存

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

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

相关文章

Linuxcnc-ethercat从入门到放弃(1)、环境搭建

项目开源网站 LinuxCNChttps://www.linuxcnc.org/当前release版本2.8.4 Downloads (linuxcnc.org)https://www.linuxcnc.org/downloads/可以直接下载安装好linuxcnc的实时debian系统,直接刻盘安装就可以了 安装IgH主站,网上有很多教程可供参考 git clo…

【Rust】枚举类型创建单链表以及常见的链表操作方法

目录 单链表 用枚举表达链表 枚举enum Box容器 创建节点 1. 创建并打印 2. match 匹配 3. 节点初始化 4.节点嵌套 追加节点 1. 尾插法 2. 链表追加方法 3. 头插法 4. 改写成单链表方法 遍历链表 1. 递归法 2. 递推法 3. 改写成单链表方法 自定义Display tr…

8. Vmvare中重新分配Linux系统的分区空间大小

1. 说明 一般情况下,在使用Vmvare虚拟机创建配置Linux系统时,默认将系统的内存设置为4GB,硬盘大小设置为40GB,但随着空间利用的越来越多,内存会出现不够使用的情况,此时需要重新分配空间大小,具…

go 查询采购单设备事项[小示例]

一、项目背景 1.1需求: 项目实施过程中存在多次下采购单的事项,如果查询过去采购单中下了哪些设备,数量以及相应信息,如何处理呢? 备注,价格等都是修改了,不是原始内容,只是参考 1.2实现步骤…

transformer代码注解

其中代码均来自李沐老师的动手学pytorch中。 class PositionWiseFFN(nn.Module):ffn_num_inputs 4ffn_num_hiddens 4ffn_num_outputs 8def __init__(self,ffn_num_inputs,ffn_num_hiddens,ffn_num_outputs):super(PositionWiseFFN,self).__init__()self.dense1 nn.Linear(ffn…

3ds MAX绘制简单动画

建立一个长方体和茶壶: 在界面右下角点击时间配置: 这是动画制作的必要步骤 选择【自动】,接下来,我们只要在对应的帧改变窗口中图形的位置,就能自动记录该时刻的模样 这就意味着,我们通过电脑记录某几个…

工业平板电脑优化汽车工厂的生产流程

汽车行业一直是自动化机器人系统的早期应用领域之一。通过使用具有高负载能力和远程作用的大型机械臂,汽车装配工厂可以实现点焊、安装挡风玻璃、安装车轮等工作,而较小的机械手则用于焊接和安装子组件。使用机器人系统不仅提高了生产效率,还…

工业智能化的关键之二:集成监控和分析能力

将监控和分析能力集成到工厂运营的日常中是工业智能化发展的关键步骤。随着科技的进步和数字化技术的广泛应用,工厂正在逐步实现从传统的人工操作到智能化的转变。这种转变不仅提高了工厂的生产效率和产品质量,还极大地提升了工厂的安全性和可靠性。 1.…

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面

theme: cyanosis 1. 前言 很多朋友可能在布局过程中、或者组件使用过程中,会遇到诸如颜色、尺寸、约束、定位等问题,可能会让你抓耳挠腮。俗话说,磨刀不误砍柴工,会使用工具是非常重要的,其实 Flutter 提供了强大的调试…

axios使用异步方式无感刷新token,简单,太简单了

文章目录 🍉 废话在前🍗 接着踩坑🥩 解决思路🍓 完整代码 🍉 废话在前 写vue的或帮们无感刷新token相信大家都不陌生了吧,刚好,最近自己的一个项目中就需要用到这个需求,因为之前没…

Fluentbit

Fluent Bit(常简称为Fluent-Bit 或 Fluentbit)是一个开源的、轻量级的日志数据收集器(log collector)和 转发器(log forwarder),旨在高效地收集、处理和转发日志数据。它是Fluentd项目的一个子项…

山东农业大学图书馆藏书《乡村振兴战略下传统村落文化旅游设计》

山东农业大学图书馆藏书《乡村振兴战略下传统村落文化旅游设计》

数字化时代,企业研发效能跃升之道丨IDCF

本文节选自新书《数字化时代研发效能跃升方法与实践》 作者:冬哥 研发效能是近年的热词,企业言必谈效能,但究竟什么是研发效能,落地具体应该如何进行,相信每个人都会有无数的问题浮现。 什么是效能? 效能…

Element-plus侧边栏踩坑

问题描述 el-menu直接嵌套el-menu-item菜单&#xff0c;折叠时不会出现文字显示和小箭头无法隐藏的问题&#xff0c;但是实际开发需求中难免需要把el-menu-item封装为组件 解决 vue3项目中嵌套两层template <template><template v-for"item in list" :k…

内网隧道代理技术(十三)之内网代理介绍

前言 什么?你问我内网隧道代理技术怎么突然就第十三篇了,第十二篇呢?这个,因为某些不可抗拒力量,第十二篇博客无法发表,如果想要查阅,请加内网渗透qq群:838076210 内网代理介绍 内网代理介绍 内网资产扫描这种场景一般是进行内网渗透才需要的代理技术,如果你不打内…

公共字段的填充

方式1&#xff0c;通过mybatis-plus提供的MetaObjectHandler进行填充 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import com.sky.context.BaseContext; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import o…

【ROS第一讲】一、创建工作空间

【ROS第一讲】一、创建工作空间 一、工作空间1.src&#xff1a;2.build&#xff1a;3.devel&#xff1a;4.install: 二、创建工作空间1.工作空间的编译2.配置环境变量&#xff1a; 三、创建功能包 一、工作空间 1.src&#xff1a; 放置所有功能包源码的空间 2.build&#xf…

Unity XML3——XML序列化

一、XML 序列化 ​ 序列化&#xff1a;把对象转化为可传输的字节序列过程称为序列化&#xff0c;就是把想要存储的内容转换为字节序列用于存储或传递 ​ 反序列化&#xff1a;把字节序列还原为对象的过程称为反序列化&#xff0c;就是把存储或收到的字节序列信息解析读取出来…

再见 MyBatis-Plus !

一、Mybatis-Flex是什么&#xff1f; Mybatis-Flex 是一个优雅的 Mybatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

odoo16-domain

odoo16-domain 参考:https://blog.csdn.net/u013250491/article/details/86699928 domain的使用注意以下几点: 是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm如果在xml中使用,domain的格式建议为[[]], 二维…