当前位置: 首页 > news >正文

【计算机网络】网络层——详解IP协议

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【网络编程】
本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌

目录

  • 🐱一、IP协议介绍
    • 🐟IP协议报文结构
    • 🐟NAT机制
  • 🐱二、IPv6
  • 🐱三、IP地址组成
  • 🐱四、特殊的ip地址
  • 🐱五、子网掩码
  • 🐱六、路由转发

🐱一、IP协议介绍

🐟IP协议报文结构

在这里插入图片描述

  • 四位版本号:用来表示IP协议的版本,现有的IP协议只有两个版本,一个是IPv4,另一个是IPv6。
  • 四位首部长度:告诉接收方在IP数据报中如何找到数据部分的起始点。通过首部长度字段,接收方可以确定数据部分在IP数据报中的位置,从而正确解析和处理IP数据报。IP报头是可变长的,同时也是IP报头是有选项的
  • 八位服务类型(TOS):八位服务类型其实只有4位是有效。支持模式切换(或称为状态切换的)。下面是使用的4种齐爱。
  • 最小延时:传输一个数据报的时间要尽可能短
  • 最大吞吐量:一定时间内传输的数据要多。
  • 最高可靠性:在传输过程中最不容易发生丢包。
  • 最低成本:在传输过程中消耗的硬件资源最低。
    四种形态种只能切换到一种前台
  • 16位总长度

注意这里的关系:这里的16位总长度 = IP报头 + 载荷的长度总长度 - IP报头长度 = 载荷长度(此载荷长度就是TCP报文总长度)TCP报文总长度 - TCP报头长度 = TCP载荷长度

IP协议支持拆包组包的机制,16位总长度(即64kb)针对的是一个数据报,如果是携带的是较长的数据的话,IP协议就会自动地把一个数据包拆分成多个数据报,接收方在进行分用的时候也会把多个数据报合并成一个数据报。

IP协议报文中的16位标识、3位标志位、13位片偏移共同描述了整个IP数据报的拆包组包的过程。
当需要传输的数据超过了网络的最大传输单元(Maximum Transmission Unit,MTU)时,就会触发拆包操作。MTU是指在网络中一次可传输的最大数据包大小。如果需要传输的数据超过了MTU,就需要将数据拆分成多个较小的IP数据报进行传输。
每个IP数据报都有自己的IP报头,包含了源IP地址、目标IP地址、协议类型等信息。而数据报的负载部分(即携带的实际数据)可能属于其他协议,例如TCP或UDP。
对于TCP协议,它会将需要传输的数据进行分段(Segmentation)的操作。TCP会将较长的数据分割成多个较小的TCP数据段(TCP segment),每个TCP数据段都包含TCP报头和对应的数据部分。
这样,当一个较长的TCP数据报需要在IP网络中传输时,它会被分成多个较小的IP数据报,每个IP数据报携带一个TCP数据段。这些小的IP数据报独立传输,通过IP协议的机制在网络中按顺序重新组合,最终将数据传输到目标设备的TCP协议中进行再次组装,以还原原始的较长TCP数据报。
需要注意的是,拆包和重组操作是由网络设备(如路由器)负责的,IP协议只负责将数据报进行传输,并不负责分段和重组的具体操作。

在这里插入图片描述

  • 16位标识:拆除的这多个包的16位标识是相同的。
  • 13位片偏移:拆除的这多个包的13位片偏移是不同的,前一个包的片偏移更小,后一个反之更大,通过片偏移就可以区分包的先后顺序。
  • 3位标志位:其中有一位标志位是不变的;有一位表示是否允许拆包,其实这里已经拆包了,所以此位标志位都是1;最后一个标志位表示结束标记,表示当前的包是否是最后一个,标志位是零表示是此包是最后一个包。
  • 8位生存时间(TTL):单位是,初始情况下TTL有一个初始数值(32/64/128),数据没经过一个路由器转发TTL就会-1,正常来说TTL足以支持数据报到达网路的任意一个位置,但是如果TTL真的变成0了,此时基本上就可以认为目标IP不可达了。
  • 8位协议:描述了上层,即传输层,使用了哪种协议
  • 16位首部校验和:检验数据是否正确的,这里只需要校验数据报首部即可,因为载荷部分要么是UDP要么是TCP,而TCP、UDP已经校验过自己本身了。
  • 32位源ip地址:32位源IP地址其实就是一个32位的整数(即4字节)。使用点分十进制的方式来进行表示(使用三个.把32位分为4个部分,每个部分都是8位(即1字节),每个字节的范围都是0-255,不带符号)。

这里有一个问题:既然32位源地址ip的数据量非常有限的,大体是42亿九千万,但是实际上全世界能够上网的设备不仅仅只有这些数字。那么IP地址不够用了该如何应对呢?
方式一:DHCP是动态主机配置协议的简称,是一种自动分配IP地址的网络协议。设备如果需要上网的话就需要分配ip,不需要上网就不需要分配ip。使用该方式只能够缓解,但是不能够根治。
方式二:NAT机制(网络地址转换)
另外,IP地址分为两大类:一类是内网ip(对于不同的局域网内的设备ip地址可以重复,对于相同的局域网ip地址不可以重复);另一类是外网ip(外网ip不可以重复)。内网ip一般有三种表示形式:10.*172.16。*-172.31.*192.168.*

🐟NAT机制

  • 情况一:如果是同一个局域网内部的设备之间进行通信,这种情况是没有问题的(因为同一个局域网内的内网ip是唯一的)。

  • 情况二:A局域网中的设备想和B局域网中的设备进行通信,由于这是两个不同的局域网中的不同设备,所以这两个设备的ip很有可能是相同的,这种情况是不允许的,会被直接禁止掉。两个局域网内部的设备是没法进行通信的

  • 虽然两个局域网内部的设备没法直接进行通信,但是可以间接进行通信,这个时候需要局域网内部的设备访问带有外网ip的设备。举个例子:我们平常使用的手机、平板都是在局域网内部去进行使用,它们都有一个自己的内网ip;还有一类设备就是服务器,服务器的话可以有外网ip,这样的话就涉及到NAT的工作过程了。

我们通过画图来进行举例:
在这里插入图片描述
在这里插入图片描述
上述的操作我们可以简单理解为借花献佛,意义何在呢?NAT机制下,一个外网ip代表的不一定是一个设备,也有可能是很多个设备。
接下QQ服务器要返回响应,返回的响应依旧是一个IP数据报:
在这里插入图片描述
接下来QQ服务器开始返回响应(返回的响应依旧是应给IP数据报):
在这里插入图片描述
此时,电信路由器和电脑之间就属于是局域网内部之间的通信了。

好了,上述的NAT过程是一个简化版本的,实际上,数据每经过一个路由器转发都可能会触发NAT机制(这和路由器的配置有关,有的模式下就会触发,有的模式就不会触发),比如说数据经过学校路由器就会触发NAT机制,经过光猫路由器就会触发NAT机制。

在这里插入图片描述

NAT机制的缺点:效率低、使用起来非常繁琐,还有一点就是不方便直接访问局域网内的设备。但是尽管这个NAT机制有如上的缺点,但是整个互联网世界其实就是利用NAT机制构建出来的。NAT机制可以提高IP地址的利用率,但是没有从根本上解决IP地址数量上的问题(即ip地址不够用)。NAT机制最大的优点就是NAT机制是一个纯软件实现的一个方案,

🐱二、IPv6

IPv6从根本上可以解决IP地址不够的问题。

IPv4是4个字节,即32位来表示ip地址。
IPv6是16个字节,即128位来表示ip地址。
所以,IPv6从根本上解决了ip地址不够使用的问题。

我们要知道,IPv6和IPv4是不兼容的,要想升级IPv6的话就需要更换路由器设备,然而升级IPv6之后其实并不会提高网速,也不会提高流畅性。
相比于IPv6,NAT机制只需要路由器开发商开发出新版本的软件(路由器固件),升级软件之后即可直接支持(同时成本也低)。所以ipv4目前发展的比ipv6要好(至少从目前来看的话,ipv4的普及程度要远远高于ipv6),而ipv6大规模普及的话还需要一定的时间。

🐱三、IP地址组成

ip地址分为两个部分:网络号和主机号。

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

在这里插入图片描述

作为开发者的话,在日常开发中我们不需要知道IP地址是怎么来的,这不是我们该操心的地方,ip地址可以是自动分配的(比如家里的网络环境比较简单),也可以是手动进行分配的(比如说企业的设备,网络环境比较复杂,这个时候就需要网管来进行配置)。

🐱四、特殊的ip地址

  • 网络地址:将ip地址中的主机地址全部设置为0,在通常的网络设置中,将主机地址全部设置为0被称为网络地址。而网络地址用于表示一个网络中的所有设备。例如,如果网络的IP地址范围是192.168.1.0/24,则192.168.1.0被用作网络地址,代表的是整个网络。通常情况下,网络地址不能作为设备的IP地址,因为该地址是用于标识整个网络的。我们不能给具体的设备分配这种ip(ip地址中的主机地址全部设置为0的ip)
  • 广播地址:将ip地址中的主机地址全部设置为1,用于给同一个链路中的所有主机发送数据包。

比如说:192.168.0.255,如果向这个ip上发送数据包,那么这个数据就会被转发给局域网中的所有设备。

在传输层协议中,TCP协议通常不支持广播或多播传输,因为TCP是一种面向连接的协议(TCP无法针对广播地址进行三次握手建立连接的操作),它在建立连接时需要明确的目的地址。而广播或多播是以一组地址为目的地址的通信方式,并不适用于TCP的连接模式。

相反,UDP协议可以用于广播或多播传输,因为UDP是一种无连接的协议,它不需要具体的目的地址。UDP协议的传输方式与广播或多播通信方式是相容的,可以一次性向一组目标地址发送数据。

  • 环回ip:被用于在本地主机中进行通信。环回IP地址被分配为127.0.0.1,也被称为本地回环地址

🐱五、子网掩码

一个ip地址,我们要想分清楚哪一部分是网络号、哪一部分是主机号,这是通过子网掩码(32位二进制位,通常用10进制来进行表示)来进行识别的。子网掩码和ip地址都是4字节,即32位比特位的整数。规定子网掩码左侧必须是连续的1,右侧必须是连续的0

举个例子:一个IP地址为192.168.1.100,子网掩码为255.255.255.0的情况。
子网掩码255.255.255.0对应的32位二进制:11111111.11111111.11111111.00000000,即代表着前24位是网络位,后8位是主机位。
ip地址192.168.1.100对应的32位二进制:11000000.10101000.00000001.01100100
可以确定192.168.1.100的网络位为11000000.10101000.00000001(192.168.1),而主机位为01100100(100)。

🐱六、路由转发

IP协议还有路由转发的功能。在互联网中,数据包通过IP协议进行数据的传输,同时根据目标的IP地址来进行路由的选择。

这里只简单介绍一下什么是路由转发:

每个路由器内部都有一个数据结构即路由表,数据到达路由器的时候就需要查询路由表(目的是询问该数据要到哪里去,从而选择一个方向进行数据的传输)。如果从这个路由表中查询到了,那么就按照这个方向继续传输数据;如果没有查到的话就会按照路由器默认的方向进行数据的转发。

至于说路由器中的路由表是如何生成的,以及路由表是如何来查询数据究竟要往哪个方向走,这里就不做过多的介绍了。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!

在这里插入图片描述

相关文章:

【计算机网络】网络层——详解IP协议

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 目录 🐱一、I…...

【Java数据结构】03-二叉树,树和森林

4 二叉树、树和森林 重点章节,在选择,填空,综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树(Binary Tree) 定义: 二叉树是一种特殊的树结构,其中每个节点…...

Element UI Input组件内容格式化:换行时行首添加圆点

<el-input v-model"input"placeholder"请输入"type"textarea":rows"8"focus"handleFocus"input.native"handleInput" /> 解释一下&#xff1a; Element UI对 input 事件做了一层包装&#xff0c;无法返回…...

十、Qt 操作PDF文件

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …...

开源软件合规风险与开源协议的法律效力

更多内容&#xff1a;​​​​​​OWASP TOP 10 之敏感数据泄露 OWASP TOP 10 之失效的访问控制 ​​​​​​OWASP TOP 10 之失效的身份认证 一、开源软件主要合规风险 1、版权侵权风险 没有履行开源许可证规定的协议导致的版权侵权&#xff0c;例如没有按照许可要求的保留…...

2024全新开发API接口调用管理系统网站源码 附教程

2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发...

[Linux 进程(四)] 再谈环境变量,程序地址空间初识

文章目录 1、前言2、环境变量2.1 main函数第三个参数 -- 环境参数表2.2 本地环境变量和env中的环境变量2.3 配置文件与环境变量的全局性2.4 内建命令与常规命令2.5 环境变量相关的命令 3、程序地址空间 1、前言 上一篇我们讲了环境变量&#xff0c;如果有不明白的先读一下上一…...

【C++】STL(标准模板库)

文章目录 1. 基本概念2. 容器2.1. 容器的分类2.2. vector2.2.1. 构造vector对象2.2.2. vector的赋值 1. 基本概念 STL&#xff08;Standard Template Library&#xff0c;标准模板库)是惠普实验室开发的一系列软件的统称&#xff0c;现在已经成为C标准库的重要组成部分。STL的…...

【已解决】fatal: Authentication failed for ‘https://github.com/.../‘

文章目录 异常原因解决方法 异常原因 在 Linux 服务器上使用git push命令&#xff0c;输入用户名和密码之后&#xff0c;总会显示一个报错&#xff1a; fatal: Authentication failed for https://github.com/TianJiaQi-Code/Linux.git/ # 致命&#xff1a;无法通过验证访问起…...

SqlAlchemy使用教程(二) 入门示例及编程步骤

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 二、入门示例与基本编程步骤 在第一章中提到&#xff0c;Sqlalchemy提供了两套方法来访问数据库&#xff0c;由于Sqlalchemy 官方文档结构有些乱&#xff0c;对于ORM的使用步骤的描…...

HTML+JS+CSS移动端购物车选购界面

代码打包资源下载&#xff1a;【免费】HTMLJSCSS移动端购物车选购界面资源-CSDN文库 关键部分说明&#xff1a; UIGoods 类&#xff1a; 构造函数&#xff1a; 创建 UIGoods 实例时&#xff0c;传入商品数据 g&#xff0c;初始化商品的数据和选择数量。getTotalPrice() 方法…...

微服务治理:为什么要分析微服务的依赖关系?

在微服务架构中&#xff0c;单个服务相互协作以交付功能。这些协作会在服务之间形成依赖关系&#xff0c;其中一个服务依靠另一个服务来完成自己的任务。虽然依赖关系使功能得以实现&#xff0c;但不受控制的依赖关系可能会导致一系列挑战&#xff1a; 复杂性: 错综复杂的依赖…...

【程序员的自我修养—系统调用与API】

系统调用 背景&#xff1a; 为了避免有限的系统资源被多个不同的应用程序同时访问&#xff0c;需要加以保护&#xff0c;避免冲突&#xff1b;提供一套统一的接口&#xff0c;是应用程序能做一些由操作系统支持的行为&#xff1b;接口通过中断的方式实现&#xff0c;Linux使用…...

使用宝塔面板部署后端项目到服务器

文章目录 前言第一步&#xff1a;安装数据库第二步&#xff1a;打包后端项目第三步&#xff1a;配置数据库第四步&#xff1a;部署后端项目第五步&#xff1a;前后端联调测试总结 前言 在之前我已经写了一篇如何去部署前端项目&#xff0c;虽然能访问网站&#xff0c;但是没有…...

走迷宫(c语言)

前言&#xff1a; 制作一个迷宫游戏是一个有趣的编程挑战。首先&#xff0c;我们需要设计一个二维数组来表示迷宫的布局&#xff0c;其中每个元素代表迷宫中的一个格子。我们可以使用不同的值来表示空格、墙壁和起点/终点。接下来&#xff0c;我们需生成迷宫。在生成迷宫的过程…...

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库&#xff1a;跳转 当前分支&#xff1a;05 一、自定义指令 自定义指令是Vue.js框架提供的…...

redis之单线程和多线程

目录 1、redis的发展史 2、redis为什么选择单线程&#xff1f; 3、主线程和Io线程是怎么协作完成请求处理的&#xff1f; 4、IO多路复用 5、开启redis多线程 1、redis的发展史 Redis4.0之前是用的单线程&#xff0c;4.0以后逐渐支持多线程 Redis4.0之前一直采用单线程的主…...

12AOP面向切面编程/GoF之代理模式

先看一个例子&#xff1a; 声明一个接口&#xff1a; // - * / 运算的标准接口! public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j); }实现该接口&#xff1a; package com.sunsplanter.prox…...

【MySQL】数据处理之增删改

文章目录 一、增加&#xff08;插入&#xff09;INSERT INTO...VALUES(...,...)VALUES的方式添加情况一&#xff1a;为表的所有字段按默认顺序插入数据情况二&#xff1a;为表的指定字段插入数据情况三&#xff1a;同时插入多条记录 将查询结果插入到表中 二、修改&#xff08;…...

利用docker的LNMP

目录 服务器环境 任务需求 服务搭建 Nginx Mysql Php 启动 wordpress 服务 服务器环境 容器 操作系统 IP地址 主要软件 nginx CentOS 7 172.20.0.10 Docker-Nginx mysql CentOS 7 172.20.0.20 Docker-Mysql php CentOS 7 172.2…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

raid存储技术

1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划&#xff0c;涵盖存储系统的布局、数据存储策略等&#xff0c;它明确数据如何存储、管理与访问&#xff0c;为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...