网络层协议之IP协议

news2024/11/18 19:48:03

网络层主要做两方面事情:

1.地址管理:制定一系列规则,通过地址描述出网络上的一个设备的位置

2.路由选择:网络环境复杂,从一个节点到另一个节点之间有很多条路径,这就需要通过路由选择来筛选/规划出更合适的路径进行传输。

所以我们接下来讲解到IP协议,也是从这两方面进行展开

一.IP协议报文格式

4位版本:指定协议的版本。如果这里的数据是4,就表示此协议版本是IPv4;如果是6就表示IPv6

4位首部长度:与TCP的一样,IP的报头也是变长的,因为下面的选项可有可无,可以是一个也可以是多个。4个比特位表示的范围是0~15,每个比特位的单位是4字节,所以首部长度最长是15*4=60个字节(也就是选项拉满),最短是20个字节(也就是没有选项)。

8位服务类型:这个字段能够让IP协议切换形态。其实只有4位是有效的(因为前面的三位已经弃用,后面的一位是保留位)这四位叫做TOS字段(Type Of Service),其中分别对应最小延迟,最大吞吐量,最高可靠性,最小成本。这四者是相互冲突的,只能让其中的一个为1.

16为总长度:描述了一个IP数据报最长是多长。16位可以表示2^16-1字节,相当于是64kb。这样看,IP协议好像是存在64kb限制,但实际上,IP协议是支持拆包组包功能的(而不同于UDP,UDP的拆包组包不是自带的,必须自己在代码中实现)

16位标识,3位标志,13位片偏移,这三个属性就是在支持拆包组包。假设一个打包要拆成若干个小包,那么这若干个小包的16位标识就是相同的数值;组抱歉要知道数据的发送顺序,这13位片偏移就是描述了当前每个小数据包(分片)的相对位置,片偏移越小就说明数据越靠前;3位标志位只有两位是有用的,一位表示是否允许拆包,一位表示是否是最后一个包(这就类似于单链表的结束标志,1表示后面还有包,0表示后面没有包了),最后还有一个保留位

注意,若哪天被问到如何基于UDP实现拆包组包,就可以模仿上面的进行回答

8位生存时间:描述了该IP数据包在网络上还能存活多久。生存时间即Time To Live,所以也叫做TTL,它的单位是次数。在IP数据包构造出来时,TTL就会被设置成一个初始值(32,64,128……),包在转发过程中,每经过一个交换机或路由器,TTL的值就hi减一。若包已经把TTL耗尽了还没有顺利到达对方,就会被丢掉

这个机制是很有用的,可以给网络兜底:假如一个包的目的IP是一个不存在的IP,这包就不可能到达目的地,所以TTL就起作用了

8位协议:描述了数据报的载荷部分是TCP还是UDP数据包,也就是传输层是什么协议

16位首部检验和:它只校验IP首部,而不校验IP载荷,因为IP载荷就是TCP/UDP数据包,它们自身就携带校验和

32位源IP,32位目的IP:这是IP协议中最重要的部分

二.地址管理

现在我们一般都是用IPv4进行IP地址的管理

IPv4是一个32个比特位的整数,能够表示大约42亿9千万个地址。但是现在,这个数字好像是不够了。互联网发展到今天,能上网的设备已经非常多了,早超过了这个数字,甚至出现了物联网,向冰箱,电视,汽车等都有IP地址,所以IPv4显然不够用了

1.如何解决IPv4数量不够的问题

方案一:动态分配IP

上网的设备就分配,不上网的设备就不分配。

这个方案明显治标不治本,它仅仅是提高了IP地址的利用率,但是并没有增加IP地址的数量。

不过,这个方案任然是被普遍使用

方案二:NAT技术(网络地址转换)

这个技术的关键就是让一个IP地址代表一大批设备。是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开发的技术。

公网和私网:

首先来了解一下公网和私网:IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少而电脑太多以至于不够用,然而只有Public IP才能直接连接上网络,所以对于那些公司,学校,政府机构等场所,就可以集中使用私有的IP进行管理,而大家可以共用一个IP去连接上公网,这样,就省下了许多宝贵的Public IP。

我们用命令行输入ipconfig,查到的IP和从百度上查到的IP不一样:

在ipconfig查到的是192开头的,而在百度上查到一个外网IP(其实就是本机的公网IP)。所以其实在命令行查到的是你的私网IP(或者叫内网IP),此类地址仅在局域网中使用,不能联通外网;而在百度上查到的IP是上网的共有地址,也许并不是你的主机所在位置,而是电信联通等网络运营商分配给你的地址,用于连接互联网。

内网IP:也就是局域网IP,它是以10.或172.16~172.31或192.168开头的

外网IP:也是广域网IP,除内网IP之外。

在同一个局域网内部,内网IP不能重复,在不同的局域网,可以用相同的内网IP。但外网IP始终不可以重复。

当前情况下,通常都是一个小区/公司/学校构成一个大的局域网(这个网中有成千上万台设备),这样的局域网就使用一个外网IP即可。

NAT机制具体是怎样工作的?

比如左边的想要访问右边,左边有一个内网IP10.1.1.1,首先经过运营商路由器(它也是一个NAT设备),就能对源IP进行替换,将源IP替换成外网IP202.168.2.2(也就是它所在局域网被分配到的一个共同IP),然后传输到主机B;当主机B返回响应时,到了NAT设备后,就会将目的IP202.168.2.2替换成10.1.1.1(为什么能够替换呢?因为在NAT内部有一张转换表,记录了映射关系:里面记录着刚才是10.1.1.1的主机向172.20.7.3发送了请求,现在响应报文回来了,就要把IP替换回去)。

所以此时,运营商路由器就相当于是一个中转站。

问题:如果有多台设备都向主机B发起请求,那怎么进行转换?——NAPT

这时 ,端口号就有作用了。客户端这边的端口号是系统随机分配的,一般来说,分配到端口号是不同的,所以当服务器返回响应时,NAT设备就可以通过端口号来将行营返回给对应的客户端。所以端口号不仅可以区分同一个主机上的不同进程,也可以区分同一个局域网内部的不同主机!!

这就是NAT技术的改进:NAPT

问题:假设两台主机恰好被分配到了相同的端口号,又该怎么处理?

这时,在将请求转发给服务器之前,NAT设备会主动将相同发端口号替换成不同端口号,并在记录表中做好记录。

在整个流程当中,最关键的有以下几点:
  • 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关
  • 网络访问只能先由私网侧发起,公网无法主动访问私网主机
  • NAT 路由器在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
  • NAT 路由器的存在对通信双方是保持透明的;
  • NAT 路由器为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
NAT技术的缺陷

它只能用于内网访问外网,但是外网访问不了内网。所以之前写到UDP回显程序,只有部署到云服务器上才能被不同主机访问。其实这时缺陷也是优势,因为黑客无法入侵,更好的保护了电脑安全。

其次,NAT没有增加IP个数。

方案三:最终解:IPv6

IPv6时使用16个字节来表示地址,这就从IPv4的4个字节扩大了,范围从2^32扩大到了2^128,是IPv4的2^96倍,简直就是一个天文数字,达到可以给地球上的每一粒沙子分配一个IP地址。

但是IPv6的普及程度很低,关键是应为IPv6与IPv4不兼容。所以要想使用IPv6就得更换设备,这是很大的一笔开销,但是花了这钱后,用户也看不到实际效果,因为它不会使得网速变快,仅仅是为了解决ip地址不够用的问题。

不过欣慰的是,我们中国是IPv6普及程度最高的国家。

2.IP地址中的网段划分

我们将IP地址划分成两个部分:网络号(标识一个局域网)+主机号(区分不同的主机)。

假设现在有一个局域网,里面有三台主机,并且通过路由器1和外部相连。其中,主机1的IP为192.168.0.1,主机2的IP为192.168.0.2,主机三为192.168.0.3,路由器1为192.168.0.10;那么这个局域网的网络号就是192.168.0,其中,.1 .2 .3 .10都是主机号。

然后又有一个与之相邻的局域网,里面也有三台主机,并且通过路由器2和外部相连。其中,主机1的IP为192.168.2.1,主机2的IP为192.168.2.2,主机三为192.168.2.3,路由器1为192.168.2.10;那么这个局域网的网络号就是192.168.2,其中,.1 .2 .3 .10都是主机号。

这两个局域网之间就通过一个路由器相连,两个相邻的局域网的网络号不能相同。

子网掩码

一个IP地址,哪一部分是网络号,不一定,子网掩码就是用来确定网络号的。

他也是32为整数,左侧都必须是1,右侧都是0,不会有01交替出现的情况。其中为一的位对应的IP位就是网络号,为0的位对应的IP位就是主机号。

例如:子网掩码255.255.255.0,写成二进制就是前面三个字节都是1,后面一字节都是0,所以对应到IP上就是说这个IP的前面三个字节表示网络号,后面一个字节表示主机号。

比如我这个,就表示192.168.43是网络号,而.208就是主机号

3.特殊IP

1.若IP主机号全部是0:说明当前IP表示网络号,代表一个局域网了

2.若主机号全为1:表示当前IP是一个广播地址(UDP天然支持广播,就可以给这个地址发送UDP数据报;但是TCP无法给这个地址发送)

3.若以127开头,表示环回IP。常用的就是127.0.0.1,不过127.0.0.1~127.255.255.254都可以,只要别用127.0.0.0和127.255.255.255即可。使用这个IP就可以给自己的主机发送数据。这是因为操作系统提供了一个特殊的网卡“虚拟网卡”,关联到了这个IP上。使用环回IP来测试程序,就可以排除网络不通畅的影响

三.路由选择

路由选择是描述IP协议数据报具体怎么走:就是A发送到B的过程中,走哪条路。

在现实生活中,我们只要输入目的地就能得到精确路线,这是应为导航是全局性的,它能够看到地球的全貌。然而对于网络,每个路由器只能够知道自己和哪个路由器相连,无法知道网络的全貌,所以IP数据报在发送时是“探索式”“启发式”的过程,很难给出最优解。

这可以举个例子:比如我在大连开发区,我要到大连海事大学,期间不使用导航。出门后,我问A大连海事大学怎么走,A说不知道,但是她知道大连海事大学在甘井子区,所以她让我先坐地铁二号线,在地铁上问问别人。上了二号线,我问B,他说他也不知道,但是他知道从哪里下车,所以我就在那里下来车。下车后,我又问了C,因为此时已经和接近大学了,所以C知道了准确路线并告诉了我。

这就是“探索式”“启发式”的过程。在路上逐渐有人给我指出了接近的方向。

一个网络层数据报,每到一个路由器,就会问路!每个路由器内部又有一个路由表这样的数据结构。根据数据报中的目的IP查表,查到了就按路转发,没查到,表中有一个默认选项(下一条地址),就按它走。

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

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

相关文章

Day18:LeedCode 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路:出该二叉树的 最底层 最左边 节点的值找出深度最大的第一个结点(左结点先遍历) 方法一…

数据库与缓存一致性如何保证

最近建了一个技术交流群,欢迎志同道合的同学加入,群里主要讨论:分享业务解决方案、深度分析面试题并解答工作中遇到的问题,同时也能为我提供写作的素材。 欢迎加Q:312519302,进群讨论 前言 在工作中&#…

LangChain使用实例——RAG

Q&A with RAG Overview LLMs支持的最强大的应用程序之一是复杂的问答 (Q&A) 聊天机器人,这些应用程序可以回答有关特定源信息的问题,使用一种称为检索增强生成(RAG)的技术。 RAG RAG 是一种利用额外数据增强 LLM 知识…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式,macvlan模式、ipvlan模式等,下面介绍交换机端及服务器端配置示例。 前置要求: 准备一台物理交换机,以 H3C S5130 三层交换机为例准备一台物理服务器&…

如何用智能AI绘一幅世界地图?

今天我们分享一下,用智能AI绘一幅世界地图的方法! 为了方便你极速体验,特意在文末为你准备了登录帐号,省去你注册的烦恼。 认准AI绘画官网 如果你在百度搜索“AI绘画”或“Midjourney”,找出来的基本全是广告&#…

matplotlib画图:子图中坐标轴与标题重合...

如下图 只要在代码最后加入 plt.tight_layout() 就可以自动调节

Java练习题目6:水仙花数是指其个位,十位和百位三个数字的立方和等于其自身的三位数,求出所有的水仙花数。(Daddodil6)

每日小语 要相信卷首以卷尾为前提,几乎同卷尾以卷首为前提是一样的。——叔本华 思考 //水仙花数是指其个位,十位和百位三个数字的立方和等于其自身的三位数,求出所有的水仙花数。 import java.util.Scanner; public class Daddodil6 {publ…

服务运营 | 印第安纳大学翟成成:改变生活的水井选址

编者按: 作者于2023年4月在“Production and Operations Management”上发表的“Improving drinking water access and equity in rural Sub-Saharan Africa”探讨了欠发达地区水资源供应中的可达性和公平性问题。作者于2020年1月去往非洲埃塞俄比亚提格雷地区进行…

【Python进阶】:面向对象编程的力量:解锁封装、继承与多态的秘密武器

引言 在Python编程世界中,面向对象编程(Object-Oriented Programming, OOP)如同一把锋利的剑,它将现实世界的实体抽象为类,赋予程序更强的结构化、模块化特征,极大地提升了代码的可读性、可维护性和复用性…

抖音视频关键词批量采集工具|无水印视频爬虫提取软件

抖音视频关键词批量采集工具: 我们很高兴地介绍最新推出的抖音视频关键词批量采集工具,该工具集成了多项强大功能,让您轻松实现视频内容的批量提取和下载。以下是详细的功能解析和操作说明: 主要功能: 关键词批量提取…

如何使用PHP和RabbitMQ实现延迟队列(方式一)?

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列的延迟功能。 前期准备,需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列?-CSDN博客 一、安装RabbitM…

Python爬虫:爬虫基本概念、流程及https协议

本文目录: 一、爬虫的基本概念1.为什么要学习爬虫1.1 数据的来源1.2 爬取到的数据用途 2.什么是爬虫3. 爬虫的更多用途 二、爬虫的分类和爬虫的流程1.爬虫的分类2.爬虫的流程3.robots协议 三、爬虫http和https1.http和https的概念2.浏览器发送HTTP请求的过,2.1 http…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接: https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站: https://chat.xutongbao.top

C++进阶--使用哈希表实现unordered_map和unordered_set的原理与实例

本文将介绍如何使用哈希表来实现C STL库中的unordered_map和unordered_set容器。我们将会解释哈希表的基本原理,并给出具体的代码示例,帮助读者更好地理解和应用哈希表。 哈希原理讲解–链接入口 set和map的实现的文章,与unordered_map实现类…

ros time 时间戳改为机器开机时间

文章目录 一、问题描述二、修改方法补充1. 时间类型2. 时间数据使用方法 一、问题描述 因项目需要,需要"ros::Time::now()" 改成获取机器开机时间,此处针对rospy的机器时间修改。 二、修改方法 修改ros源码的文件 /opt/ros/noetic/lib/python3/dist-packages/ros…

是德科技keysight DSOX3104A示波器

181/2461/8938产品概述: Keysight(原Agilent) InfiniiVision DSOX3104A 的价位较低,能够在满足您苛刻预算要求的情况下提供卓越性能,以及可选功能。是德(原安捷伦)突破性技术可以在相同的预算条件下提供更多更出色的示波器功能 Keysight(原A…

Navicat 干货 | 通过检查约束确保 PostgreSQL 的数据完整性

数据完整性对于任何数据库系统来说都是很重要的一方面,它确保存储的数据保持准确、一致且有意义的。在 PostgreSQL 中,维护数据完整性的一个强大工具是使用检查约束。这些约束允许你定义数据必须遵守的规则,以防止无效数据的插入或修改。本文…

[实战]Springboot与GB28181摄像头对接。摄像头注册上线(一)

与支持国标摄像头对接 前言:不想看教程?1、准备阶段1.1、我们会学到什么?1.2、创建项目1.3、pom中用到的依赖1.4 打开摄像头的网址(了解配置方式) 2、代码编写2.1、增加项目配置2.2、在config目录下创建SipConfig2.3、在service目录下创建Sip…

手机录屏在哪里找?手把手教你找到录屏功能

随着智能手机的普及和移动应用的快速发展,手机录屏功能变得越来越受欢迎。无论是记录游戏精彩瞬间、制作教程视频,还是为了保存重要的视频通话内容,手机录屏都能帮上大忙,可是很多人不知道手机录屏在哪里找,本文将介绍…

防静电检测设备如何完善PCBA车间的防静电管控?

在PCBA(Printed Circuit Board Assembly)车间中,静电是一个极其重要的问题,因为静电可能对电子元器件和PCB板造成损坏,进而影响整个生产流程和产品质量。为了有效防止静电问题,企业通常会引入防静电检测设备…