计算机网络第4章-IPv4

IPv4数据报格式

IPv4数据报格式如下图所示

其中,有如下的关键字段需要特别注意:

版本(号):

版本字段共4比特,规定了数据报的IP协议版本。通过查看版本号吗,路由器能确定如何解释IP数据报的剩余部分。不同的IP版本使用不同的数据报格式。

首部长度:

因为一个IPv4数据报可包含一些可变数量的选项(这些选项包括在IPv4数据报首部中。)

故需要这4比特来确定IP数据报中载荷实际开始的地方(也就是数据开始的地方,从第几个自己开

始是数据)。大多数的IP数据报中不包含选项,故一般的IP数据报具有20字节的首部。

服务类型:

服务类型(TOS)比特包含在IPv4首部中,以便使不同的IP数据报能够相互区别开来(TCP/UDP)。

数据报长度:

这是IP数据报的总长度(首部加上数据),以字节计算。该字段长为16比特,故IP数据报的最大理论长度为65535(2的16次方-1)。

然而,数据报很少有超过1500字节的。

标识、标志、片偏移:

这三个字段与IP分片有,但是IPv6不允许分片。

寿命(TTL):

该字段用来确定一个数据报在网络中存在的时间,每当一个路由器处理一次该数据报,TLL就减

一,当TTL等于0时,数据报就会被丢弃。

协议:

该字段通常仅当一个IP数据报到达目的地的时候才会有用,该字段指示了IP数据报的数据部分应当

交给哪一个运输层协议。

例如,值为96交给TCP,值为17交给UDP。

首部检验和:

首部检验和用于帮助路由器检测收到的IP数据报中的比特错误。

源和目的IP地址:

当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入最终目的地

的地址。

选项:

选项字段允许IP首部被扩展。

数据(有效载荷):

传输的数据。

IPv4数据报分片

数据报分片的由来

在后面,我们将会知道链路层协议承载的网路层分组的长度是不一样的,我们把一个链路层帧能承

载的最大数据量叫作最大传送单元(MTU)。

因此,我们需要对IP数据报进行合理的切片,以便数据报在任何链路层上都能被运输。

数据报切片的具体过程

现在我们假设,一个端系统接收到了很多个小的切片。

端系统该怎么将这些切片合理的分组并且拼接到一起呢?

IP数据报的标识字段,用来确定那些数据报切片是同一个原始数据报的。

发送主机发送的每一个数据报都会有一个标识,标识是依次加1的。

当某路由器需要对一个数据报切片时,形成的每一个小的数据报都具有相同的源地址和目的地址,

并且具有相同的一个标识,因此标识相同的小数据报就是一个源数据报的。

IP数据报的标志字段,用来确定某个小的数据报切片是某个源数据报切片后生成众多小小数据报的

最后一个。

例如某个数据报被分成了N片,则前面的N-1片的标志比特都是1,而最后一个片的标志比特是0,

用来表示该片是最后一片。

IP数据报的片偏移字段用来确定某个数据报切成的片中,有没有一些片丢失。

IPv4编址

主机与路由器连入网络的方法

一台主机通常只有一条链路连接到网络,当主机中的IP想发送一个数据报时,它就在该链路上发

送。

主机与物理链路之间的边界叫作:“接口”(interface)

一台路由器有多条链路,因此路由器有多个接口,路由器与它的任意一条链路之间的边界也叫作接口。

IP要求每台主机和路由器接口拥有自己的IP地址。

因此,从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。

IPv4的具体编址原理

每个IP地址长度为4字节,因此共有2的三十二次方个可能的ip地址(40亿个)。

这些地址通常按所谓点分十进制记法书写。

即地址中的每个字节用它的十进制形式书写,各字节间以句点隔开。

例如:IP地址:193.32.216.9,

其中,193是该地址的第一个8比特的十进制等价数,32是该地址的第二个8比特的十进制等价数。

因此,193.32.216.9的二进制记法是:

“11000001 00100000 11011000 00001001”

在全球因特网的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址(NAT后的接口

除外)。

而一个接口的地址的一部分,需要由其连接的子网来确定。

下面是一个IP编址与接口的例子:

在上图中,这七台主机通过一个路由器进行互联,该路由器有三个接口(223.1.1.4、223.1.2.9、

223.1.3.27)。

其中,最左边的三台主机,它们的IP地址是“223.1.1.xxx”开头的地址。

因此包括最左边的三个主机和一个223.1.1.4的路由器接口通过一个并不包含路由器的网络互联起

来。

在此情况下,该网络可能是由一个以太网LAN互联或者一个无线接入点互联

用IP的术语来说,互联这三个主机接口和一个路由器接口的网络形成一个子网(subnet)。(在某

些地方,子网也被称为IP网络或直接称为网络。)

IP编址为这个子网分配一个地址223.1.1.0./24。

其中的/24记法,有时称为:“子网掩码”(networkmask),指示32比特中的最左侧24比特定义了

子网地址。

因此子网223.1.1.0/24由三个主机接口和一个路由器接口组成,任何其他要连到223.1.1.0/24网络的

主机都要求其地址具有223.1.1.xxx的形式。

下图是另外两个子网

下面我们更为深入的讨论子网掩码:

对上图而言,我们有几个子网呢?

首先,是三个路由器和主机之间的子网(223.1.1.0/24、223.1.2.0/24、223.1.1.3.0/24)

此外,还有三个路由器和路由器之间的子网:

(223.1.7.0/24、223.1.8.0/24、223.1.9.0/24)

因此,我们有了一个更为精确地系统中的子网定义:

“分开主机和路由器的每个端口,产生几个隔离的网路岛,使用接口端连接这些隔离的网络的端

点。这些隔离的网络中的每一个都叫做一个子网”。

因特网的地址分配策略被称为无类别域间路由选择CIDR)。

CIDR将子网寻址的概念一般化了。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也

具有点分十进制形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数

形式为a.b.c.d/x的地址的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀

(prefix)(或网络前缀)。

一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。

此外,还有一种特殊类型的IP地址,即IP广播地址:255.255.255.255。

当一台主机发送一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所

有主机。

路由器也会有选择地向邻近的子网转发报文。(虽然通常不这样做。)

路由聚合、地址聚合、路由摘要

这是一个ISP将8个组织连接到因特网的例子,它也很好地说明了仔细分配CIDR 化的地址有利于路

由选择的道理。

如下图,假设该ISP (我们称之为Fly- By-Night-ISP) 向外界通告,它应该发送所有地址的前20比特

是200. 23. 16. 0/20类型的数据报。

外界的其他部分不需要知道在地址块200. 23. 16. 0/20内实际上还存在8个其他组织,其中每个组

织有自己的子网°这种使用单个网络前缀通告多个网络的能力通常称为

地址聚合(address aggregation )

也称为路由聚合(route aggregation )

或者路由摘要(routesummarization)

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

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

相关文章

Python爬虫实战-批量爬取下载网易云音乐

大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战https://blog.csdn.net/caoli201314/article/details/1328828131小时掌握Python操作Mysql数据库之pymysql模块技术https://blog.csdn.net/caoli201314/article/details/133199207一天掌握p…

MSF暴力破解SID和检测Oracle漏洞

暴力破解SID 当我们发现 Oracle 数据库的 1521 端口时,我们可能考虑使用爆破 SID(System Identifier)来进行进一步的探测和认证。在 Oracle 中,SID 是一个数据库的唯一标识符。当用户希望远程连接 Oracle 数据库时,需要了解以下几个要素:SID、用户名、密码以及服务器的 I…

深入理解WPF中的依赖注入和控制反转

在WPF开发中,依赖注入(Dependency Injection)和控制反转(Inversion of Control)是程序解耦的关键,在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。今天就以一个简单的小例子&…

Linux背景介绍与环境搭建

本章内容 认识 Linux, 了解 Linux 的相关背景学会如何使用云服务器掌握使用远程终端工具 xshell 登陆 Linux 服务器 Linux 背景介绍 发展史 本门课程学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的?在这里简要介绍Linux的发展…

3+单细胞+代谢+WGCNA+机器学习

今天给同学们分享一篇生信文章“Identification of new co-diagnostic genes for sepsis and metabolic syndrome using single-cell data analysis and machine learning algorithms”,这篇文章发表Front Genet.期刊上,影响因子为3.7。 结果解读&#x…

正则表达式中扩展表示法的理解

正则表达式可以拥有扩展表达式,大致形式是(?...) 理解: 以(?)的含义为例子 data a1b2ce34.5d_6fres re.findall(r[a-z](?\d), data) # [a, b, ce]# ([a-z](?\d) 表示的是匹配小写字符一个或多个,但是匹配之后需要满足后续有数字一个…

Leetcode-1 两数之和

暴力穷举 class Solution {public int[] twoSum(int[] nums, int target) {int[] num new int[2];for(int i0;i<nums.length-1;i){for(int ji1;j<nums.length;j){if(nums[i]nums[j]target){num[0]i;num[1]j;}}}return num;} }HashMap&#xff0c;记录下标和对应值&…

SpringCloud 微服务全栈体系(十)

第十章 RabbitMQ 一、初识 MQ 1. 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得…

CLion2022安装

1. CLion下载 地址&#xff1a;https://www.jetbrains.com.cn/clion/download/other.html 下载你需要的版本&#xff0c;这里以2022.2.4为例 之后获取到对应的安装包 2. 安装 1、双击运行安装包&#xff0c;next 2、选择安装路径&#xff0c;建议非系统盘&#xff0c;nex…

git clone 报错:fatal: unable to access ‘https://github.com/XXXXXXXXX‘

国内使用GIT工具&#xff0c;拉取github代码&#xff0c;会因为网络原因无法成功拉取。出现如下类似情形&#xff1a; 此时更改 web URL即可&#xff0c;改用镜像的github网站替换https://github.com/。即URL里的https://github.com/换成https://hub.nuaa.cf/&#xff0c;即可…

linux之按键中断

查看原理图确认引脚 可以看到按键有两个&#xff0c;分别对应GPIO5_1和GPIO4_14 配置pinctrl&#xff0c;配置成GPIO模式 1.使用官方工具&#xff0c;配置下引脚 2.将生成的代码复制到设备树里 创建设备节点 生成二进制设备树文件 在工具链表下使用 make dtbs 或者使…

求职应聘校招社招,面对在线测评有什么技巧?

网上测评&#xff0c;不要怕&#xff0c;关键是在于你要提前准备充分。要说技巧&#xff0c;真心没有&#xff0c;但是建议我有一点点。 1、网上测评&#xff0c;技巧就是老实做 老老实实做题&#xff0c;我一贯的作风&#xff0c;老实人不吃亏。越是心思灵巧的人&#xff0c…

【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)

【STM32】基于HAL库建立自己的低功耗模式配置库&#xff08;STM32L4系列低功耗所有配置汇总&#xff09; 文章目录 低功耗模式&#xff08;此章节可直接跳过&#xff09;低功耗模式简介睡眠模式停止模式待机模式 建立自己的低功耗模式配置库通过结构体的方式来进行传参RTC配置…

使用自定义函数拟合辨识HPPC工况下的电池数据(适用于一阶RC、二阶RC等电池模型)

该程序可以离线辨识HPPC工况下的电池数据&#xff0c;只需要批量导入不同SOC所对应的脉冲电流电压数据&#xff0c;就可以瞬间获得SOC为[100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0%]的所有电池参数,迅速得到参数辨识的结果并具有更高的精度&#xff0c;可以很大程度上降低参…

降低毕业论文写作压力的终极指南

亲爱的同学们&#xff0c;时光荏苒&#xff0c;转眼间你们即将踏入毕业生的行列。毕业论文作为本科和研究生阶段的重要任务&#xff0c;不仅是对所学知识的综合运用&#xff0c;更是一次对自己学术能力和专业素养的全面考验。然而&#xff0c;论文写作常常伴随着压力和焦虑&…

win10系统nodejs的安装npm教程

1.在官网下载nodejs&#xff0c;https://nodejs.org/en 2&#xff0c;双击nodejs的安装包 3&#xff0c;点击 next 4&#xff0c;勾选I accpet the terms in…… 5&#xff0c;第4步点击next进入配置安装路径界面 6,点击next&#xff0c;选中Add to PATH &#xff0c;旁边…

[100天算法】-有序矩阵中第K小的元素(day 58)

题目描述 给定一个 n x n 矩阵&#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第 k 小的元素。 请注意&#xff0c;它是排序后的第 k 小元素&#xff0c;而不是第 k 个不同的元素。示例&#xff1a;matrix [[ 1, 5, 9],[10, 11, 13],[12, 13, 15] ], k …

浅谈前端出现率高的设计模式

目录 六大原则&#xff1a; 23 种设计模式分为“创建型”、“行为型”和“结构型” 前端九种设计模式 一、创建型 1.构造器模式&#xff1a;抽象了对象实例的变与不变(变的是属性值&#xff0c;不变的是属性名) 2. 工厂模式&#xff1a;为创建一组相关或相互依赖的对象提…

数据库实验:SQL的数据定义与单表查询

目录 实验目的实验内容实验要求实验过程实验步骤实例代码结果示意 数据库的实验&#xff0c;对关系型数据库MySQL进行一些实际的操作 实验目的 (1) 掌握DBMS的数据定义功能 (2) 掌握SQL语言的数据定义语句 (3) 掌握RDBMS的数据单表查询功能 (4) 掌握SQL语言的数据单表查询语句…

GD32 单片机 硬件I2C死锁解决方法

死锁的复现方式 在I2C恢复函数下个断点&#xff08;检测到I2C多次超时之后&#xff0c;应该能跳转到I2C恢复函数&#xff09;使用镊子&#xff0c;将SCL与SDA短接&#xff0c;很快就能看到程序停到恢复函数的断点上&#xff0c;此时再执行恢复函数&#xff0c;看能否正常走出&…