【网络原理】TCP/IP五层网络模型之网络层-----IP协议详解,建议收藏!!

news2024/10/26 3:40:02

💐个人主页:初晴~

📚相关专栏:计算机网络那些事


        前几篇文章中我们深入研究了TCP协议,因为TCP协议在我们日常开发中的使用频率非常高。而相比之下,IP协议与我们普通程序员关系就没那么近了。一般是专门开发网络设备的程序员(开发路由器、交换机、防火墙)才会用到。不过,了解IP协议的构成与性质业可以加深我们对网络传输的理解,一定程度上能提高我们的认知,因此还是有必要学习一下的

一、初识IP协议

IP协议主要作用:

1、地址管理 ===>  IP地址

2、路由选择 ===>  对数据传输的路径进行规划

  • 主机: 配有IP地址, 但是不进⾏路由控制的设备
  • 路由器: 即配有IP地址, ⼜能进⾏路由控制
  • 节点: 主机和路由器的统称

协议头格式:

 4位版本

实际上只有两个取值:

4 ==> IPv4

6 ==>IPv6

4位首部长度

IP协议的报头与TCP类似,也是变长的

注意:这里的一位代表着四个字节

4位首部长度的表示范围:0=>15

  • 则其表示的实际报文长度范围:0=>60字节

8位服务类型

服务类型(TOS),即 “type of service”

3位优先权字段(已经弃⽤),4位TOS字段,和1位保留字段(必须置为0)
4位TOS分别表⽰:
  • 最⼩延时:数据从 A 到 B 的时间消耗最短
  • 最⼤吞吐量:数据从 A 到 B 单位时间内,传输的数据更多
  • 最⾼可靠性:一定程度上降低丢包的概率(IP协议并不像TCP那样有严格的可靠性)
  • 最⼩成本:设备上消耗的资源较少
注意: 这四者相互冲突,只能选择⼀个

16位总长度

表示IP数据报的长度。

与UDP协议一样也是16 位(2个字节),因此单个数据报最多只能传 64 KB的数据。但这并不是IP协议传输的极限。

IP协议有专门的拆包组包机制:当需要传输 64 KB以上的数据时,会自动把大的数据包,拆分成多个 IP 数据报携带传输,传输到接收方后再进行拼接。

16位标识、3位标志、13位片偏移

IP协议会自动拆包,同一个载荷的数据会被拆分成多份,交给多个 IP 数据报来携带。

  • 16 位标识

这多个 IP 数据报是相同的值,表示这些数据报是同一组的。

  • 13 位片偏移

决定组包时该数据报的位置。因为网络传输中存在“后发先至”问题,不能直接根据接收顺序进行组包

  • 3 位标志位

只有两个有效位。(剩下一个保留位)

  • 一个表示当前这个包是否需要组包(是否是拆包的一部分)
  • 另一个表示当前包是否为组包中的最后一个包(确认组包是否结束)

8 位生存时间(TTL)

表示一个数据包在网络中最多存活多长的时间

假如在构造一个 IP 数据报时,目的 IP 写错了,写成不存在的 IP 了,如果不加以限制,这样的数据报就会无限地传输下去,会浪费许多网络资源。而通过 TTL 就约定了传输的上限,达到上限时,数据报就会被自动丢弃掉。

  • TTL 的单位不是 s 或 min ,而是“次数”,指经过路由器转发的次数

当发送一个数据报时,会设置一个初始的 TTL 值(32,64,128等),数据报每经过一个路由器转发,TTL 就会 -1 (经过交换机并不会减少),一旦TTL减至 ,该数据报就会被路由器直接丢弃。

 可以通过 ping 命令来检测网络的联通性:

输入上述命令,就会向bilibili发送一个数据包,然后bilibili会返回一个响应。

该数据包初始 TTL 为64,而返回的 TTL 为56,说明传输中经过了 8 个数据包的转发,最终到达了b站

TTL 初始值设为 64 够用吗?

正常情况下,是非常充裕的。社会学中对此有专门的“六度空间”理论

并且在发送数据包时,还能将 TTL 设为128。因此一般不用担心TTL会不够用

8 位协议

记录 IP数据包中携带的载荷的传输层协议。

  • 即通过这里的记录,来告诉接收端该用 TCP 、UDP还是其它协议去解析数据。保证数据解析的准确性。

类似于 TCP/IP 报头中的“端口号”作用就是决定要将数据交给哪个应用程序,这里协议的记录就是为了决定要将数据交给哪个传输层协议进行解析

16 位首部校验和

验证数据在传输中是否出错(只针对首部,即IP报头)

因为载荷部分会由 TCP/IP 协议通过其校验和进行校验。

32 位源 IP 地址、32 位目的 IP 地址

这是IP数据报中最关键的信息,记录了数据包的起始地与目的地。

可以通过  ipconfig  命令查看本机的IP地址:

IP 地址是32位的整数, 不太方便让人直接阅读,通常会采用 “点分十进制” 的表示方法,即把 32 位 IP地址通过 “.” 号每 8 位一组分为 4 组,这样每组就是一个字节,范围是0-255。

因此 IP地址的表示范围就可以为 “0.0.0.0”“255.255.255.255”了。

二、地址管理

1、地址分配

IP 地址,是用来标识网络上的某一个设备,相当于互联网中的 “身份证”。这样,我们当然希望每个设备的 IP 地址都是唯一的。这样在网络通信中就能更方便地找到每一个设备了。

而上文中我们谈到,IP 地址是 32 位的整数。而 32 位表示的数据范围是 “0=>42亿9千万”

这个数字放在几十年前 IPv4 刚提出时还是个天文数字。那时候能网络上的设备数是远远达不到这个数字的,可以说绰绰有余。

但是在信息化高度发展的今天,不用说几乎人手一部的手机了,汽车、冰箱、手表、空调……等等,恨不得啥玩意都给你连个网。如今在在互联网上活跃的设备数已经远远超过 42亿9千万 了。

类似的问题在 UDP 协议中也出现过。那么 IP协议是如何应对这一问题的呢?我们接着往下看

1、动态分配 IP 地址

一个设备上网就分配 IP,不上网就不分配。这样,只要同时上网的设备数不超过 42亿9千万,就勉强还能应对了

不过这种方法治标不治本,还是不能从根本上解决问题。

2、NAT 网络地址转换

以一当千,通过一个 IP 代表一大波设备

将 IP地址分为两大类:

  • 内网IP/私网IP
  • 外网IP/公网IP

要求公网 IP必须是唯一的,但是私网 IP在不同的局域网中是允许重复的

这样运营商的公网 IP,不是服务一个设备,而是服务一个片区,可能有上万个设备。此时一个 IP 就代表了上万个设备,此时 IP 的利用率就大大提高了。

至于NAT的具体地址分配机制,博主之后会专门写一篇文章介绍

3、IPv6 协议

从根本上解决了 IP 地址不够用的问题。

  • IPv4通过 32 位 4个字节表示 IP地址
  • IPv6则通过 128位 16个字节表示 IP地址

注意,这提升的可不止是 4倍。这里每一位的提升都是指数关系。

4个字节能表示最多 2^{32},而16个字节最多可以表示 2^{128},相当于 2^{32}*2^{32}*2^{32}*2^{32}。什么概念呢?它可以做到给地球上的每一粒沙子都分配一个唯一的地址。

  • IPv6 那么好用,为什么现在还没有代替IPv4呢?

因为其提出的时间在上世纪 90 年代,时间上与 NAT 差不多。之所以 IPv6 推广举步维艰,就是因为 IPv6IPv4 并不兼容。

  • 如果要使用 IPv6 就需要更换新的设备,成本是比较高的
  • NAT 机制只需要给路由器设备更新升级软件就行了,不需要更换硬件。相比之下成本就低很多了

不过,目前 IPv6 在国内的普及率已经非常高了,超过 70%了。

2、网段划分

目前流行的划分方式是CIDR(Classless Interdomain Routing)
将 IP地址分为两个部分, ⽹络号和主机号
  • 左半部分:⽹络号
  • 右半部分:主机号

需要通过 “子网掩码” 区分出网络号与主机号。

子网掩码也是 32 位整数,左半部分全是 1,右半部分全是 0;

  • 比如这里的 “255.255.255.0” 就是 “11111111.11111111.11111111.00000000”
  • 所以上图中网络号就是 “192.168.100” ,主机号就是 “152”

还有一种更简洁的表示方式,如140.252.20.68/24,表⽰IP地址为140.252.20.68, ⼦⽹掩码的⾼24位是1,也就是255.255.255.0

网络中规定:

  • 同一个局域网中的设备,网络号必须相同,主机号必须不同

 在这个局域网中:

某个设备号不相同的话,就无法上网

某个设备的网络号虽然相同,但主机号和别的设备重复,也无法上网

路由器上有两种网络接口:

  • LAN口
  • WAN口

  • LAN口接局域网内的设备
  • WAN口接上层路由器

这里的路由器1就负责连接了两个局域网。这两个局域网就被称之为相邻局域网,IP地址的网络号就必须不同。如果相邻局域网网络号出现重复,就会导致无法正常上网。

3、特殊的 IP地址

1、主机号为全 0

此时这个IP就表示当前网段(相当于网络号

注意:给局域网中的设备分配 IP地址时,不能把主机号设为全0

2、主机号全 1

⼴播地址,⽤于给同⼀个链路中相互连接的所有主机发送数据包
一般会在手机投屏时使用:
手机上点击投屏按钮后,就会往对应的广播 IP上发一个 UDP数据包。
  • 收到这个数据包的设备不具备投屏功能,就不会做出反应
  • 收到这个数据包的设备具备投屏功能,就会返回一个响应,告诉手机自己的信息(如IP地址等)

3、127.* 环回IP(loopback)

  • 自发自收:给这个IP发数据,这个IP就会发一个相同的数据返回给该设备,相当于自己发给自己
一般使用环回IP进行测试。虽然我们写的网络程序一般都是要跨主机通信的。但是在代码研发阶段,往往需要在本机上自行测试。使用环回IP就能用一台主机模拟客户端与服务端的通信交互
一般使用的环回IP为 127.0.0.1

三、路由选择

网络是复杂的网状结构,从一个节点到另一个节点之间,可能会存在很多条路线。

就像现实中复杂的交通网络一般。当我们打开手机上的地图软件时,输入一个目的地,就会提供出多条线路供我们选择。

不过地图软件的路由选择与IP协议的路由选择是有本质区别的:

  • 地图软件:能够知道路线的全貌

从总体上规划出 “最优路线”(用时最短、成本最低、最少换乘)

  • 路由器:无法知道整个网络结构的全貌。只能知道其中的一小部分(每个路由器只知道其附近的设备的情况)

无法得到 “最优路线”,只能得到 “较优路线”

每个路由器都会维护一个路由表(类似于hash表):

  • key 就相当于 IP地址(网络号)
  • value 就是对应的网络接口(往哪个方向走)

这个路由表并不会记录网络中所有线路的信息,但是会记录与他相邻的一片区域的线路信息。

当 IP数据报到达路由器时,就会进行查表操作,判断IP数据报中的目的IP在路由表中是否存在。

  • 如果存在,则继续按照路由表指向的方向继续转发即可
  • 如果不存在,则会触发“默认的表项”,将数据报转发至更高层级的路由(认识的设备范围更广)

这样一级一级往上传,遇到认识目的 IP的路由器的概率就更高,最终成功找到目标路线,将数据报送达目的地


那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

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

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

相关文章

2024年妈杯MathorCup大数据竞赛A题超详细解题思路

2024年妈杯大数据竞赛初赛整体难度约为0.6个国赛。A题为台风中心路径相关问题,为评价预测问题;B题为库存和销量的预测优化问题。B题难度稍大于A题,可以根据自己队伍情况进行选择。26日早六点之前发布AB两题相关解题代码论文。 下面为大家带来…

创建型模式-----建造者模式

目录 背景: 构建模式UML 代码示例 房子成品: 构建器抽象: 具体构建器: 建筑师: 测试部…

配置nginx服务通过ip访问多网站

1.关闭防火墙 [rootlocalhost wzj]# systemctl stop firewalld [rootlocalhost wzj]# sstenforce 0 bash: sstenforce: command not found... [rootlocalhost wzj]# setenforce 0 2,挂mnt [rootlocalhost wzj]# mount/dev/sr0/mnt bash: mount/dev/sr0/mnt: No suc…

C++20中头文件ranges的使用

<ranges>是C20中新增加的头文件&#xff0c;提供了一组与范围(ranges)相关的功能&#xff0c;此头文件是ranges库的一部分。包括&#xff1a; 1.concepts: (1).std::ranges::range:指定类型为range&#xff0c;即它提供开始迭代器和结束标记(it provides a begin iterato…

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中&#xff0c;DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明&#xff1a; 1.1 需要…

量子纠错--shor‘s 码

定理1 (量子纠错的条件) C是一组量子编码&#xff0c;P是映射到C上的投影算子。假设是一个算子元素描述的量子操作&#xff0c;那么基于量子编码C&#xff0c;存在一个能对抗描述的噪声的纠错操作R的充要条件是 对某个复元素厄米矩阵成立。 将算子元素称为导致的错误。如果这样…

数字 图像处理算法的形式

一 基本功能形式 按图像处理的输出形式&#xff0c;图像处理的基本功能可分为三种形式。 1&#xff09;单幅图像 单幅图像 2&#xff09;多幅图像 单幅图像 3&#xff09;单&#xff08;或多&#xff09;幅图像 数字或符号等 二 几种具体算法形式 1.局部处理邻域对于任一…

第二单元历年真题整理

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 参考答案 1. A 2. A 3. A 4. D 5. D 6. D 解析&#xff1a; 栈和队列是两个不一样的结构&#xff0c;不能放在一起表示 7. B 8. C 解析&#xff1a; S --> A0 | B1 --> (S1 | 1) 0 | (S0 | 0)1 --> S10 | 10 | S…

Java程序员如何获得高并发经验?

高并发编程 提到并发编程很多人就会头疼了&#xff1b;首先就是一些基础概念&#xff1a;并发&#xff0c;并行&#xff0c;同步&#xff0c;异步&#xff0c;临界区&#xff0c;阻塞&#xff0c;非阻塞还有各种锁全都砸你脸上&#xff0c;随之而来的就是要保证程序运行时关键…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…

Leetcode239. 滑动窗口最大值

问题描述&#xff1a; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,…

c#子控件拖动父控件方法及父控件限在窗体内拖动

一、效果 拖放位置不超过窗体四边,超出后自动靠边停靠支持多子控件拖动指定控件拖放(含父控件或窗体)点击左上角logo弹出消息窗口(默认位置右下角)1.1 效果展示 1.2 关于MQTTnet(最新版v4.3.7.1207)实现在线客服功能,见下篇博文 https://github.com/dotnet/MQTTnet 网上…

7、哈希表

7、哈希表 哈希表最主要的作用就是把一个比较庞大的空间或者值域 映射到比较小的值域 (0-n) 就是将-10^9 ~10^9 映射到 0 ~10^5 一、存储结构 映射的方法可以是 h(x) x mod 10^5 但是这样映射会出现一个问题 可能会有重复的数字出现 所以就引出了两个方法 开放寻址法 和…

时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛数据集

【实验名称】 实验一&#xff1a;时间数据的可视化 【实验目的】 1.掌握时间数据在大数据中的应用 2.掌握时间数据可视化图表表示 3. 利用python程序实现堆叠柱形图的可视化 【实验原理】 时间是一个非常重要的维度与属性。时间序列数据存在于社会的各个领域&#xff0c;如&a…

金融工程--pine-script 入门

背景 脚本基本组成 策略实现 实现马丁格尔策略 初始化变量&#xff1a;定义初始资本、初始头寸大小、止损百分比、止盈百分比以及当前资本和当前头寸大小等变量。 更新头寸&#xff1a;创建一个函数来更新头寸大小、止损价格和止盈价格。在马丁格尔策略中&#xff0c;每次亏…

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…

npm、yarn、pnpm的workspaces使用

示例项目中总会遇到npm的packages中出现的workspaces键值对&#xff0c;自己的项目中没接触过这个东西&#xff0c;到底是什么&#xff1f;怎么用的&#xff1f;简单研究记录一下&#xff1a; abbrev是一个npm包&#xff0c;提供缩写展开功能。‌ 当你定义一个缩写后&#xff0…

mac电脑设置chrome浏览器语言切换为日语英语等不生效问题

在chrome中设置了语言&#xff0c;并且已经置顶了&#xff0c;但是不生效&#xff0c;在windows上直接有设置当前语言为chrome显示语言&#xff0c;但是mac上没有。 解决办法 在系统里面有一个单独给chrome设置语言的&#xff1a; 单独给它设定成指定的语言&#xff0c;然后重…

CTFHUB技能树之文件上传——双写后缀

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是双写绕过方法 上传06shaungxie.php&#xff0c;内容如下&#xff1a; 这一步其实最好换成.png或者.jpg或者.gif这三个符合文件格式的要求后缀 用burp抓包改包&#xff1a; 将php改成pphphp后再“Forward”&#xff1a; 上传…

机房巡检机器人有哪些功能和作用

随着数据量的爆炸式增长和业务的不断拓展&#xff0c;数据中心面临诸多挑战。一方面&#xff0c;设备数量庞大且复杂&#xff0c;数据中心内服务器、存储设备、网络设备等遍布&#xff0c;这些设备需时刻保持良好运行状态&#xff0c;因为任何一个环节出现问题都可能带来严重后…