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

网络层协议——ip

在这里插入图片描述

文章目录

  • 1. 网络层
  • 2. IP协议
    • 2.1 协议头格式
  • 3. 网段划分
    • 3.1 特殊的IP地址
    • 3.2 IP地址的数量限制
  • 4. 私有IP地址和公网IP地址

1. 网络层

在应用层解决了如何读取完整报文、序列化反序列化、协议处理问题。在传输层解决了可靠性问题。那么网络层IP的作用是在复杂的网络环境中确定一个合适的路径,将数据从A主机送到B主机。

2. IP协议

在这里插入图片描述
主机:配有IP地址,但是不进行路由控制的设备。
路由器:即配有IP地址,又能进行路由控制。
节点:主机和路由器的统称。

2.1 协议头格式

在这里插入图片描述
4位版本号(version):指定IP协议的版本,对于IPv4来说就是4

4位头部长度: IP头部的长度是多少个32bit,也就是 length * 4 的字节数,4bit表示最大的数字是15,因此IP头部最大长度是60字节。这里和TCP报头理解是一样的

8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要。对于ftp这样的程序,最大吞吐量比较重要。不过这个一般不用了。

16位总长度:IP数据报整体占多少个字节

16位头部校验和: 使用CRC进行校验,来鉴别头部是否损坏。

32位源地址和32位目标地址:表示发送端和接收端。

那么IP协议如何给上层进行分用呢?是交付给TCP还是UDP呢
在报头中,有8位协议: 表示上层协议的类型

如果由于网络的BUG或者对端主机不可达等不可控因素的存在,导致IP报文在网络中长时间游离,而不消失。该怎么办呢
8位生存时间:数据报到达目的地的最大报文跳数。一般是64,每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环

我们要知道:数据在网络层后还需要传给数据链路层,但是数据链路层有个规定:为了减小传输时的碰撞,它单次发送的有效载荷是有限制的。所以就有了IP分片的问题

需要对IP进行分片,是由谁来做
是由发送方的网络层来做的。

全部收到之后,是由谁来组装呢
是由对方的网络层进行组装。

如何进行组装呢
16位标识(id):唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的
也就是说,一个IP报文它的16位标识是1234,如果被分片成3份,那么每份的报文的报头里的16位标识都是1234。

第一点我们要知道的是:我们要识别某个报文的分片的,还是没有分片的
3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片。这时候如果报文长度超过最大限制,IP模块就会丢弃报文。第三位表示"更多分片", 如果分片了的话,最后一个分片置为0,其它是1。类似于一个结束标记

13位分片偏移:是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其它报文的长度必须是8的整数倍(否则报文就不连续了)

根据这两个标记位,只要更多分片是1或者更多分片为0但是偏移量不为0。只要满足这两点就说明报文被分片过

第二点我们要将序号相同的报文收集到一起
我们如何判断我们收集的报文被收全了呢
根据偏移量,偏移量为0就是开头,然后下一个报文=上一个报文偏移量+上一个报文自身长度,这样就能判断有没有缺失的了。

第三点我们要正确的把分片报文组装起来
这里就根据偏移量进行排序,然后组装就行了。

如何进行分片呢
分片之后,每一个分片也是一个独立的IP报文,也要有报头

举个例子
假设传输层有2980个字节要传给网络层,网络层加上报头就是3000字节,但单次传输的上限是1500,那么网络层就需要分片。

这个例子,我们最少要分片成3份:
第一份:20+1480=1500
第二份:20+1480=1500
注意:分片下来的报文每个都需要添加自己的报头。
两个1480是2960,因为发送的有效载荷的大小是2980,所以还差20字节。那么第三份:20+20=40。这样才是正确的分片。

但是无论是发送方还是接收方,分片和组装行为,双方的传输层是不知道的,它只关系完整的一个报文
假设一个报文传输的丢包概率是1%,但是我们进行了分片,分成了3份,如果有一份丢失,就说明了整个报文丢失,那么丢包的概率就大大增加。其实网络层进行分片,不是主流的。

那么分片对UDP和TCP有影响吗
当然有影响,但是TCP有可靠性,可以重传,但UDP的影响就大大增加了。所以,我们可以进行设置不进行分片

那么如何减少分片呢
其实网络层不能决定分片还是不分片,这是由传输层决定的。网络层只是负责这个工作。一般在三次握手的时候,就会协商单次传输数据的报文大小。

那么传输层单个报文的大小一般设置成为多少合适呢

3. 网段划分

IP的构成:ip=目的网络+目的主机
网络号:保证相互连接的两个网段具有不同的标识。
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

IP在路由的时候,先根据目的网络进行路由,找到目的网络之后,再根据目的主机的主机号,进行数据转发。

所以,子网划分的作用是为了提高查找目标主机的效率

过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类
在这里插入图片描述
随着Internet的飞速发展,这种划分方案的局限性很快显现出来:例如申请了一个B类地址,理论上一个子网内能允许6万5千多个主机,A类地址的子网内的主机数更多。然而实际网络架设中不会存在一个子网内有这么多的情况,因此大量的IP地址都被浪费掉了。

针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing)

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号。
子网掩码也是一个32位的正整数,通常用一串 “0” 来结尾。
将IP地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

下面举两个例子
在这里插入图片描述
IP地址与子网掩码做按位与运算可以得到网络号,主机号从全0到全1就是子网的地址范围
IP地址和子网掩码还有一种更简洁的表示方法。例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0

3.1 特殊的IP地址

1. 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
2. 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
3. 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。

3.2 IP地址的数量限制

我们知道: IP地址(IPv4)是一个4字节32位的正整数,那么一共只有2的32次方个IP地址,大概是43亿左右。而TCP/IP协议规定:每个主机都需要有一个IP地址。

难道一共只有43亿台主机能接入网络吗?
并且由于一些特殊的IP地址的存在,数量远不足43亿,另外IP地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址。CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加),仍然不是很够用。这时候有三种方式:
1.动态分配IP地址: 只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的。
2.IPv6: IPv6并不是IPv4的简单升级版,这是互不相干的两个协议,彼此并不兼容,IPv6用16字节128位来表示一个IP地址。但是目前IPv6还没有普及

前面两种方法都不能很好的解决问题,但还有个NAT技术能解决这个问题。

4. 私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址:
10.,前8位是网络号,共16,777,216个地址。
172.16.到172.31.,前12位是网络号,共1,048,576个地址。
192.168.,前16位是网络号,共65,536个地址

包含在这个范围中的都成为私有IP,其余的则称为全局IP(或公网IP)。

在这里插入图片描述
一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)。路由器LAN口连接的主机,都从属于当前这个路由器的子网中
所以,家用路由器和运营商路由器除了可以进行IP报文转发之外,还可以构建子网
那么当我们家里用的主机发送消息通过运营商路由器发送到公网,然后它需要给我们响应,那么响应的是我们家里的私有IP吗?前面我们说过,私网IP是不能出现在公网上的。因为家用路由器的子网IP是可以一样的

那么发送到公网的消息流程如下
我们要从家里主机发送到公网,那么假设开始IP是:192.168.1.201,目的IP是:122.77.241.3。首先会发送到家用路由器,它会发现我们发送的数据不在家用路由器的子网内,就会把开始IP是:192.168.1.201,替换成家用路由器的WAN口IP:10.1.1.2,然后发送到运营商路由器,它也能发现我们发送的数据不在运营商路由器的子网内,会被开始IP:10.1.1.2替换成运营商路由器的WAN口IP:122.77.241.4,由此就可以访问公网IP了。

子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP这种技术称为NAT(Network Address Translation 网络地址转换)

那么公网怎么把响应发给我们呢
这个后面再说。

相关文章:

网络层协议——ip

文章目录 1. 网络层2. IP协议2.1 协议头格式 3. 网段划分3.1 特殊的IP地址3.2 IP地址的数量限制 4. 私有IP地址和公网IP地址 1. 网络层 在应用层解决了如何读取完整报文、序列化反序列化、协议处理问题。在传输层解决了可靠性问题。那么网络层IP的作用是在复杂的网络环境中确定…...

Qt6和Rust结合构建桌面应用

桌面应用程序是原生的、快速的、安全的,并提供Web应用程序无法比拟的体验。 Rust 是一种低级静态类型多范式编程语言,专注于安全性和性能,解决了 C/C 长期以来一直在努力解决的问题,例如内存错误和构建并发程序。 在桌面应用程序开…...

Kubernetes(K8S)简介

Kubernetes (K8S) 是什么 它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项…...

面试中问:React中函数组件和class组件的区别,hooks模拟生命周期

React中函数组件和class组件的区别,hooks模拟生命周期 React中函数组件和class组件的区别hooks模拟生命周期 React中函数组件和class组件的区别 函数组件: 定义:函数组件是使用纯函数定义的组件,它接受 props 作为参数并返回 JSX。简洁性&am…...

Python高光谱遥感数据处理与高光谱遥感机器学习方法应用

本文提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇以学员为中心,用通俗易懂的语言解释高光谱的基本概念和理论,旨在帮助学员深入理解科学原理。方法篇结合Python编程工具,专注…...

Java实现接收xml格式数据并解析,返回xml格式数据

需求描述&#xff1a;后端接受xml格式数据&#xff0c;解析出相应数据&#xff0c;并返回xml格式数据。 <!--XML解析--><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId>…...

【C++】初步认识模板

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录 前言一、泛型编程二、函数模板2.1 函…...

Ansible 临时命令搭建安装仓库

创建一个名为/ansible/yum.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库. 存储库1&#xff1a; 存储库的名称为 EX294_BASE 描述为 EX294 base software 基础 URL 为 http://content/rhel8.0/x86_64/dvd/BaseOS GPG 签名检查为…...

phpstorm动态调试

首先在phpstudy搭建好网站&#xff0c;在管理拓展开启xdebug拓展 查看php.ini配置已经更改 需要增添修改一下设置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_trace…...

二叉树的层序遍历及完全二叉树的判断

文章目录 1.二叉树层序遍历 2.完全二叉树的判断 文章内容 1.二叉树层序遍历 二叉树的层序遍历需要一个队列来帮助实现。 我们在队列中存储的是节点的地址&#xff0c;所以我们要对队列结构体的数据域重定义&#xff0c; 以上代码 从逻辑上来讲就是1入队&#xff0c;1出队&am…...

java八股文面试[JVM]——JVM内存结构

参考&#xff1a; JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 JVM是运行在操作系统之上的&#xff0c;它与硬件没有直接的交互 JVM内存结构&#xff1a; 方法区&#xff1a;存储已被虚拟机加载的类元数据信息(元空间) 堆&#xff1a;存放对象实…...

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…...

【目标检测】理论篇(2)YOLOv3网络构架及其代码实现

网络构架图&#xff1a; 代码实现&#xff1a; import math from collections import OrderedDictimport torch.nn as nn#---------------------------------------------------------------------# # 残差结构 # 利用一个1x1卷积下降通道数&#xff0c;然后利用一个3x3卷…...

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放&#xff08;Proportional Scaling&#xff09;2.3.2、HPA&#xff08;动态扩缩容&#xff09;2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…...

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …...

Docker 容器学习笔记

Docker 容器学习笔记 容器的由来 早先&#xff0c;虚拟机通过操作系统实现相互隔离&#xff0c;保证应用程序在运行时相互独立&#xff0c;避免相互干扰。但是操作系统又笨又重&#xff0c;耗费资源严重&#xff1a; 容器技术只隔离应用程序的运行时环境但容器之间共享同一个…...

Day03-vue基础

Day03-vue基础 一 列表渲染 v-for这个指令可以实现列表渲染 1 数组 <ul><!-- v-for遍历的时候,key必须赋唯一值第一个参数是数组元素,第二个参数是元素下标--><li v-for="(item,index) in [1,3,5,7]" :key="item">{{item}}--{{index}…...

RAC sid=‘*‘ 最好加上 v$system_parameter

实验结论&#xff1a;在RAC环境中&#xff0c;最好修改参数sid* 安全可靠&#xff0c;因为暂时未明确知道哪些参数是默认全局修改&#xff0c;什么参数是默认单节点修改的&#xff0c;* 靠谱&#xff0c;不容易出问题 在RAC环境中&#xff0c;修改全局参数scopespfile生效时&am…...

【位运算进阶之----左移(<<)】

今天我们来谈谈左移这件事。 ❤️简单来说&#xff0c;对一个数左移就是在其的二进制表达末尾添0。左移一位添一个0&#xff0c;结果就是乘以2&#xff1b;左移两位添两个0&#xff0c;结果就乘以2 ^ 2&#xff1b;左移n位添n个0&#xff0c;结果就是乘以2 ^ n&#xff0c;小心…...

石油石化行业网络监控运维方案,全局态势感知,实时预警

石油石化行业是一个高科技密集型行业&#xff0c;投资巨大、人员众多&#xff0c;各产业价值链的关联度较高&#xff0c;大型石油石化企业实现了上中下游产业的一体化协同发展。随着工业4.0时代的来临&#xff0c;信息化和工业化融合&#xff0c;物联网、云计算等新技术的普及推…...

MyBatis 的关联关系配置 一对多,一对一,多对多 关系的映射处理

目录 一.关联关系配置的好处 二. 导入数据库表&#xff1a; 三. 一对多关系&#xff1a;-- 一个订单对应多个订单项 四.一对一关系&#xff1a;---一个订单项对应一个订单 五.多对多关系&#xff08;两个一对多&#xff09; 一.关联关系配置的好处 MyBatis是一…...

Diffusion Models for Image Restoration and Enhancement – A Comprehensive Survey

图像恢复与增强的扩散模型综述 论文链接&#xff1a;https://arxiv.org/abs/2308.09388 项目地址&#xff1a;https://github.com/lixinustc/Awesome-diffusion-model-for-image-processing/ Abstract 图像恢复(IR)一直是低水平视觉领域不可或缺的一项具有挑战性的任务&…...

Springboot开发所遇问题(持续更新)

SpringBoot特征&#xff1a; 1. SpringBoot Starter&#xff1a;他将常用的依赖分组进行了整合&#xff0c;将其合并到一个依赖中&#xff0c;这样就可以一次性添加到项目的Maven或Gradle构建中。 2,使编码变得简单&#xff0c;SpringBoot采用 JavaConfig的方式对Spring进行配置…...

智能电视与win10电脑后续无法实现DLNA屏幕共享

问题背景&#xff1a; 我用的是TCL电视&#xff0c;但是并不是最新&#xff0c;打开的方式是U盘->电脑&#xff0c;各位看自己情况&#xff0c;很多问题都大概率是智能电视问题。 情景假设&#xff1a; 假设你已经完成原先智能电视该有的步骤&#xff0c;通过DLNA&#xf…...

如何可以管理监督员工工作微信?

自从微信管理系统研发上线之后&#xff0c;为了各企业带来了福音。 很多用户企业都是这样评论微信管理系统的&#xff1a;员工的所有微信聊天记录后台都可以清楚明了的看到&#xff0c;聊天记录都是永久保存的&#xff0c;不担心员工在手机上把聊天记录删除&#xff0c;杜绝员…...

【Django】如何转化已有的数据表到Django模型--20230823

初步生成model.py $ python manage.py inspectdb $ python manage.py inspectdb > models.py python manage.py inspectdb # This is an auto-generated Django model module. # Youll have to do the following manually to clean this up: # * Rearrange models order…...

【C语言】喝汽水问题

大家好&#xff01;今天我们来学习C语言中的喝汽水问题&#xff01; 目录 1. 题目内容&#xff1a; 2. 思路分析 2.1 方法一 2.2 方法二 2.3 方法三 3. 代码实现 3.1 方法一 3.2 方法二 3.3 方法三 1. 题目内容 喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以…...

项目进度管理(4-2)关键链法和关键路径法的区别和联系

1 关键链法和关键路径法的主要区别 1.1 关键链法和关键路径法的关注焦点不同 关键路径法&#xff08;CPM&#xff09;&#xff1a;关注项目中最长的路径&#xff0c;也就是所需时间最长的路径&#xff0c;这被称为关键路径。关键路径决定了项目的最早完成时间。关键链法&…...

基于Java+SpringBoot+Vue前后端分离医院后台管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

二维数组传参

在C语言中&#xff0c;可以通过指针来传递二维数组。二维数组实际上是一个连续的内存块&#xff0c;可以使用指针来表示二维数组的行和列。以下是一个示例&#xff1a; #include <stdio.h>void myFunction(int arr[][3], int rows) {for (int i 0; i < rows; i) {fo…...

php python WordPress/长沙市seo百度关键词

如何实现VR效果图 源码地址https://mp.csdn.net/console/upDetailed 这个是关于小程序的全景图...

最牛的视频网站建设/软文营销的作用有哪些

http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html 在C的STL库中&#xff0c;要实现排序可以 通过将所有元素保存到vector中&#xff0c;然后通过sort算法来排序&#xff0c;也可以通过multimap实现在插入元素的…...

温州优化网站/刘雯每日资讯

IEC62087音视频类设备功耗测量方法&#xff1b;南非偏差&#xff1a;SANS 941 2009年7月23日&#xff0c;欧委会在其官方公报&#xff08;OJ&#xff09;上公布了ErP的电视机实施条例(EC) No 642/2009&#xff0c;并于2009年8月12日开始生效。该条例主要 规定了电视机的生态设计…...

网站公众号信息化建设工作计划/竞价排名采用什么计费方式

1.RLC电路 特征方程&#xff1a; s2 (R/L) s 1/LC 0 (s2 2αs ω20 0) 振荡频率&#xff1a; wd √ (ω20 - α2) α代表了阻尼 品质因数&#xff1a; Q ω0/ 2α Q代表经过多少周期后震荡停止 2.电容电压先上升还是下降&#xff1f; 下降&#xff0c;因为电感的…...

品牌网站建设有那两种模式/游戏推广公司靠谱吗

【转载1】 系统管理员经常需要远程登录服务器然后在服务器上跑一些程序有个时候得跑很长时间&#xff08;超过12小时&#xff09;这是如果程序没结束就退出远程管理终端远程跑的程序很有可能就此当掉以前常用的解决方式是用命令nohup但是nohup也有很多的问题当有了screen这一切…...

西安学校网站建设哪家好/软文营销文章案例

1.函数基本语法及特性 什么是函数&#xff1f; 函数这个名词源于数学&#xff0c;是由莱布尼兹在1694年开始使用的。而我们这里讲的函数与数学中的函数区别还是很大的&#xff0c;这里我们就不多加赘述了。 定义&#xff1a; 函数是指一段在一起的、可以做某一件事儿的程序。也…...