网络层IP协议与数据链路层以太网协议

文章目录
- 一、IP协议
- IP地址
- 地址管理
- 路由选择
- DNS
- 二、以太网协议
- 以太网帧
- MTU
一、IP协议
IP协议是我们网络层的代表协议,今天我们就来一起学习一下吧,我们这里介绍的主要是IPv4协议。

版本:指定IP协议的版本,版本的取值只有4,6两个
头部长度:用来描述IP报头多长,报头中有一个选项部分,是可有可无的,我们可以自己调节它的大小,单位为4字节
服务类型(TOS):这里给的是8位,实际只有4位有效,分别代表IP协议的四种工作模式(最小延时,最大吞吐量,最高可靠性,最小成本)
总长度: 描述了IP数据报的总长度(报头 + 载荷)
大家需要注意,16位的总长度,是否意味着一个IP数据报,最大只能支持64KB?
这个长度限制确实存在,但我们的IP协议自身就支持对包的拆分和组装,如果一个IP数据报携带的载荷太长了超过64KB,就会在网络层对数据进行拆分,发送发将一个数据报拆成多个IP数据报分别发送,接收方分别接受在进行拼装

这几个字段都是为拆包/组包提供的。
标识符: 唯一标识主机发送的报文,如果被分片了,那么每一个片里的id都是相同的
标志: 相当于一个结束标记
片偏移: 分片相对于原始IP报文的偏移,用来描述当前分片在原报文的什么位置,实际偏移字节是这个数值 * 8表示的
存活时间(TTL): 一个数据报在网络上能够传输的最大时间(这里的单位不是秒,而是次数),一般初始值为64,没经过一个路由,TTL -= 1,如果到达0还未到达就丢弃,防止路由循环
协议: 用来描述上层协议类型,TCP/UDP
报头校验和: 对报头进行检验

这是我们IP协议中比较重要的部分,标识着网络上我们的源主机和目的主机
IP地址
我们这里使用32位2进制表示的,例如:01010000.00110100.01010101.01010010,但我们通常使用点分十进制的方式来标识,例如:62.155.175.25
IP地址的作用是为了给互联网上的每一个网络上的主机分配一个逻辑地址,但是我们这里只有32位,表示着IPv4的数量大概43亿左右,但随着互联网高速发展,IP地址出现不够用的情况,如何解决这种问题呢,有以下几种方案:
1.动态分配IP地址
简单的描述一下,我们的每台主机不是时时刻刻都在工作的,当你需要使用IP地址时,给你动态分配一个,当你不使用时,然后进行释放。虽然这个方案可以省下一些IP地址,但是并没有从根本上去增加IP地址,只是提高了利用率而已
2.NAT网络地址转换
简单地说,就是用同一个IP去代表一批设备,也能够大大提高IP地址的利用率
在我们NAT背景下,将IP地址分为两大类:
1.内网IP(私有IP):10.* , 172.16.* - 172.31.* ,192.168.*
2.外网IP(公用IP):除上面的私有IP之外的都是公有IP
NAT要求我们的公网IP地址必须是唯一的,私网IP可以在不同的局域网里重复出现,当我们的私网里的设备想要访问公网里的设备时,就需要NAT设备(路由器) 将IP地址进行转换,从而进行网络访问

如果我的局域网内多个主机经过该路由器转发给服务器,服务器看到的源IP都是一摸一样的,服务器的响应会先发给路由器,然后路由器再决定发给那个设备
显然NAT机制能够有效的去解决IP地址不够用的情况,但我们的网络环境也会变得更加复杂
3.IPv6
IPv6从根本上解决了IP地址不够用的情况,IPv6是128位表示的,一般使用冒分16进制表示:AD80:0000:0000:0000:ABAA:0000:00C2:0002。我们IPv6所能表示的数字是一个天文数字,有这样一句话,它能够为我们地球上每一粒沙子分配一个IPv6地址。
地址管理
一个IP地址可分为两个部分:网络号和主机号
网络号: 用来表示网段,保证两个连接的网段具有不同的标识(局域网)
主机号: 用来表示主机的,同一网段里可以拥有相同的网络号,但主机号必须不同
通过网络号和主机号的合理设置,就可以保证相互连接的网络里,每台主机的IP地址都是唯一的
最早的时候将IP地址分为5类去划分网络号和主机号的方案

| 分类 | 范围 |
|---|---|
| A类 | 0.0.0.0 - 127.255.255.255 |
| B类 | 128.0.0.0 - 191.255.255.255 |
| C类 | 192.0.0.0 - 223.255.255.255 |
| D类 | 224.0.0.0 - 239.255.255.255 |
| E类 | 240.0.0.0 - 247.255.255.255 |
这种网络号和主机号的分配方式太过于死板不够灵活,我们来了解一种更加灵活的分配方式
子网掩码
子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
这样的设定就灵活的多了,我们可以根据局域网的大小,来手动设置网段号和主机号的位数,做到资源的合理分配。
特殊的IP地址
IP地址中主机地址全设为1:标识广播地址,用于给同一局域网所有主机发送数据
IP地址中主机地址全设为0:标识网络号,代表该局域网
127.*:代表环回地址,用于本机到本机测试(为了提高性能,不走网络方式),一般都使用127.0.0.1
还有一个主机号为1,这个是经验之谈,不是绝对的,表示网关IP,也就是局域网的入口
路由选择

简单的来说,路由选择就是在网路上规划一条最佳路径。
但由于网络环境是十分复杂的,任何一个节点是无法感觉整个网络环境的,它只能够认识附近节点。
所以我们路由选择所干的工作就是边走边问路,每当IP数据报经过路由器,都会查看一下路由表,查看下一步往哪里走,如果路由表有记录就直接按照表上信息走就行,如果没有,会有一个默认路径,直到目的地。
我们这里只是简单了解一下大致过程,不去深究。
DNS
DNS:域名解析系统,是一套可以从域名映射到IP的系统。
我们的TCP/IP中使用了IP地址对网络上的一台主机进行标识,但是一串串二进制实在不方便记忆和使用,于是就出现了域名,通过域名系统来映射域名和IP地址,例如百度的域名:www,baidu.com,这样我们想用访问百度就可以使用这个域名去访问,简单好记。
为了网站的域名不能重复,于是我们DNS对域名进行了分级。

.com就是一级域名,类似还有:cn,org,us…
baidu就是二级域名,代表百度公司
www就是三级域名
不仅域名分级了,DNS服务器也是进行分级了。DNS服务器也分为一级域名服务器,二级域名服务器等等。

网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:可以简单理解域名系统为一个树型结构,从下往上查找对应IP地址过程,如果到根服务器还没有找到,那就认为不存在该主机。
二、以太网协议
我们在数据链路层考虑的是相邻两个节点(通过网线/光纤之间相连的两个设备)之间的传输,在这里我们有许多协议,这里我们着重介绍最知名的协议:以太网
以太网帧

我们以太网数据帧由三部分组成:帧头 + 载荷 + 帧尾

这里的源地址,目的地址,不是IP地址,而是MAC地址。,
MAC地址: 用于标识网络设备的物理地址,MAC地址用于识别数据链路层相邻的节点,长度为48位,在我们主机出厂的时候就已经设定好的。一般用冒分十六进制标识:06:11:17:06:rb:11,FF:FF:FF:FF:FF:FF标识广播数据报的MAC地址。
IP地址与MAC地址有什么区别?
IP地址描述的是传输的起点和终点,使用的是网络逻辑地址。
MAC地址描述的是数据链路层每个区间的起点和重点,是给网络硬件设备使用的网络物理地址
类型: 帧协议类型有三种:IP,ARP,RARP

载荷即是完整的IP数据报。
CRC为校验码。

ARP,RARP是我们数据链路层里的其他协议,这个协议大概可以让路由器/交换机能够认识局域网里的其他设备,这个ARP协议能够在路由器/交换机建立一张类似hash表,去建立IP地址与MAC地址之间的关系。
MTU
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层,产生的限制。
最大传输单元MTU(Maximum Transmission Unit,MTU),是指网络能够传输的最大数据包大小,以字节为单位

大家可以具体看一下MSS与MTU的区别。
MTU具体有多大,和使用的物理介质有很大关系,也有数据链路层所使用的协议有关,以太网协议,MTU为1500字节,如果数据包长度大于MTU则需要进行分片。
相关文章:
网络层IP协议与数据链路层以太网协议
文章目录一、IP协议IP地址地址管理路由选择DNS二、以太网协议以太网帧MTU一、IP协议 IP协议是我们网络层的代表协议,今天我们就来一起学习一下吧,我们这里介绍的主要是IPv4协议。 版本:指定IP协议的版本,版本的取值只有4&#x…...
JDK动态代理详解
1.什么是动态代理 可能很多小伙伴首次接触动态代理这个名词的时候,或者是在面试过程中被问到动态代理的时候,不能很好的描述出来,动态代理到底是个什么高大上的技术。不方,其实动态代理的使用非常广泛,例如我们平常使用…...
实时的软件生成 —— Prompt 编程打通低代码的最后一公里?
PS:这也是一篇畅想,虽然经过了一番试验,依旧有一些不足,但是大体上站得住脚。传统的软件生成方式需要程序员编写大量的代码,然后进行测试、发布等一系列繁琐的流程。而实时生成技术则是借助人工智能技术,让…...
互联网工程师 1480 道 Java 面试题及答案整理 ( 2023 年 整理版)
最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开 Boss 直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉 Java 一个初中级岗位有上千人同时竞争&#…...
Spark开发
第一步:创建RDD Spark提供三种创建RDD方式:** 集合、本地文件、HDFS文件** 使用程序中的集合创建RDD,主要用于进行测试,可以在实际部署到集群运行之前,自己使用集合构造一些测试数据,来测试后面的spark应…...
Tornado异步框架
简介: tornado是Python的web框架。tornado和主流的web服务器框架有明显的区别:它是非阻塞式服务器,而且速度非常快,得力于其非阻塞的方式和epoll的运用tornado可以每秒处理数以千计的连接(号称) 基本配置 …...
openpnp - error - 吸嘴没下降到板子上, 就将元件松开
文章目录openpnp - error - 吸嘴没下降到板子上, 就将元件松开概述笔记ENDopenpnp - error - 吸嘴没下降到板子上, 就将元件松开 概述 以前用过国内一家openpnp厂家出的设备, 他们家的openpnp是自己改过的. 贴片流程已经走过一遍. 这次还是按照以前记录的笔记, 按照国内那家的…...
【Java】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
时间格式 时间格式(协议)描述gg时期或纪元。y不包含纪元的年份。不具有前导零。yy不包含纪元的年份。具有前导零。yyyy包含纪元的四位数的年份。M月份数字。一位数的月份没有前导零。MM月份数字。一位数的月份有一个前导零。MMM月份的缩写名称,在AbbreviatedMonthN…...
快鲸SCRM发布口腔企业私域运营解决方案
口腔企业普遍面临着以下几方面运营痛点问题 1、获客成本居高不下,恶性竞争严重 2、管理系统落后,人员流失严重 3、客户顾虑多、决策时间长 4、老客户易流失,粘性差 以上这些痛点,不得不倒逼口腔企业向精细化运营客户迈进。 …...
Verilog实现组合逻辑电路
在verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。组合逻辑电路比较简单,仅由基本逻辑门组成---如与门、或门和非门等。当电路的输入发生变化时,输出几乎(信号在电路中传递时会有一小段延迟)立即就发生…...
2023前端菜鸟笔试血泪史html5-one--找到工作前都更新
1.说说对html语义化的理解 什么的HTML语义化,顾名思义,HTML语义化就是可以不通过了解HTML的内容,就可以知道这个部分所代表的的意义。 HTML语义化的意义:在使用HTML标签构建页面时,避免大篇幅的使用无语义的标签。 …...
蓝牙调试工具集合汇总
BLE 该部分主要分享一下常用的蓝牙调试工具,方便后续蓝牙抓包及分析。 目录 1 hciconfig 2 hcitool 3 hcidump 4 hciattach 5 btmon 6 bluetoothd 7 bluetoothctl 1 hciconfig 工具介绍:hciconfig,HCI 设备配置工具 命令格式&…...
Java 获取文件后缀名【一文总结所有方法】
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
UML常见图的总结
一、概述 UML:Unified Modeling Language,统一建模语言,支持从需求分析开始的软件开发的全过程。是一个支持模型化和软件系统开发的图形化语言、为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到…...
WebRTC系列-工具系列之音频相关工具
文章目录 1. audio_util数据格式转换类2. WavFile文件读写类2.1 读取wav文件2.2 写入wav文件这篇文章主要介绍WebRTC中一些音频工具这些,大部分都在 common_audio目录下,这个文件夹下提供音频的大量算法,包括sinc重采样算法,音频数据格式的转换:例如 float转int16_t格式等…...
7 线性回归及Python实现
1 统计指标 随机变量XXX的理论平均值称为期望: μE(X)\mu E(X)μE(X)但现实中通常不知道μ\muμ, 因此使用已知样本来获取均值 X‾1n∑i1nXi.\overline{X} \frac{1}{n} \sum_{i 1}^n X_i. Xn1i1∑nXi.方差variance定义为: σ2E(∣X−μ∣2).\sigma^2 E(|…...
适合小团队协作、任务管理、计划和进度跟踪的项目任务管理工具有哪些?
适合小团队协作、任务管理、计划和进度跟踪的项目任务管理工具有哪些? 大家可以参考这个模板:http://s.fanruan.com/irhj8管理项目归根结底在管理人、物,扩展来说便是: 人:员工能力、组织机制; 物:项目内…...
从100%进口到自主可控,从600块降到10块,中科院攻克重要芯片
前言 2月28日,“20多位中科院专家把芯片价格打到10块”冲上微博热搜,据河南省官媒大象新闻报道,热搜中提到的中科院专家所在企业为全球最大的PLC分路器芯片制造商仕佳光子,坐落于河南鹤壁。 为实现芯片技术自主可控自立自强&#…...
关于git的一些基本点总结
1.什么是git? git是一个常用的分布式版本管理工具。 2.git 的常用命令: clone(克隆): 从远程仓库中克隆代码到本地仓库 checkout (检出):从本地仓库中检出一个仓库分支然后进行修订 add(添加): 在提交前…...
PyTorch保姆级安装教程
1 安装CUDA1.1 查找Nvidia适用的CUDA版本桌面右键,【打开 NVIDIA控制面板】查看【系统信息】查看NVIDIA的支持的CUDA的版本,下图可知支持的版本是 10.11.2 下载CUDACUDA下载官方网址https://developer.nvidia.com/cuda-toolkit-archive找到适合的版本下载…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...
