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

news2024/11/23 7:30:16

在这里插入图片描述

文章目录

  • 一、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则需要进行分片。

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

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

相关文章

如何使用ExchangeFinder在给定域中寻找Microsoft Exchange实例

关于ExchangeFinder ExchangeFinder是一款功能强大且使用简单的开源工具,该工具能够在给定域中尝试搜索指定的Microsoft Exchange实例,该工具的搜索机制基于Microsoft Exchange的常见DNS名称实现,并且能够识别指定的Microsoft Exchange版本&…

java基础之异常总结(自问自答版本)

1.errors和exception的区别是什么? 二者都是JAVA异常处理的重要子类,各自都包含大量子类 区别: exception:程序本身可以处理的异常,可以通过catch来进行捕获,遇到这种错误,应对其进行处理,使应用程序可以继…

大数据技术之Canal入门篇

大数据技术之Canal入门篇 文章目录大数据技术之Canal入门篇写在前面第 1 章 Canal 入门1.1 什么是 Canal1.2 MySQL 的Binlog1.2.1 什么是 Binlog1.2.2 Binlog 的分类1.3 Canal 的工作原理1.3.1 MySQL 主从复制过程1.3.2 Canal 的工作原理1.4 使用场景第 2 章 MySQL 的准备2.1 创…

作为产品经理,你都是怎样思考问题的?

作为产品经理,我们既不是产品的业务员更不是原型画师,而是伟大的创造者。用户对一个产品的评价可能只有好与坏,而作为产品工作者的我们必须有自己思考产品的视角,透过表现洞察本质。笔者根据自己有限的用户研究与产品设计的工作经…

leetcode_回溯算法

回溯算法刷题总结回溯法理论基础回溯算法的模板组合问题77.组合优化版本216.组合总和III17.电话号码的字母组合组合总和组合总和II分割131.分割回文串93.复原IP地址子集78.子集90.子集II491.递增子序列(和子集问题很像)排列全排列全排列II其他问题332.重…

RK3568平台开发系列讲解(Linux系统篇)伪文件系统目录详细介绍

🚀返回专栏总目录 文章目录 一、procfs文件系统二、sysfs文件系统沉淀、分享、成长,让自己和他人都能有所收获!😄 📢除了专门用于存储设备记录文件的文 件系统外,Linux 内核还提供了procfs、sysfs 等伪文件系统。 伪文件系统存在于内存中,通常不占用硬盘空间,它以文…

QML 键盘事件

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 和鼠标一样,键盘同样也提供了用户交互的能力,所以在介绍完《QML 鼠标事件》之后,是时候深入键盘事件了。 在 QML 中,有一个附加属性 - Keys,是专供可视元素进行按键处理的。当用户按下或释放一个按键时…

DDD:统一语言

目录一、统一语言的作用阐述二、统一语言与领域分析2.1、统一的领域术语2.2、统一的领域行为描述三、统一语言落地执行一、统一语言的作用阐述 【统一语言】,怎么强调都不为过!! 日常沟通中,时常会出现这么一幕:A同学…

第四章 reactive对象的简单实现以及reactive的依赖收集和触发依赖

reactive对象的简单实现 主要通过reactive.spec.ts这个测试案例来实现功能 import { reactive } from "../reactive"describe(reactive,()>{it(happy path,()>{const original {foo:1}const observed reactive(original)expect(observed).not.toBe(origina…

Unity常见面试题详解(持续更新...)

一丶声明、定义、实例化、初始化 1、首先我们来讨论在C/C中的声明和定义.. 1)我们先从函数声明和定义说起... 一般我们在C里都会先定义一个函数,然后再Main函数前将函数声明,比如: //函数声明 int Add(int);int Main {} //函数…

tmux终端复用软件

一、安装[rootpool-100-1-1-159 test]# yum install tmux [rootpool-100-1-1-159 test]# yum search tmux Repository extras is listed more than once in the configuration Last metadata expiration check: 0:33:52 ago on Fri 03 Mar 2023 09:10:34 AM CST.Name Exactly M…

【C++】适配器模式 -- stack/queue/dqueue

一、适配器模式 设计模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结;Java 语言非常关注设计模式,而 C 并没有太关注,但是一些常见的设计模式我们还是要学习。 迭代器模式 其实我们在前面学习 strin…

call、apply、bind的区别以及源码实现

首先,需要明确,call()、apply()、bind()这三个方法的作用都是 改变this指向它们之间的不同点在于:call和apply是直接调用的,而bind不会立即调用,需要手动调用(原因在于bind返回的是一个改变了this指向的函数…

请你喝一杯 Corretto?谈一谈 JDK 的新选择

前言如果以20年的时间为限,让我们选出一个影响力最大的程序语言,我的答案应该只有一个 – 那就是 Java。这个1995年诞生的全新的计算机语言,以“一次编写,到处运行”的跨平台特性以及面向对象、泛型编程等现代语言的特性迅速成为了…

Allegro172版本如何通过规则设置检查器件的热平衡问题

Allegro172版本如何通过规则设置检查器件的热平衡问题 在做PCB设计的时候,器件的热平衡问题是必须考虑到的一个设计要点,尤其小封装的阻容器件,热平衡问题没有考虑好,直接影响到装配的可靠性 如下图 小封装器件,一边线宽粗并且铺铜,另外一端是一根细线 Allegro172及以上…

c语言指针怎么理解 第一部分

不理解指针,是因为有人教错了你。 有人告诉你,指针是“指向”某某某的,那就是误导你,给你挖了个坑。初学者小心不要误读这“指向”二字。 第一,“指针”通常用于保存一个地址,这个地址的数据类型在定义指…

ASGCN之依存句法图的构建

文章目录前言1.理论部分1.1 依存句法理论1.2 依存句法分析1.3 依存句法的应用2. 代码实践2.1 数据集2.2 代码实现2.3 效果查看总结前言 本文首先介绍依存句法理论,之后通过代码实现ASGCN中的依存句法图数据的构建。 1.理论部分 1.1 依存句法理论 词与词之间存在主…

Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】

文章目录04-头部购物车-商品列表-本地05-头部购物车-删除操作-本地06-购物车页面-基础布局04-头部购物车-商品列表-本地 目的:根据本地存储的商品获取最新的库存价格和有效状态。 大致步骤: 定义获取最新信息的API定义修改购物车商品信息的mutations定义…

Mybatis工作原理及流程

1、MyBatis介绍 MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为…

OSSFs挂载工具简介

OSSFs挂载工具 OSSFs挂载工具简介 ​ ossfs允许您在Linux系统中将对象存储OSS的存储空间(Bucket)挂载到本地文件系统。挂载完成后,您能够像操作本地文件一样操作OSS的对象(Object),从而实现数据共享。 ​…