5.2.3 IP数据报(一)IP数据报的格式

news2024/11/17 21:24:55

5.2.3 IP数据报(一)IP数据报的格式

我们知道要想实现全球范围的通信除了地址要统一之外,数据格式也要统一,所以就有了IP分组,或者被称之为IP数据报,下面我们来学习IP分组的格式。如图IP数据报

总体来说一个IP分组或者说IP数据报包括首部和数据部分两个部分,首部又包含了20字节的固定部分和可选的IP选项,在图中,每一行是32比特,也就是4个字节,所以固定部分一共是五行,下面我们就来介绍一下首部各个字段的含义。

  1. 第一个部分是版本号,占4bit,包含了创建数据报所用的IP协议的版本信息,目前广泛使用的版本号是4,这里我们学习的除了特别说明都指的是IPv4,指IP协议的版本,目前的IP协议版本号为0100,也就是4(即IPv4)

  2. 第二个部分是首部长度,占4bit,这里我们需要注意的是该字段表示的是以四字节为单位的IP首部的长度,如该字段的值是0101的话表示该IP数据报首部长度是5*4,也就是20个字节,也说明了数据报首部长度必须是4字节的整体数倍,如果有IP选项的时候可能需要在填充字段中填零,来保证首部长度是4字节的整数倍,因为该字段的最大值为1111,即表示的最大数值是15个单位(一个单位为4字节),也就意味着每个IP数据报首部长度不能超过 15 × 4 15\times 4 15×4因此IP的首部长度的最大值是60字节,实际上在日常应用上,由于选项字段很少使用,所以最常见的首部长度值是5,即首部长度值是20字节。

  3. 第三个部分是服务类型,如图,占8bit,用来获得更好的服务,这个字段以前一直没有被人们使用,通常是00000000,这个字段的本意是希望能够使用户获得更好的服务,但实际上一直没有用到,所以该字段目前一般是全零。服务类型

  4. 第四个部分是总长度,占16比特,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节。总长度必须不超过最大传送单元MTU。它表示以字节为单位的整个IP数据报的长度,因为该字段最大长度为全1,也就是16个1,转换为10进制说明IP数据报从理论上可以达到65535个字节。实际上对于IP数据报从一台主机传送到另外一台总是要通过底层的物理网络进行传输,在第四章中我们学习过网络最大传输单元(MTU),这里再次强调每种网络都规定了在其数据链路层传输的数据帧中封装的数据字段长度的最大值就成为最大传输单元(MTU),例如以太网的MTU为1500个字节,即在一个以太网帧中最多传送1500字节的数据。很多人误认为MTU是数据帧的总长度,这是错误的。当然有些网络的MTU值较小,只有128字节。为了使互联网传输更高效,一般尽量使每个IP数据报尽可能的长并且能封装在一个独立的数据帧中去发送。但实际上一个IP数据报在从源主机到目的主机的传送过程中可能回传与MTU不尽相同的多个网络,如图MTU
    对源主机A来说,它也不清楚将要发出去的IP数据报,有可能会经过那些网络的传输,如果要经历的网络的MTU值太小,IP数据报的长度大于了MTU的情况下,那么这个IP数据报是不是就没有办法封装到一个帧里面去了呢,如果碰到这种情况就涉及到了对IP数据报的分片处理,就会用到接下来的三个字段也就是标识、标志、片偏移,因为有关IP数据报的分片和重组相关内容会在后面专门的学习,所以这里我们先把这三个字段跳过去。

  5. IP数据报第三行第一个字段是生存期TTL(Time To Live)占用一个字节8哥比特,表示IP数据报在网络中的寿命,目前的单位是跳,设计初衷是用来指明数据报在互联网系统中允许保留的以秒为单位的时间,但现在的路由器和网络完成一个数据报的转发一般仅仅需要几个毫秒,因此现在TTL实际上是起着跳数限制的作用,也就是说该字段现在的单位是跳,意思是数据报每经过路由器的转发就将其TTL值减一,一旦TTL值减为零,路由器就不再转发该数据报,而是将其丢弃,同时向数据报的源站发送一个ICMP(差错报告报文)。

  6. IP数据报第三行第二个字段是协议字段,占8比特,1个字节。该字段指出此数据报携带的数据使用何种协议以便目的主机的IP层将数据部分上交给那个协议软件处理。协议字段
    该字段对于源主机来说指明了该IP数据报的数据部分是来自于哪个协议,对于目的主机来说当它收到一个IP数据报的时候就会知道应该把封装的数据部分取出来送交由哪个协议软件来处理。如表:指定的网际协议编号,这个表列出了在实际网络中最长用到的协议以及协议的编号,如该字段是1的时候表示的是ICMP,6的时候表示的是TCP。

协议字段值(十进制表示)14617
协议名ICMPIPTCPUDP
  1. IP数据报第三行第三个字段是首部检验和,占16比特,该字段只检验数据报的首部,不包括数据部分。这里不采用CRC检验码而采用简单的计算方法。前面我们曾经介绍过差错控制,同样在IP协议中也考虑到了差错控制的功能。首部校验和字段就是用来检错,这里要注意该字段不能纠错,同时要注意这个字段校验范围只是首部。对于数据部分的对错,该字段是不负责检测的。首部校验和字段占了16个比特,该校验和字段采用的算法与我们前面介绍的循环冗余码不一样,这里我们将会在传输层的UDP协议中学习,这里我们只用知道该字段的作用即可。

    数据报从源主机发出后,沿途路由器以及目的主机都要根据首部校验和字段来检测首部的对错,如果发现首部有错就将该IP数据报丢弃,当然只要首部有变化,该字段就会被重新计算,如所有数据报的TTL字段在路由转发时都要被减1,因此路由器会对每个被转发的IP数据报都要重新计算一下它的首部校验和字段。

    在这里我们需要强调网际协议IP提供的是一个无连接、不可靠、尽力而为的服务,也就是说源主机和目的主机之间是不需要建立连接的,想发就发,接收端收到以后也不需要给出确认,也没有重传机制,也没有对数据部分的差错控制,因为它只校验首部。这样做的优点是大大节省了路由器处理每个数据报的时间,也符合IP协议的尽力传递的思想。它的缺点是给高层的软件留下了数据不可靠的问题,增加了高层协议的负担。不过IP数据报首部和数据部分的分开校验,也允许高层协议自己选择所对应的校验方法。

  2. IP数据报第四行、第五行就是源IP地址和目的IP地址字段,各占了4个字节,分别指明本IP数据报最初的发送者和最终接收者的IP地址,这里我们要注意的是一个IP数据报不管是经过了多少路由器的转发,这两个字段的值始终保持不变,路由器总是提取目的IP地址和路由表中的表项来进行匹配,以决定该把数据报发往何处,关于IP数据报的转发过程,后面我们会详细的学习。

  3. 最后一个字段是IP选项字段,也就是可有可无,主要用于控制和测试的目的。实际上这个字段用的不多,我们只需要知道为了保证数据报首部的长度是4字节的整数倍,如果用到选项字段的话,就有可能还需要在它的后面填充一些零比特即可。

以上就是我们学习的IP数据报的格式,我们一定要注意首部长度这个字段和总长度字段的单位是不一样的。还有一些关键字段如协议类型字段,TTL字段及源IP地址和目的IP地址的含义都需要掌握,在实际应用中我们可以利用数据报捕获工具Wireshark来吧IP数据报捕获下载进行对比分析。

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

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

相关文章

JetBrains的Java集成开发环境IntelliJ 2023版本在Linux系统的下载与安装配置教程

目录 前言一、IntelliJ安装二、使用配置总结 前言 IntelliJ IDEA Ultimate是一款功能强大的Java集成开发环境(IDE)。它提供了丰富的功能和工具,可以帮助开发人员更高效地编写、调试和部署Java应用程序。注:已在CentOS7.9和Ubuntu…

带大家来认识下SUMIF函数

如果您需要在Excel表格中对特定条件下的数据进行求和,那么SUMIF函数是一个非常有用的工具。SUMIF函数允许您在满足指定条件的情况下,将符合条件的单元格的值相加起来。在本文中,我们将向您介绍如何使用SUMIF函数来处理您的表格数据。 如下图…

想定制鞋子?先给脚部建模吧!

最近灌篮高手的电影正在火热上映中,湘北大战山王的比赛从漫画搬上了大荧幕,看得人热血沸腾,直呼“爷青回”,恨不得马上换上球衣球鞋,再去球场上挥汗如雨一番。 灌篮高手 同时NBA的季后赛也在如火如荼的进行中&#xf…

Cmake学习记录(九)--使用Cmake交叉编译Android .so库

文章目录 一、前言二、使用NDK进行编译的相关代码四、使用交叉工具链进行编译四、参考链接 一、前言 目前Android编译.so的话使用Android Studio比较简单,但是有时候时候Android Studio的话还需要创建一个Android的项目,这里记录下脱离Android Studio单…

华为OD机试真题B卷 Java 实现【百钱买百鸡问题】,附详细解题思路

一、题目描述 公元五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 现要求你打印出所有花一百元买一百…

2023-05-31-[音视频处理] FFmpeg使用指北1-视频解码

本文将详细介绍如何使用ffmpeg 4.4在C中解码多种格式的媒体文件,这些媒体文件可以是视频、视频流、图片,或是桌面截屏或USB摄像头的实时图片。解码文件后,还将每帧图片转换为OpenCV的Mat格式以供后续使用。 文章目录 1 基于ffmpeg的媒体文件解…

Java之旅(五)

运算符 算术运算符 加法()减法(-)乘法(*)除法(/)取余(%)一元运算符 自增运算符()自减运算符(--)变量前就先运…

基于Yarn搭建Flink

基于Yarn搭建Flink 1. 概述 1.1 Yarn 简介 Apache Hadoop YARN是一个资源提供程序,受到许多数据处理框架的欢迎。Flink服务被提交给 YARN 的 ResourceManager,后者再由 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager…

Apache DolphinScheduler——开源大数据调度器神器(国人之光)

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 1. 简 介 Apache DolphinScheduler(海豚调度),国人之光,是许多国人雷锋开源在Apache的顶级项目,主要功能就是负责任务的调度处理。 1.1 概 念 Apache DolphinScheduler是一个分布式去…

CentOS6 通过shell脚本的离线安装MySQL5.7.40(rpm)

说明: 在项目的实施过程中,多次遇到安装MySQL的工作,尤其在内网环境下,无法使用在线yum源,只能使用源码或采用rpm离线安装的方式进行安装,在安装过程中会遇到各种各样的问题,小编特地就rpm离线安装方式进行了整理及验证,并通过shell脚本的方式实现一键安装。使用此脚本…

软件性能测试有哪些方法?性能测试报告怎么编写?

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。在软件的质量保证中起着重要的作用,它包括的测试方法丰富多样。 一、常用的软件性能测试方法包括以下几种: 1、负载测试:模拟真实用户场…

连续十年亏损,哔哩哔哩估值遭质疑

来源:猛兽财经 作者:猛兽财经 财务业绩 2023年3月2日,哔哩哔哩(BILI)公布了其2022年第四季度和2022财年全年的财务业绩,财报显示哔哩哔哩的用户数量和收入均实现了稳步增长。2022年第四季度的总收入达到了…

【MySQL】单表获取库存数

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

港联证券今日投资前瞻:人工智能再迎催化 关注房地产板块超跌机会

昨日,A股午后探底回升,沪指尾盘翻红,深成指、创业板指走高。截至收盘,沪指微涨0.09%报3224.21点,深成指涨0.44%报10869.55点,创业板指涨0.67%报2218.6点,科创50指数涨1.56%;两市合计…

高质量椭圆检测库

目录 前言 效果展示 检测库 简介 安装库 用法 测试 论文算法步骤简读 1. lsd 检测 2. lsd group 3. 生成初始 ellipse 4. 聚类 前言 椭圆检测是工业中比较常用的一种检测需求。目前常用的基于传统图像处理的椭圆检测方法是霍夫变换,但是霍变换的检测率…

【基于前后端分离的博客系统】Servlet版本

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一. 项目简介 1. 项目背景 2. 项目用到的技…

玩转ChatGPT:Transformer分类模型

一、写在前面 之前,我们介绍了Sklearn包以及Boost辈的各种分类模型,这些模型都很经典了,实际上也很强大,比如说Xgboost。 然而,近期随着ChatGPT的大火,其底层框架Transformer也逐渐火了,现在大…

分析和解决java.lang.OutOfMemoryError: Java heap space问题

这里写目录标题 问题场景问题分析与解决1.优化项目代码2.提升Java heap size3.JVM参数配置配置参考堆区参数配置说明非堆区参数配置说明 问题场景 最近客户反馈在生产环境导入操作时遇到任务一直执行中,并且入库的数据量一直不改变。通过日志查询,终于定…

UE4蓝图学习篇(九)-- 人物重定向

在平常的游戏制作或者项目练习过程中,我们想使用其他比较好看的模型,但是却想使用小白人的动画,这个时候要怎么去处理呢? 这个时候就需要使用到重定向功能,让两者使用同一套骨骼,把小白人动画重定向到我们…

IMX6ULL裸机篇之I2C相关寄存器与AP3216C传感器

一. I2C实验 I2C时钟选择与传输速率 1. IMX6ULL的 I2C频率标准模式 100kbit/S,快速模式为 400Kbit/S 2. 时钟源选择 perclk_clk_rootipg_clk_root66MHz(由之前的时钟实验章节可以知道是 66MHz)。 二. I2C 寄存器配置 I2Cx_IFDR寄存器&…