网络层——IP协议详细解读

news2024/9/22 21:20:18

文章目录

  • IP协议
    • 1. IP协议的报文格式
    • 2. IP协议的地址管理
    • 3. IP地址的组成
    • 4. IP协议的路由选择

IP协议

之前介绍了传输层的重点协议,TCP和UDP协议,以下将介绍网络层的重点协议IP协议。

1. IP协议的报文格式

IP地址 本质上是一个32位整数,在机器中按4个字节存储。现实中通常将其用点分十进制表示,比如:192.168.1.1三个点将32位整数分为四部分,每部分一个字节,取值为0-255。
IP协议的报文格式如图所示:
在这里插入图片描述

  1. 4位版本号:IP协议的版本号,目前有IPv4和IPv6两个版本。

  2. 4位首部长度:IP的报头和TCP类似,都是长度可变的,带有选项。4位的取值范围为0-15,它的单位为4字节。

  3. 8位TOS:其中4位有效,分别表示最小延时,最大吞吐量,最高可靠性,最小成本。表示某一时刻的状态,同一时刻只能取一种状态。

  4. 16位总长度:表示最大长度64k,单个IP数据报最大长度不能超过64k。如果超过长度可以采用 分包组包 的方法。

  5. 以下三个字段就是用来分包组包的,多个被拆分的IP数据报的16位标识相同,13位偏移确定拆分的数据报顺序,三位标志位有一位有效,为0时表示不是最后一个数据报,1时表示为最后一个数据报。
    在这里插入图片描述
    注意: IP协议数据报的分包只针对接收到的数据拆分,举例如果是一个TCP数据那么我们只针对数据部分拆分不拆分TCP报头。

  6. 8位生存空间:表示一个IP数据报在网络上还能存在多久,单位为转发次数,也就是最多能转发多少次。 如果出现数据包中的IP地址是永远到达不了的,此时不断转发会占用过多的硬件资源,所以设置了一个最大的转发次数。

  7. 8位协议:用于标识传输层使用的协议。

  8. 16位首部校验和:用来校验传输的数据是否正确。

  9. 32位源IP地址:表示发件人地址。

  10. 32位目的IP地址:表示收件人地址。

2. IP协议的地址管理

上述了解到IP地址实际是32位整数,那么表示的地址就是有限的,如果出现地址不够用,如何解决呢?

在IP协议中有三种处理方式:动态分配IP地址NAT机制IPv6协议

  1. 动态分配地址:设备上网就分配ip地址,不上网就不分配,但是这种方式并没有增加ip的数量,只是暂时缓解,如果同时上网个数达到一定量也会不够用。

  2. NAT机制:将ip地址分为两类,内网IP外网IP,此时规定外网IP必须是唯一的,内网IP可以重复出现(在不同局域网中)。如果内网设备要访问外网,就会给他分配一个外网IP,但是这个外网IP并不是该设备独有,而是该内网中所有设备公用。
    内网IP主要为:(1)10.开头 (2)172.16. 到 172.31.* (3)192.168.开头。
    外网IP为: 剩下的IP地址。
    举例说明
    如果我的主机连接了宿舍的路由器,当我想要访问百度时,我的 IP协议数据包 传输到路由器时,路由器会将我们的IP地址(源ip地址)替换成自己的 IP地址(外网IP地址),此时再传输给百度服务器,百度认为该数据包来自于路由器。得出结论外网设备无法直接访问内网设备。
    如果此时有连接路由器的两个主机都访问百度, 返回两个数据报到路由器时。此时路由器会根据自己替换了谁的ip地址进行区分,就能将数据转发回对应的主机。
    这种方法也只是提高了ip地址的利用率,并没有增加ip地址

  3. IPv6协议:它是使用16个字节,128位来表示IP地址,此时增加了大量的IP地址解决IP不够用问题。但是目前并没有开始启用,只是某些路由器等设备支持了IPv6协议,一般默认关闭IPv6。

3. IP地址的组成

ip地址分为两部分:

  1. 网络号:表示网段(局域网),保证相互连接的两个网段具有不同标识。
  2. 主机号:表示主机,同一局域网这主机之间具有相同的网络号,不同的主机号。

对于路由器 :一个路由器有两个IP地址,WAN口IP和LAN口IP,分别在不同的局域网中,路由器的作用就是将两个局域网连接起来。我们上述讲到路由器替换IP地址,是将我们主机的IP地址(内网)替换成路由器的外网IP地址。

LAN口(Local Area Network):表示连接本地网络的端口,主要与家庭网络中的交换机、集线器或PC相连。
WAN口(Wide Area Network):表示连接广域网的端口,一般指互联网。

如图:我们的电脑连接路由器的LAN口,路由器WAN口连接另一个路由器的LAN口(连通另一个局域网),此时绿色部分为一个局域网,路由器与另一个路由器也处一个局域网,另一个路由器LAN口也可以连接其他设备同处一个局域网。
在这里插入图片描述

DHCP协议

实际手动管理IP地址是一个非常麻烦的事情,当子网中新增主机时需要给其分配一个IP地址,当子网当中有主机断开网络时又需要将其IP地址进行回收,便于分配给后续新增的主机使用。

  1. 因此对于IP地址的分配和回收一般不会手动进行,而是采用DHCP动态主机配置协议。
  2. DHCP通常被应用在大型的局域网环境中,其主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
  3. DHCP是一个基于UDP的应用层协议,一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。

当我们连接WiFi时,如果验证通过,路由器就会给你动态分配了一个IP地址,然后你就可以基于这个IP地址进行上网。

注意: 在IP地址中网络号与主机号的划分界限是不一定的。主要有两种分类方式:

  1. IP地址划分类:这种方式比较繁琐目前已经不使用了。
    划分方式如图所示:
    在这里插入图片描述
    各类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。

  2. 子网掩码方式:子网掩码也是32位整数,我们可以通过ping查看电脑的子网掩码,表示形式与IP地址一样。

如图所示:站在二进制角度看左侧有几位1,对应的的IP地址的那些位就是网络号。
在这里插入图片描述

以上则表示IP地址前24位都为网络号,剩下的为主机号,一般家用网络子网掩码一般为:255.255.255.0

** 一些特殊的IP地址:**

  1. 将IP地址中的主机地址全部设为0,如:192.168.0.0;成为了网络号,代表这个局域网。
  2. 将IP地址中的主机地址全部设为1,如:192.168.0.255;就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。通常适用于不知道对方IP地址需要探测的情况下
  3. 127.* 的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。环回IP对应特殊的虚拟网卡,传输数据时没有IO操作,纯内存操作,所以比一般普通IP传输数据要快。
  4. 主机号为1,如192.168.0.1,一般作为网关IP(并不绝对),是局域网的出入口。

4. IP协议的路由选择

路由器是不能将整个网络环境都记录下来的,只能记录周围的情况。
所以我们在进行传数据时,就是一跳一跳(Hop by Hop)“问路”的过程。所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

IP数据包的传输过程中会遇到很多路由器,这些路由器会帮助数据包进行路由转发,每当数据包遇到一个路由器后,对应路由器都会查看该数据的目的IP地址,并告知该数据下一跳应该往哪跳。

路由器的查找结果可能有以下三种

  1. 路由器经过路由表查询后,得知该数据下一跳应该跳到哪一个子网。
  2. 路由器经过路由表查询后,没有发现匹配的子网,此时路由器会将该数据转发给默认路由(更高一级的路由器记录着更多的数据可以查询)。
  3. 路由器经过路由表查询后,得知该数据的目标网络就是当前所在的网络,此时路由器就会将该数据转给当前网络中对应的主机。

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

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

相关文章

华为OD机试真题 Java 实现【不爱施肥的小布】【2023Q2】

一、题目描述 某农村主管理了一大片果园,fields[i]表示不同国林的面积,单位m2,现在要为所有的果林施肥且必须在n天之内完成,否则影响收成。小布是国林的工作人员,他每次选择一片果林进行施肥,且一片国林施…

【Linux初阶】环境变量 | 如何设置、获取环境变量?

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:讨论为什么指令作为一个可执行程序不需要加 ./运行;环境变量为什么会自己恢复;环境变量…

Acwing456. 车站分级

一条单向的铁路线上,依次有编号为 1, 2, …, n的 n 个火车站。 每个火车站都有一个级别,最低为 1 级。 现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车站 xx,则始发站、终点站之间…

【网络】-- 数据链路层

应用层(http、https): 数据的使用。传输层(UDP、TCP):网络通讯的细节,将数据可靠的从A主机跨网络送到B主机。网络层(IP):提供一种能力,将数据从A主…

Real-ESRGAN:Training Real-World Blind Super-Resolution with Pure Synthetic Data

https://github.com/NightmareAI/Real-ESRGAN/tree/masterhttps://github.com/NightmareAI/Real-ESRGAN/tree/master从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程 - 知乎超分辨率技术(Super-Resolution, SR)是指从观测到的低分辨率…

设计模式MVC、MVP、MVVM

MVC、MVP和MVVM是什么? MVC:Model-View-Controller,是一种分层解偶的框架,Model层提供本地数据和网络请求,View层处理视图,Controller处理逻辑,存在问题是Controller层和View层的划分不明显&am…

SpringBoot+@Validate+全局异常拦截实现自定义规则参数校验(校验get请求参数不能为空且在指定枚举类型中)

场景 SpringBootValidated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel数据并校验为例: SpringBootValidated实现参数验证(非空、类型、范围、格式等)-若依前后端导入Excel数据并校验为例_validated 怎么设置boolean类型非空_霸道流氓气质的博客-…

Elasticsearch02

目录 Elasticsearch02DSL查询文档查询所有全文检索查询精确查询地理查询复合查询 搜索结果处理排序分页高亮 DSL总结RestClient查询文档快速入门:match_all查询match查询精确查询布尔查询排序、分页高亮 实战案例HotelControllerIHotelServiceHotelMapperHotelHotelDocPageResu…

Google SEO优化的10大误区

以下是 Google SEO 优化的十大误区: 1、关键词堆砌: 过度使用关键词,使得内容不自然,难以阅读,同时也会被搜索引擎认为是垃圾信息,影响网站排名。 2、内容质量差: 质量差的内容会降低用户的体…

矩池云上配置FusionGan环境

1、租赁环境 2、vscode 连接 矩池云 教程:https://www.matpool.com/supports/doc-vscode-connect-matpool/ 3、进入mnt文件夹 cd ../mnt 4、克隆代码 git clone https://github.com/jiayi-ma/FusionGAN.git 如果克隆不下来,就自己下载,…

ESP32 DW1000 UWB 室内定位系统

相关软件代码下载》》 概述 在这个项目中,我们将制作一个基于 ESP32 DW1000 UWB 的室内定位系统。为此,我们将使用 2 个 UWB 锚点和 1 个 UWB 标签。当标签移动时,UWB 标签的实时位置可以使用Python 程序在PC 上以图形方式显示。 工业环境中的室内跟踪通常需要非常精确的…

C++引用的相关定义以及使用场景与指针之前的区别

一、引用的定义与特性 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 引用的特性: 引用在定义时必须初始化一个变量可以有多个引用引用一旦引用…

电脑技巧:宽带怎么设置教程笔记,看完你就会了

宽带的设置是指将计算机连接到互联网的过程。一般来说,宽带的设置是非常简单的,只需要按照提供商的要求,正确地连接硬件和软件就可以了。下面将详细介绍如何设置宽带。 硬件设置:首先,需要连接计算机和调制解调器&…

sharding-jdbc读写分离实战

一、读写分离介绍 Sharding-JDBC读写分离则是根据SQL语义的分析,将读操作和写操作分别路由至主库与从库。它提供透明化读写分离,让使用方尽量像使用一个数据库一样使用主从数据库集群。 为了实现Sharding-JDBC的读写分离,首先,要…

Leetcode2404. 出现最频繁的偶数元素

Every day a Leetcode 题目来源&#xff1a;2404. 出现最频繁的偶数元素 解法1&#xff1a;哈希 我们构建一个这样的哈希表 unordered_map<int, int> umap&#xff1a; key&#xff1a;偶数数组元素 nums[i]value&#xff1a;nums[i]的出现次数 count 我们遍历一次数…

算法之路--快速排序算法

由于冒泡算法算法之路--冒泡算法&#xff08;算法之路--冒泡算法&#xff09;每轮都要进行从头到落位之前的每个元素的比较&#xff0c;在执行效率上需要提升&#xff0c;快速排序算法就是对冒泡算法的一种效率上的提升。 算法思路 快速排序是基于冒泡的改进&#xff0c;所以基…

力扣回溯算法专题(二)- 切割 子集问题 131.分割回文串、93. 复原IP地址、78. 子集、90. 子集Ⅱ、491.递增子序列 思路 C++实现 总结

文章目录 切割问题子集问题回溯法模板与伪代码131. 分割回文串三要素及思路回文字符串判断代码 93. 复原IP地址三要素及思路验证子串是否合法代码 78. 子集三要素及思路代码 90. 子集Ⅱ三要素及思路三种去重方式代码 491.递增子序列三要素及思路去重方式及去重优化代码 总结1. …

Django框架004:orm对mysql的增删改查

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

TypeScript 配置简述

TypeScript 配置简述 初始化项目的过程为&#xff1a; 新建一个项目 这里使用 yarn init -y 去创建一个 node 项目&#xff0c;随后使用 yarn add typescript 下载 TS 的依赖 新建一个 ts 文件 console.log(test);随意 log 一点东西进行测试 使用 tsc 编译 ts 文件 ❯ yarn …

为什么国外资深的软件测试多是手动测试,但在国内,都推崇自动化测试?

将自动化测试当成很了不起的资本&#xff0c;源于国内对Coding的崇拜 譬如一个Dev跟一个QA放在一起&#xff0c;大家的第一直观印象就是——前者的技术能力比较强。 实际上&#xff0c;这个问题分两面看&#xff1a; 自动化测试能力是不是资本&#xff1f; 当然是。 测试自动…