Linux——网络层协议

前言

网络层:在复杂的网络环境中确定一个合适的路径

目录

前言

一IP协议

1预备知识

2基本概念

3格式

4网段划分

4.1理解IP

4.2IP组成

4.3划分方式

4.4为什么要网段划分

5特殊的IP地址

6IP地址的限制

7私有IP和公网IP

8NAT技术

9理解公网

10路由

11分片

a为什么会分片

b为什么不想分片

c如何做到不分片

12组装 

a如何区分收到的报文分片了

b如何保证收齐了

13分片组装的场景


一IP协议

1预备知识

主机B要真正的把数据发送给主机C,是需要网络层和数据链路层(暂时忽略)的配合才能实现

而通过网络发送实际上时借助路由器来实现:那路由器有怎么知道要发送给哪个(下个)路由器呢?

通过目的IP

IP的意义:IP地址提供了一种‘能力’:将数据跨网络送到主机C的能力

那究竟什么叫做能力? 

这就好像现实生活中有的人平时也就上上课,下来作业也不做,题目也没写,当等到考试时总能考到很高的分:我们就认为他有考高分的能力!次次能考100分,但也有失误的时候考了99,98分:所以‘能力’:有很大的概率去做成一件事情~

就假设这个人就张三,他有一个教授父亲;这次考试只考了98分,教授父亲不满意,令该年级重新组织这场考试:势必要张三考到100分!如果一次不行就两次直到达到目的!

在上面的例子中,教授父亲作用:策略;张三:有执行能力和具体的操作:两者结合才能保证张三能实现次次考100分的能力!

而IP地址也是这样,需要传输层协议的配合才有将数据跨网络可靠送到主机C的能力

 而IP地址 = 网络号 + 主机号

理解IP地址:这就好比学校的学号,里面规定了从前几位到几位代表院,专业,班级;我在路上拿到了丢失的学生卡,就能根据前几位到几位去问别人这时哪个院的,哪个专业的,哪个班级的:依照这些信息一步一步找到丢失学生卡的人!IP地址在路由器中路由器也是如此(但真实较复杂)

2基本概念

主机: 配有 IP 地址的设备(也可以进行路由控制)
路由器: 即配有 IP 地址, 又能进行路由控制;
节点: 主机和路由器的统称;

3格式

a如何分离

在TCP报头中有4位首部长度(单位4字节)范围[0,15] ->换成字节范围[0,60]

如果报头大小为20字节,那么4位首部长度为:0101(20/4=5)

1.提取20字节(报头大小);

2.读取4位首部长度,用它 - 报头大小看看等不等于0;如果为0则没有选项:剩下的都是数据

不为0则有选项(选项=首部长度-报头大小):(假设选项大小为16)提取16字节:剩下的都是数据

b如何分用

通过8为协议来识别是UDP还是TCP后交给上层

4位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4

8位服务类型(Type Of Service): 3 位优先权字段(已经弃用), 4 位 TOS 字段, 和1 位保留字段(必须置为 0),4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性,最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要

8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到 0 还没到达, 那么就丢弃了;这个字段主要是用来解决路由循环(BUG)
16 位头部校验和: 使用 CRC 进行校验, 来鉴别头部是否损坏

8位协议,源IP,目的IP(IP协议),源端口,目的端口(传输层协议) 五元组标识一个网络通信

4网段划分

4.1理解IP

在这之前我们先来简单理解下IP:IP地址:2^64字节,它是有限有用资源

所以我们要对IP进行合理分配来充分利用它:经过合理划分来给不同的区域,国家,组织,学校等... 也就是说:我们的网络世界是被精心设计过的,从硬件到软件...

4.2IP组成

IP 地址分为两个部分, 网络号和主机号

网络号: 保证相互连接的两个网段具有不同的标识;
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

不同的子网其实就是把网络号相同的主机放到一起.
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复

这个工作我们可以手动设置(过时),也可以让路由器来自动分配:这种技术叫做 DHCP, 能够自动的给子网内新增主机节点分配 IP 地址, 避免了手动管理 IP 的不便

也就是说:路由器不仅具有路由的功能,也具有构建子网的功能

4.3划分方式

过去曾经提出一种划分网络号和主机号的方案, 把所有 IP 地址分为五类, 如下图所示

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

随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址;

针对这种情况提出了新的划分方案, 称为 CIDR(Classless Interdomain Routing)

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个 32 位的正整数. 通常用一串 "0" 来结尾;
将 IP 地址和子网掩码进行 "&" 操作, 得到的结果就是网络号;
网络号和主机号的划分与这个 IP 地址是 A 类、 B 类还是 C 类无关;

例子1

只用最后一位来计算
IP地址140.252.20.680100 0100
子网掩码255.255.255.00000 0000
网络号140.252.20.00000 0000
子网地址范围140.252.20.0~140.252.20.2550000 0000~1111 1111

例子2

最后一位来计算
IP地址140.252.20.680100 0100
子网掩码255.255.255.2401111 0000
网络号140.252.20.640100 0000
子网地址范围140.252.20.64~140.252.20.790100 0000~0100 1111

例子1的子网掩码方式也可以写成:140.252.20.68/28(前28位bit为1) 

4.4为什么要网段划分

在学校中每个人都有自己的学号,学号中规定:前几位为院号,剩下的为自己的编号(网段划分);有一天张三(发送方主机)在操场散步时捡到一个钱包(报文):里面有几十块钱现金和学生卡(目的IP地址);由于张三没有学过网络,它去找钱包的主人是逮住一个人就询问学生号与钱包里的学习好进行核对,相同便是找到了钱包的主人;但学校里有几千人,找下来的话明年毕业也可能找不到主人,于是舍友建议它把钱包交给院学生会主席(出入口路由器),把缘由跟他说下叫他帮忙寻找;小李(学习会主席)看到钱包里的学生号时就明白该学生不是我们院的,是隔壁工程学院的(排除),于是在群里(各个院的学习会主席群)(公网)@小赵(工程学习会主席)跟他说我们院的学生捡到了你们院的钱包,你去你们院找下这个人,小赵一看到钱包里的学生卡就知道钱包的主人是小王(接收方主机)就在院群(子网)里@小王说有人捡到了你的钱包。加他微信沟通下

要进行网段划分与学校划分学号类似:经过精心的设计和合理的划分,可以高效支持未来的报文路径查找,大大提高查找目标主机的效率!

5特殊的IP地址

将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网;

将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;

127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1

6IP地址的限制

我们知道, IP 地址(IPv4)是一个 4 字节 32 位的正整数. 那么一共只有 2 的 32 次方 个 IP地址, 大概是 43 亿左右. 而 TCP/IP 协议规定, 每个主机都需要有一个 IP 地址.
这意味着, 一共只有 43 亿台主机能接入网络么?

实际上, 由于一些特殊的 IP 地址的存在, 数量远不足 43 亿; 另外 IP 地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个 IP 地址.CIDR 在一定程度上缓解了 IP 地址不够用的问题(提高了利用率, 减少了浪费, 但是 IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

动态分配 IP 地址: 只给接入网络的设备分配 IP 地址. 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的;(IP地址共享)
NAT 技术(下面会介绍);
IPv6: IPv6 并不是 IPv4 的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6 用 16 字节 128 位来表示一个 IP 地址; 目前 IPv6 还没有普及;

7私有IP和公网IP

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上 使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址

10.*,前 8 位是网络号,共 16,777,216 个地址(大型企业)
172.16.*到 172.31.*,前 12 位是网络号,共 1,048,576 个地址(校园网)
192.168.*,前 16 位是网络号,共 65,536 个地址(家用路由器)

私有IP不能出现在公网,但私有IP地址,可以出现在不同的私网

也就是说:虽然存在公网,但我们平时要想上网,都必须先接入一个指定的内网中,也就是我们所有人在都在各自的内网中上网,不能出现在公网(除了运营商)

那你可能就要问了:我买的云服务器不就可以访问到公网吗?

其实不是的:使用云服务器势必要通过xshell来连接,而连接的网络也是在私网中~

一个路由器可以配置两个 IP 地址, 一个是 WAN 口 IP, 一个是 LAN 口 IP(子网IP)
路由器 LAN 口连接的主机, 都从属于当前这个路由器的子网中
不同的路由器, 子网 IP 其实都是一样的(通常都是 192.168.1.1). 子网内的主机IP 地址不能重复. 但是子网之间的 IP 地址就可以重复了
每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN 口 IP 就是一个公网 IP 了

 为什么运营商有访问公网的权利呢?

因为互联网就是运营商精心设计出来的!为了能实现上网,运营商要埋光纤,建基站,建机房,做着投入比产出高的工作,那让其它企业来做行吗?也可以,但大家都不愿做这件事:那为什么运营商愿意做呢?背后肯定是有人要他们这样的的:就是我们国家政府意识到网络的重要性而要求运营商这样做的!基础设施建好了,能够上网的人多了,也就慢慢诞生出如字节腾讯这样的互联网公司,也就是实现了现在的万物互联的情景!所以说运营商的功不可没(除了恶意乱扣话费外)

8NAT技术

主机A要发送报文给XXX软件服务器时,报文会先到达路由器(主机A知道发送的目的IP不在内网中(知道自己的网络号));路由器会把srcIP替换成WAN 口IP私网不能出现在公网中),先往上进行交付直到到达XXX软件服务器!这里路由器进行IP替换的过程就叫做NAT(Net Address Translation)技术

9理解公网

公网也是有一个个内网共同组成的!运营商根据各地区实际情况来选择构建子网要用NAT技术还是用IP地址!

10路由

在复杂的网络结构中, 找出一条通往终点的路线

路由的过程, 就是这样一跳一跳(Hop by Hop) "问路" 的过程

所谓 "一跳" 就是数据链路层中的一个区间:具体在以太网中指从源 MAC 地址到目的MAC 地址之间的帧传输区间

IP 数据包的传输过程

当 IP 数据包, 到达路由器时, 路由器会先查看目的 IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;

那么如何判定当前这个数据包该发送到哪里呢?

这时就要依靠每个节点内部维护的一张路由表

Destination目的IP

Gateway

下一跳地址

Genmask

子网掩码

Flags

MetricRefUseIface
192.168.10.0*255.255.255.0U      000eth0
192.168.56.0*255.255.255.0U000eth1
127.0.0.0*255.0.0.0U000lo
default192.168.10.10.0.0.0UG000eth0

例 1:发送数据包的目的地址是 192.168.56.3

• 跟第一行的子网掩码做与运算得 到 192.168.56.0,与第一行的目的网络地址不符
再跟第二行的子网掩码做与运算得到 192.168.56.0,正是第二行的目的网络地址,因此从 eth1 接口发送出去;
由于 192.168.56.0/24 正是与 eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发;

例 2:要发送的数据包的目的地址是 202.10.1.2

依次和路由表前几项进行对比, 发现都不匹配;
按缺省路由条目, 从 eth0 接口发出去, 发往 192.168.10.1 路由器;
由 192.168.10.1 路由器根据它的路由表决定下一跳地址;

11分片

a为什么会分片

在数据链路层(下篇讲)里规定:MTU(Maximum Transmission Unit)为1500字节,报文大小超过1500字节便不能发出(通过网络给接收方);决定报文大小的不是网络层,而是传输层;所以在传输层中填写报文时尽量不要超过MTU:但这时传输层非要发送2000字节报文,到达网络层,网络层知道如果继续往下交付报文是不会发送成功的,所以将报文进行分片成2个1000字节报文发出;到达对方的网络层时将报文进行组装成一个往上交付:这样在接收方传输层看来接收到的报文与发出的报文是相同的!

网络层进行分片组装的过程传输层与数据链路层是毫不知情的,所以说在网络世界里只有IP报文

b为什么不想分片

如果分片发送出去的两个报文中有一个丢了,在接收方网络层是不会再往上交付了:在分片中,一片丢失,则报文丢失

所以到底是1个报文还是10个报文丢失概率高?当然是10个报文,那也就是说分片会提高丢包概率,对传输层也会受影响(进行补发报文)不应该(不能)成为网络的主流的!(传输层是TCP还好,如果是UDP的话丢包了就真的丢包了!)

c如何做到不分片

既然进行分片后对双方都有影响,这时网络层就对传输层说了:数据链路层规定给我MTU是1500字节,减去20字节报文,你给我发送的报文大小尽量不要超过1480字节,不然对双方都不好!传输层一听觉得是有点道理,也掰起自己的手指头算:只要应用层给我发的报文不超过1460自己就能保证网络层不分片了!(传输层是tcp)这不就是通过滑动窗口来实现吗!

12组装 

a如何区分收到的报文分片了

16 位标识: 唯一的标识主机发送的报文;报文被分片则16为标识时相同的
3 位标志: 第一位保留,第二位置为 1 表示禁止分片,第三位表示"更多分片":如果分片了, 最后一个分片置为 0, 其他是 1
13位片偏移: 是分片相对于原始 IP 报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移是这个片偏移值 <<3(乘8) 得到的. 因此, 除了最后一个报文之外(之前如果都是 8 的整数倍,最后一片的偏移量也一定是 8 的整数倍), 其他报文的长度必须是 8 的整数倍(否则报文就不连续了)

我们可以通过报头来区分报文分片

第一片:3位标记的更多分片为1 片偏移为0

中间片:3位标记的更多分片为1 片偏移大于0

最后片:3位标记的更多分片为片偏移一定大于0

也就是:if(更多分片 == 1 || 片偏移 > 0 ) 我们就说报文分片了

如果没分片:if(更多分片 == 0 && 片偏移 == 0)

b如何保证收齐了

没有头:找不到偏移量为0的报文

没有尾:找不到3位标记的更多分片为0

没有中间:按照片偏移进行升序排序片偏移 + 有效载荷 = 下一个偏移量)  不等于就说明中间片丢了!

13分片组装的场景

以上便是网络层相关的内容,有错误欢迎指正,感谢你的观看~ 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用RNN、LSTM和Transformer进行时间序列预测

文章目录 1 RNN & LSTMRNN结构LSTM结构样本和标签 2 Transformertransformer结构位置编码 1 RNN & LSTM RNN结构 LSTM结构 代码&#xff08;使用CPU&#xff09;&#xff1a; import numpy as np import torch from matplotlib import pyplot as plt from torch impo…

SQLite 上手指南 -- 基础语法

目录 一、数据库操作1.1 新建数据库1.2 查看数据库1.3 查看帮助指令 二、表操作2.1 创建表2.2 表信息2.3 表索引信息2.4 表结构信息2.5 删除表 三、数据记录操作3.1 新增记录3.2 查看记录3.3 不同格式输出 四、运算符4.1 算术运算符4.2 比较运算符4.3 逻辑运算符4.4 位运算符 S…

【热门】用ChatGPT做智慧农业云平台——农业ERP管控系统

随着科技的进步,原有农业种植方式已经不能满足社会发展的需要,必须对传统的农业进行技术更新和改造。经过多年的实践,人们总结出一种新的种植方法——温室农业,即“用人工设施控制环境因素,使作物获得最适宜的生长条件,从而延长生产季节,获得最佳的产出”。这种农业生产方式…

Linux安装 php5.6

Linux安装 php5.6.30 下载-解压-配置-安装 下载到 /usr/local wget http://am1.php.net/distributions/php-5.6.30.tar.gztar -zxvf php-5.6.30.tar.gz cd php-5.6.30#编译配置 ./configure --prefix/usr/local/php --with-curl/usr/local/curl --with-freetype-dir --wit…

无mac电脑在苹果开发者上传构建版本

我们登录苹果开发者网站的后台&#xff0c;进入app store后&#xff0c;发现上架的页面需要上传一个构建版本。 这个构建版本的意思就是我们的应用二进制文件&#xff0c;是上架最重要的文件。但是在苹果开发者后台是无法直接上传这个文件的&#xff0c;它提示我们可以使用xco…

R语言机器学习教程大纲

文章目录 介绍机器学习算法监督学习Supervised Learning分类Classification回归Regression 无监督学习 Unsupervised Learning聚类 Clustering降纬 Dimensionality Reduction相关Association 强化学习Reinforcement Learning模型自由 Model-Free Methods模型驱动 Model-Based M…

服务器托管的优缺点有哪些?

由于数字化程度不断提高&#xff0c;服务器在日常业务中发挥着越来越重要的作用。在大多数情况下&#xff0c;服务器由公司自己维护和管理。但对于一些公司来说&#xff0c;托管服务器(将这些任务交给专业人员)是更好的选择。 关于服务器的优缺点&#xff0c;有一点是明确的&am…

【SpringBoot】16 文件上传(Thymeleaf + MySQL)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 文件上传是指将本地的图片、视频、音频等文件上传到服务器&#xff0c;供其他用户浏览下载的过程&#xff0c;文件上传在日常项目中用的非常广泛。 实现代码 第一步&#xff1a;在配置文件新增如下配置 application.yml s…

浏览器实时更新esp32-c3 Supermini http server 数据

一利用此程序的思路就可以用浏览器显示esp32 采集的各种传感器的数据&#xff0c;也可以去控制各种传感器。省去编写针对各系统的app. 图片 1.浏览器每隔1秒更新一次数据 2.现在更新的是开机数据&#xff0c;运用此程序&#xff0c;可以实时显示各种传感器的实时数据 3.es…

鸿蒙网络编程系列27-HTTPS服务端证书的四种校验方式示例

1. 服务端数字证书验证的问题 在鸿蒙客户端对服务端发起HTTPS请求时&#xff0c;如果使用HttpRequest的request发起请求&#xff0c;那么就存在服务端数字证书的验证问题&#xff0c;你只有两个选择&#xff0c;一个是使用系统的CA&#xff0c;一个是使用自己选定的CA&#xf…

C++初阶

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C11) 1.auto的使用细则 八.基于范围…

【Spring声明式事务失效的12种场景测试】

文章目录 一.Spring声明式事务是什么&#xff1f;二.Spring事务失效的12种场景1.访问权限问题 小结 一.Spring声明式事务是什么&#xff1f; Spring声明式事务是一种通过配置的方式管理事务的方法&#xff0c;它通过注解或XML配置来声明哪些方法需要事务管理&#xff0c;从而将…

杨氏矩阵(有一个数字矩阵,矩阵的每行从左到右的递增的,矩阵从上到下是递增的请编写一个程序,在这样的矩阵中查找某个数字是否存在)

//杨氏矩阵 //有一个数字矩阵&#xff0c;矩阵的每行从左到右的递增的&#xff0c;矩阵从上到下是递增的 //请编写一个程序&#xff0c;在这样的矩阵中查找某个数字是否存在 // 1 2 3 // 4 5 6 // 7 8 9 #include<stdio.h> int main() {int a[3][3] { 0 };int i 0, j …

数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎(二)(20241017)

数据库管理252期 2024-10-17 数据库管理-第252期 深入浅出多主多活数据库技术- Cantian存储引擎&#xff08;二&#xff09;&#xff08;20241017&#xff09;1 部署规划2 服务器基础配置2.1 配置HOSTS2.2 关闭防火墙2.3 关闭SELinux2.4 配置yum源 3 编译服务器配置3.1 安装git…

Vue Google 广告的配置

前置条件&#xff1a;已经在Google AdSense 中 添加网站 并通过审核 同时已创建广告单元。 因 VUE 的 Script 配置问题&#xff0c;所以不能直接拷贝内容。 index.html 配置 添加 Google 广告的脚本。 //index.template.html /* * 在head标签中添加 script 【 **** 】&#…

网络变压器在PCIe网口应用的案例

PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;是一种高速串行计算机总线标准&#xff0c;用于连接计算机主板上的设备&#xff0c;如显卡、网络适配器、存储控制器等。H82422S 网络变压器&#xff08;Ethernet Transformer&#xff09;&#xff0c;在…

SSM框架学习(七、MyBatis-Plus高级用法:最优化持久层开发)

目录 一、MyBatis-Plus快速入门 1.简介 2.快速入门 二、MyBatis-Plus核心功能 1.基于Mapper接口CRUD &#xff08;1&#xff09;Insert 方法 &#xff08;2&#xff09;Delete方法 &#xff08;3&#xff09;Update 方法 &#xff08;4&#xff09;Select方法 2.基于Serv…

使用LangGraph构建多Agent系统架构!

0 前言 Agent是一个使用大语言模型决定应用程序控制流的系统。随着这些系统的开发&#xff0c;它们随时间推移变得复杂&#xff0c;使管理和扩展更困难。如你可能会遇到&#xff1a; Agent拥有太多的工具可供使用&#xff0c;对接下来应该调用哪个工具做出糟糕决策上下文过于…

重塑企业数字化未来:物联网与微服务架构的战略性深度融合

从物联网到微服务架构的战略价值解读 随着全球数字化转型的不断加速&#xff0c;企业需要重新审视其技术基础架构&#xff0c;以适应日益复杂的业务需求和市场变化。物联网&#xff08;IoT&#xff09;作为核心技术&#xff0c;已广泛应用于制造、农业、交通、医疗等各个行业&…

Qt 支持打包成安卓

1. 打开维护Qt&#xff0c;双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件&#xff0c;点击下一步&#xff0c; 勾选Android, 点击下一步 3.更新安装中 4.进度100%&#xff0c;完成安装&#xff0c;重启。 5.打开 Qt Creator&#xff0c;编辑-》Preferences... 6.进…