【计算机网络】网络层——详解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地址来进行路由的选择。

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

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

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

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

在这里插入图片描述

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

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

相关文章

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…

华为端口安全常用3种方法配置案例

安全动态mac地址学习功能 [Huawei]int g0/0/01 interface GigabitEthernet0/0/1 port-security enable //开启安全 port-security max-mac-num 2 //最多为2个mac地址学习 port-security protect-action restrict //丢包带警告 port-security aging-time 1 //mac地址的老化时间…

FFmpeg连载6-音频重采样

今天我们的实战内容是将音频解码成PCM,并将PCM重采样成特定的采样率,然后输出到本地文件进行播放。 什么是重采样? 所谓重采样,一句话总结就是改变音频的三元素,也就是通过重采样改变音频的采样率、采样格式或者声道数…

Github 2024-01-16 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-01-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10HTML项目1 精心策划的Python资源列表 创建周期:3490 天开发语言:Python…

在 ASP.NET Core Web API 中使用异常筛选器捕获和统一处理异常

前言 在 ASP.NET Core Web API 中,异常筛选器(Exception Filter)是一种用于处理发生在 Web API 控制器或管道中的异常的机制。 异常筛选器可以捕获和处理应用程序中发生的异常,当系统中出现未经处理的异常的时候,异常…

小程序基础学习(事件处理)

原理&#xff1a;组件内部设置点击事件&#xff0c;然后冒泡到页面捕获点击事件 在组件内部设置点击事件 处理点击事件&#xff0c;并告诉页面 页面捕获点击事件 页面处理点击事件 组件代码 <!--components/my-info/my-info.wxml--> <view class"title"…

基于Springboot的网上点餐系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的网上点餐系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&am…

docker-compose和docker compose的区别

在docker实际使用中&#xff0c;经常会搭配Compose&#xff0c;用来定义和运行多个 Docker 容器。使用时会发现&#xff0c;有时候的指令是docker-compose&#xff0c;有时候是docker compose&#xff0c;下面给出解释。 docker官方文档&#xff1a;https://docs.docker.com/c…

iphone 5s的充电时序原理图纸,iPAD充电讲解

上一篇写了iphone 5的时序。那是电池供电的开机时序。iphone 5s也是差不多的过程&#xff0c;不说了。现在看iphone5s手机充电时候的时序。iphone5s充电比iphone5充电简单了很多。 首先是usb接口接到手机上&#xff0c;usb线连接到J7接口上。J7接口不只是接usb&#xff0c;还能…

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

RCE但是没有完全RCE wp 题目代码&#xff1a; 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[m…

IntelliJ IDEA使用学习

一、安装教程 网上自行下载&#xff0c;CSDN不然过审二、使用教程 2.1 快捷键操作与设置 设置 Setting——>按键映射——>选择顺手的系统快捷键 编写代码 CtrlShift Enter&#xff0c;语句完成。 “&#xff01;”&#xff0c;否定完成&#xff0c;输入表达式时按 …

现代控制理论基础

在学习卡尔曼滤波、粒子滤波、隐马尔可夫模型时候&#xff0c;经常会提到状态方程的概念&#xff0c;这边联想到当时学习过的一门课程现代控制理论&#xff0c;这边就简单回顾一下吧。在回顾之前&#xff0c;串联下高等数学中微分方程的知识点。 一. 微分方程 高等数学上册第…

C++ 最短路总结 朴素Dijkstra算法 || 模版题,求最短路

算法选择&#xff1a; 稠密图用邻接矩阵写&#xff0c;稀疏图用邻接表写。 朴素dijkstra&#xff1a; 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点…

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…

认识监控系统zabbix

利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控数据 ●可以回溯寻找事故发生时系统的问题和报警情况 了解zabbix zabbix是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布…

Android Studio下载gradle反复失败

我的版本&#xff1a;gradle-5.1.1 首先检查设置路径是否正确&#xff0c;参考我的修改&#xff01; 解决方案 1.手动下载Gradle.bin Gradle Distributions 下载地址 注意根据编译器提示下载&#xff0c;我这要求下载的是bin 而不是all 2.把下载好的整个压缩包放在C:\Users\…

uni-app的学习【第三节】

五 运行环境判断与跨端兼容 uniapp为开发者提供了一系列基础组件,类似HTML里的基础标签元素,但uni-app的组件与HTML不同,而是与小程序相同,更适合手机端使用。 虽然不推荐使用 HTML 标签,但实际上如果开发者写了`div`等标签,在编译到非H5平台时也会被编译器转换为 `view`…

学习JavaEE的日子 day12 构造方法 类的制作

Day12 需求&#xff1a;创建人类的对象&#xff0c;并操作对象 分析&#xff1a; 人类 - Person 属性&#xff1a;name、sex、age 方法&#xff1a;eat、sleep 场景&#xff1a;创建多个对象&#xff0c;去操作对象 //测试类&#xff1a;该类中有main方法&#xff0c;测试我们写…

Elasticsearch的基本功能和使用

Elasticsearch &#xff0c;简称为 ES&#xff0c;是一款非常强大的开源的高扩展的分布式全文 检索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容,它可以近乎实时的 存储、检索数据.还可以可以实现日志统计、分析、系统监控等功能. 官网:https://www.elastic.c…

Spark SQL基础

SparkSQL基本介绍 什么是Spark SQL Spark SQL是Spark多种组件中其中一个,主要是用于处理大规模的结构化数据 什么是结构化数据: 一份数据, 每一行都有固定的列, 每一列的类型都是一致的 我们将这样的数据称为结构化的数据 例如: mysql的表数据 1 张三 20 2 李四 15 3 王五 1…