【Linux后端服务器开发】MAC地址与其他重要协议
目录
一、以太网
二、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一般集成在防火墙、路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上。
代理服务器是一种应用比较广的技术
- 翻墙:广域网中的技术
- 负载均衡:局域网中的代理
代购例子
花王尿不湿是一种很经典的日本尿不湿品牌。
我自己去日本买尿不湿很不方便,于是我就请在日本工作的表姐去超市买了寄给我。此时超时看到的买家是我表姐,我表姐就是“正向代理”。
后来找我表姐买尿不湿的人太多了,我表姐觉得天天去超时太麻烦,干脆去超时买了一大堆屯在家里,如果有人要找她代购,就直接把屯在家里的货发出去,而不必再去超市,此时我表姐就是“反向代理”。
- 正向代理用于请求的转发(借助代理绕过反爬虫)
- 反向代理往往作为一个缓存
相关文章:

【Linux后端服务器开发】MAC地址与其他重要协议
目录 一、以太网 二、MAC地址 三、MTU 四、ARP协议 五、DNS系统 六、ICMP协议 七、NAT技术 八、代理服务器 一、以太网 “以太网”不是一种具体的网路,而是一种技术标准:既包含了数据链路层的内容,也包含了一些物理层的内容…...
WebGPU入门
1. 引言 前序博客: CUDA入门WebGPUZKP:客户端证明 WebGPU——Draft 2023.7.17 由苹果、谷歌、Mozilla团队发起,当前处于草稿阶段,旨在成为W3C推荐标准。 WebGPU为 在图形处理单元(GPU)上执行诸如渲染和…...

React Dva项目中.roadhogrc.mock.js直接自动导入mock目录下所有文件方式
上文 React Dva项目中模仿网络请求数据方法 中,我们书写了Dva项目模拟后端数据的方式 但是 我们.roadhogrc.mock.js中的这个处理其实并不好用 我们还需要一个一个的引入 我们可以直接靠一段代码 import fs from fs; import path from path; const mock {} fs.re…...

跨境独立站如何应对恶意网络爬虫?
目录 跨境出海独立站纷纷成立 爬虫威胁跨境电商生存 如何有效识别爬虫? 技术反爬方案 防爬虫才能保发展 中国出海跨境电商业务,主要选择大平台开设店铺,例如,亚马逊、eBay、Walmart、AliExpress、Zalando等。随着业务的扩大&…...

C# SourceGenerator 源生成器初探
简介 注意: 坑极多。而且截至2023年,这个东西仅仅是半成品 利用SourceGenerator可以在编译结束前生成一些代码参与编译,比如编译时反射之类的,还有模板代码生成都很好用。 演示仓库传送门-Github-yueh0607 使用 1. 创建项目 …...

网络安全/信息安全—学习笔记
一、网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…...
【Visual Studio】无法打开包括文件: “dirent.h”: No such file or directory
VS2017/2019 无法打开包括文件: “dirent.h”: No such file or directory 1 “dirent.h”: No such file or directory 在windows下的VS2017/2019编译器中,发现无法打开“dirent.h”,主要是MSVC并没有实现这个头文件,但是在Linux这个头文件…...
asp.net MVC markdown编辑器
在 ASP.NET MVC 中,你可以使用一些第三方 Markdown 编辑器来让用户在网页上方便地编辑和预览 Markdown 内容。这些编辑器通常提供实时预览功能,将 Markdown 文本转换为实时渲染的 HTML,并支持编辑器工具栏来辅助用户编辑。 以下是一些流行的…...

论文浅尝 | 预训练Transformer用于跨领域知识图谱补全
笔记整理:汪俊杰,浙江大学硕士,研究方向为知识图谱 链接:https://arxiv.org/pdf/2303.15682.pdf 动机 传统的直推式(tranductive)或者归纳式(inductive)的知识图谱补全(KGC)模型都关注于域内(in-domain)数据,而比较少关…...
算法工程师-机器学习面试题总结(2)
线性回归 线性回归的基本思想是? 线性回归是一种用于建立和预测变量之间线性关系的统计模型。其基本思想是假设自变量(输入)和因变量(输出)之间存在线性关系,通过建立一个线性方程来拟合观测数据ÿ…...

低成本32位单片机空调内风机方案
空调内风机方案主控芯片采用低成本32位单片机MM32SPIN0230,内部集成了具有灵动特色的电机控制功能:高阶4路互补PWM、注入功能的高精度ADC、轨到轨运放、轮询比较器、32位针对霍尔传感器的捕获时钟、以及硬件除法器和DMA等电机算法加速引擎。 该方案具有…...

读发布!设计与部署稳定的分布式系统(第2版)笔记25_互联层之路由和服务
1. 控制请求数量 1.1. 这个世界可以随时摧毁我们的系统 1.1.1. 要么拒绝工作 1.1.2. 要么扩展容量 1.1.3. 没有人会在与世隔绝的环境中使用服务,现在的服务大多必须处理互联网规模的负载 1.2. 系统的每次失效,都源自某个等待队列 1.3. 每个请求都会…...
AI面试官:LINQ和Lambda表达式(二)
AI面试官:LINQ和Lambda表达式(二) 当面试官面对C#中关于LINQ和Lambda表达式的面试题时,通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目,附带简要解答和相关案…...
Mysql原理篇--第二章 索引
文章目录 前言一、mysql的索引是什么?1.1 索引的结构:1.2 b树特性:1.3 b树每个节点的结构:1.4 b树 键值的大小排序:1.4 b树 存储(InnoDB): 二、索引类型2.1 主要的索引类型ÿ…...

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
1.简介 有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fid…...

【iOS】单例、通知、代理
1 单例模式 1.1 什么是单例 单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方…...

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)
系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API(第一章)从Vue2到Vue3【二】Composition API(第二章)从Vue2到Vue3【三】Composition API(第三章)从Vue2到Vue3【四】C…...

PostgreSQL——sql文件导入
Windows方式: 进入PostgreSQL安装目录的bin,进入cmd 执行命令: psql -d 数据库名 -h localhost -p 5432 -U 用户名 -f 文件目录 SQL Shell: 执行命令: \i 文件目录(Windows下要加引号和双斜线)...
[SQL挖掘机] - 全连接: full join
介绍: 在sql中,join是将多个表中的数据按照一定条件进行关联的操作。全连接(full join)是一种连接类型,它会返回所有满足连接条件的行,同时还包括那些在左表和右表中没有匹配行的数据。 在进行全连接时,会…...
SpringDataJpa 实体类—主键生成策略
主键配置 IdGeneratedValue(strategy GenerationType.IDENTITY)Column(name "cust_id")private Long custId;//主键 Id:表示这个注解表示此属性对应数据表中的主键GeneratedValue(strategy GenerationType.IDENTITY) 此注解表示配置主键的生成策…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...