网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

  博客主页:花果山~程序猿-CSDN博客

文章分栏:Linux_花果山~程序猿的博客-CSDN博客

关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!

在这里插入图片描述

目录

一,前提

二,IP协议格式

三,IP数据包分片 

三,网段划分

1.子网掩码

网段的理解

例子

2. NAT技术

私有IP与公有IP

NAT工作原理示例

私有ip访问外部网站(内部到外部)

外部网站响应(外部到内部)

3. 路由


嗨!收到一张超美的图,愿你每天都能顺心!

一,前提

        在学习网络层之前,我们可以回顾一下上一层——传输层,这里以TCP协议为例,TCP业绩叫传输控制协议,需要保证报文传递的可靠性,将应用层下达的数据进行拆分,形成一个个TCP段(通过序列号保证可靠传输和有序接收,通过确认,检测,重传等机制),然后再向网络层进行交付,而在接收机器上传输层等待下层向上交付,这个中间的过程传输层则不关心。

        传输层保证的是数据的可靠性,以及数据丢失重传等策略,网络层功能又什么? (为了避免误导,这里用AI回答)

        网络层,主要职责是负责数据包在网络中的传输路由选择,它是实现不同网络之间互联的基础。

二,IP协议格式

属性讲解

4位版本号 (version): 指定 IP 协议的版本 , 对于 IPv4 来说 , 就是 4。
4位头部长度 (header length): IP 头部的长度是多少个 32bit, 也就是 length * 4 的字节数 。4bit 表示最大的数字是15, 因此 IP 头部最大长度是 60 字节。(通过这个我们可以获取选项长度
8 位服务类型 (Type Of Service): 3 位优先权字段 ( 已经弃用 ), 4 TOS 字段 , 1 位保留字段 ( 必须置为 0)。4 位 TOS分别表示 : 最小延时, 最大吞吐量, 最高可靠性, 最小成本 . 这四者相互冲突 , 只能选择一个。 对于ssh/telnet这样的应用程序 , 最小延时比较重要 ; 对于 ftp 这样的程序 , 最大吞吐量比较重要。
16位总长度 (total length): IP 数据报整体占多少个字节。(一个IP数据报最大是6.5w字节
8位生存时间 (Time To Live, TTL): 数据报到达目的地的最大报文跳数。 一般是 64. 每次经过一个路由 , TTL == 1, 一直减到 0 还没到达 , 那么就丢弃了 . 这个字段主要是用来防止出现路由循环。(本质是一个计数器,每经过一个路由器则--

三,IP数据包分片 

第二层属性比较特殊,在了解这些之前,我们首先理解一下分片概念

我们知道一个IP数据包支持6.5w字节,这里提前透露数据链路层的知识,数据链路层每次传输字节数是有限制的,假设只支持1500字节,那么IP数据包就需要分片,同时需要多次传递。(对于分片的策略有这个功能,但并不推荐,原因可以查查资料)

进行分片后就容易出现问题,如下面问题:

1. 在接收方网络层进行组装时,如何保证数据片的是同一份IP报文,顺序,以及完整性?

首先我们先认识一下这三个属性信息: 

  • 16位标识(id): 标识唯一主机发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的。——保证分片为同一份IP数据包
  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 3位标志字段:
  • 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到)。
  • 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文.
  • 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0。类似于一个结束标记。

三,网段划分

        我们知道IPv4最大可以容纳42亿台主机,同时我们知道IPv4也即将面临地址不够用的情况,面对不够用的情况,人们想出了子网掩码,私有IP&公网IP的方式来缓解IP地址的枯竭。

        首先我们得有一个全球的视角,IP地址有32位,每个国家也都需要IP地址资源,从左侧开始(255.255.255.255),假设美国拿1开头的IP,中国拿2开头的IP资源,国家以这样的方式来划分IP资源,然后在国内再进行划分(以中国为例),河北省拿21...开头的ip,河南拿22...开头的ip,通过这样的方式将IP地址划分,知道单个主机,这样就会形成两个部分,也就是要说的 IP 地址有两个部分:网络号 + 主机号

网络号 : 保证相互连接的两个网段具有不同的标识 ;
主机号 : 同一网段内 , 主机之间具有相同的网络号 , 但是必须有不同的主机号 ;
关于网段定义,我们后面聊完私有IP,公网IP后说。
通过合理设置主机号和网络号 , 就可以保证在相互连接的网络中 , 每台主机的 IP 地址都不相同。
那么问题来了 , 手动管理子网内的 IP, 是一个相当麻烦的事情 .
  • 有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

 在曾经也有一些如何设置主机号和网络号方案,如下:

但这方案的弊端也很明显,大部分的企业或者组织更愿意选择B类的方案,导致B类方案地址缺乏,更重要的是并不是所有企业分配到的IP地址都能被使用,因此缺少一种动态分配网络号与主机号的占比的方案,称为CIDR(Classless Interdomain Routing),由此子网掩码出现。 

1.子网掩码

网段的理解

这些IP地址共享相同的网络部分,意味着它们位于同一个逻辑网络或者可以无需通过路由器直接相互通信的网络部分。

更具体地说,当一个大的IP地址空间被划分为若干小的、可管理的部分时,每一个这样的部分就称为一个网段。这个划分过程通常是通过应用一个子网掩码来实现的,子网掩码决定哪些位表示网络部分,哪些位表示主机部分

例子

假设我们有一个IP地址 192.168.1.10 和子网掩码 255.255.255.0

  • IP地址 192.168.1.10 转换为二进制是 11000000.10101000.00000001.00001010
  • 子网掩码 255.255.255.0 转换为二进制是 11111111.11111111.11111111.00000000

通过与运算,我们可以确定网络部分:

  • 11000000.10101000.00000001.00000000 (即 192.168.1.0

所以,网段指的是所有具有相同前三部分(网络部分)的IP地址集合,也就是所有形如 192.168.1.x 的地址(其中x代表可能的主机号部分,范围通常是1到254)。在这个例子中,192.168.1.0192.168.1.255 就构成了一个网段,所有这些地址都在同一个逻辑网络中,理论上可以直接互相通信,不需要路由器来进行跨网段的路由。

 可IPv4的地址仍旧不够用,CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然

不是很够用 . 这时候有三种方式来解决 :
  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;(上限没有提高,只是提高了利用率)
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及(有一部分原因是NAT技术大大缓解了IPv4的地址缺失);
  • NAT技术(后面会重点介绍);

2. NAT技术

NAT(Network Address Translation,网络地址转换)技术通过允许一个私有网络内的多个设备共享一个或少数几个公有IP地址访问互联网,从而有效缓解了IPv4地址的紧缺问题。这里通过一个简化例子来说明NAT的工作原理:

私有IP与公有IP

首先,了解一下概念:

  • 私有IP地址(局域网):这些地址在RFC 1918中定义,用于内部网络,不能直接在互联网上路由。常见的私有IP地址段包括:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。
  • 公有IP地址(全球级的广域网):全球唯一的IP地址,可以直接在互联网上路由,但数量有限(多为一些大型跨国企业)。

NAT工作原理示例

假设有一个小型企业网络,内部有三台电脑,它们的私有IP地址分别为:

  1. 电脑A: 192.168.1.10
  2. 电脑B: 192.168.1.11
  3. 电脑C: 192.168.1.12

这个企业只有一个公有IP地址,例如:203.0.113.42,由路由器管理并用于外部通信。

私有ip访问外部网站(内部到外部)
  1. 电脑A请求访问互联网:电脑A想要访问一个外部网站,它发送的数据包源IP是其私有IP(192.168.1.10)。
  2. 路由器进行NAT转换:路由器接收到这个数据包后,使用NAPT(Network Address Port Translation,网络地址端口转换)技术,将数据包的源IP地址替换为公有IP地址(203.0.113.42),同时记录下这个转换关系(源私有IP、源端口到公有IP、新的端口号)。
  3. 数据包转发:修改后的数据包,现在拥有公有IP地址和一个新的端口号,被路由器转发到互联网上。(这里我们可以联想在学习mysql时,云服务器向公网开放时,要选择接收任一源IP的请求连接,你不会知道那个路由器会为你转发)
外部网站响应(外部到内部)
  1. 外部响应:当外部服务器响应时,它将数据包发送到公有IP地址(203.0.113.42)和之前路由器分配的新端口号。
  2. 路由器转换回私有IP:路由器根据之前的转换记录,识别出这个数据包是给电脑A的,然后将目标IP地址和端口号转换回电脑A的私有IP地址(192.168.1.10)和原来的端口号,再将数据包转发给电脑A。

通过这种方式,NAT技术使得企业网络内的多台设备可以共享同一个公有IP地址访问互联网,极大地节省了公有IP地址的消耗,缓解了IPv4地址的紧缺问题。同时,由于私有IP地址对互联网是隐藏的,这也增加了网络的安全性。

3. 路由

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

路由的过程 , 就是这样一跳一跳 (Hop by Hop) " 问路 " 的过程 .
所谓 " 一跳 " 就是数据链路层中的一个区间 . 具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间

本质上是数据结构上图论部分,感谢兴趣的可以订阅我的高阶数据结构专栏,这里就了解一下。 

高阶数据结构_花果山~程序猿的博客-CSDN博客

结语

   本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。

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

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

相关文章

java.lang.ClassNotFoundException: javafx.util.Pair的问题解决与原因详解

先说解决办法: 1、引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version> </dependency>2、更换代码依赖地址&#xff1a; 原来依赖地址&#xff1a; import j…

企业信息资源集成-系统架构师(十二)

1、在操作系统中&#xff0c;&#xff08;&#xff09;是资源分配和管理的最小单位。 A进程 B线程 C作业 D程序段 答案&#xff1a;A 2、&#xff08;&#xff09;设计规定软件设计人员为软件组件定义正式、精确和可验证的接口规范&#xff0c;该规范应使用前提条件、后置条…

论文阅读:基于谱分析的全新早停策略

来自JMLR的一篇论文&#xff0c;https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型&#xff0c;并在此基础上提出了一种用于早停的频谱标准。 1&#xff0c;分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…

康谋分享 | 从CAN到CAN FD:ADTF在汽车网络中的应用

随着汽车电子技术的发展&#xff0c;车辆上配备了越来越多的电子装置&#xff0c;这些设备多采用点对点的方式通信&#xff0c;这也导致了车内存在庞大的线束。造成汽车制造和安装的困难并进一步降低汽车的配置空间&#xff0c;汽车总线逐步开始向网络化方向发展。 在此背景下…

QT绘图项目 - 汽车表盘

目录 前言: 整体代码 widget.h widget.cpp 效果演示 实现刻度文字正确排版 优化代码 达到效果 封装整理代码结构: widget.h widget.cpp 指针样式美化 优化后的指针API 效果演示 设置高速刻度为红色 优化刻度API 效果演示 速度显示优化 给内圈画上黑色 优化速度…

python子类调用其他.py文件的父类

main.py需要使用os.py中的构造类。 os.py中定义了一个Ui_MainWindow类 在main.py中定义了一个MyMainWindow子类&#xff0c;传入两个父类的变量名 super(Ui_MainWindow, self).__init__()super() super() 是一个内置函数&#xff0c;用于返回一个代表父类的对象&#xff0c;…

2024/6/19 英语每日一段

From this story, one might imagine Warwick to be opposed to “killing in the name of conservation”; in fact, though, he’s conflicted. Conservation “is really complicated,” he writes. “There is an old saying that anyone who gives you a simple answer to…

探索磁力搜索引擎:互联网资源获取的新视角

在当今数字化社会中&#xff0c;寻找和获取网络资源变得更加便捷和多样化。磁力搜索引擎作为这一趋势的一部分&#xff0c;提供了一种新颖而有效的方法来定位和获取用户所需的文件、媒体和其他数字内容。本文将深入探讨磁力搜索引擎的工作原理、使用场景及其在网络文化中的影响…

最快安装zabbix

部署zabbix 6.x 建议使用红帽系统。 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8…

精度丢失引起的支付失败问题

问题描述 在提交订单时候&#xff0c;输入充值金额和优惠码&#xff0c;后台会返回具体的订单信息&#xff0c;如下图&#xff0c;支付金额应该是1 * (1 - 0.09) 0.91&#xff08;这个是理想状态&#xff09;&#xff0c;但是表单显示的是0.90999997&#xff0c; 然后点击确…

架构师篇-1、总体架构设计

业务架构哲学本质 定位&#xff1a;赋予业务架构设计能力&#xff0c;具备业务架构设计思维模型&#xff0c;掌握业务架构哲学本质&#xff0c;形成以不变应万变的业务架构设计能力。 架构师所需要的能力&#xff1a; 带领业务成功通过框架思维赋能业务架构师知识体系构建掌…

HDU——2090.算菜价、2091.空心三角形、2093.考试排名

2090.算菜价 题目描述 Problem - 2090 Problem Description 妈妈每天都要出去买菜&#xff0c;但是回来后&#xff0c;兜里的钱也懒得数一数&#xff0c;到底花了多少钱真是一笔糊涂帐。现在好了&#xff0c;作为好儿子&#xff08;女儿&#xff09;的你可以给她用程序算一…

Adobe XD是否收费?试试这几款超值的免费软件吧!

Adobe XD是一站式的 UX/UI 设计平台&#xff0c;设计师可以使用Adobe XD完成移动应用app界面设计、网页设计、原型设计等。Adobe XD也是一款结合原型和设计&#xff0c;提供工业性能的跨平台设计产品。而Adobebe。 XD跨平台的特点得到了很好的弥补 Sketch 没有 Windows 版本的缺…

网安人必备!开源网络安全工具TOP 10(附下载地址)

工欲善其事&#xff0c;必先利其器。对于广大的网络安全从业者&#xff0c;以及未来想要从事网络安全的人来说&#xff0c;选择并善用合适的网络安全工具&#xff0c;能有效提升工作效率。 开源网络安全工具之所以能够在众多安全解决方案中脱颖而出&#xff0c;不仅是因为它们…

C++ 68 之 类模版作函数的参数

#include <iostream> // #include <cstring> #include <string> using namespace std;template<class T1, class T2> // 可以设置默认的类型值&#xff0c;后面在使用的时候&#xff0c;就不用再指定类型了 class Students08{ public:T1 m_name;T2 m_a…

SysTools MailXaminer: 电子邮件取证调查中的链接分析和时间线分析

天津鸿萌科贸发展有限公司是 SysTools 系列软件的授权代理商。 SysTools MailXaminer 电子邮件取证软件提供全面强大的解决方案&#xff0c;通过简化的操作&#xff0c;从电子邮件客户端、网络邮箱服务器、磁盘镜像、Skype 通讯工具中解密并搜索证据。软件对调查工作的每一阶段…

c++参考std::string自己设计类hstring

目录 一、前言 二、设计需求 三、设计思想 1.功能一 1.功能二 四、设计过程 1.类hstring搭建 2. 实现有参构造函数 3. 实现副本构造函数 4.完整代码 五、结束语 一、前言 在c中有很多的库&#xff0c;但是在有些时候呢&#xff0c;我们一定要学会自己去设计库&#…

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~

回想起刚毕业初入职场那阵子&#xff0c;领导让帮忙把纸质文件扫描提取为文本时&#xff0c;还只会傻乎乎地一点点操作&#xff0c;属实是费劲得很&#xff01; 好在后面受朋友安利&#xff0c;找到了4个能够快速实现文件扫描文字提取的方法&#xff0c;这才让我的办公效率蹭蹭…

关于自学\跳槽\转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。下面的文字其实是我以前的一个回答&#…

MyBatis-For input string: “oqm“ 异常

前言 具体的异常信息如下&#xff1a; Error attempting to get column open_id from result set. Cause: java.lang.NumberFormatException: For input string: "oqmJX5ZPU1KOv-YDt30GNAN-Zefk" 乍一看下其实就是无法把open_id字符串类型转为数字类型进行赋值&…