(考研湖科大教书匠计算机网络)第四章网络层-第七节:IPv4数据报首部格式

news2024/11/15 17:16:12
  • 获取pdf:密码7281
  • 专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航

文章目录

  • 一:IP数据报首部格式概述
  • 二:各字段作用概述
    • (1)版本
    • (2)首部长度和可选字段
    • (3)填充
    • (4)区分服务
    • (5)总长度
      • A:概述
      • B:首部长度和总长度字段区别
    • (6)标识、标志和片偏移(用于IP数据报分片)
      • A:IP数据报分片
      • B:标识、标志和片偏移
      • C:IP数据报分片例子
    • (7)生存时间
      • A:概述
      • B:作用
    • (8)协议
    • (9)首部校验和
    • (10)源IP地址和目的IP地址
  • 三:总结

本节对应视频如下

  • 【计算机网络微课堂(有字幕无背景音乐版)】:IPv4数据报首部格式

一:IP数据报首部格式概述

IP数据报首部格式:一个IP分组由首部和数据载荷两部分组成。IP数据报首部由固定部分(20B)可变部分(最大40B)

  • 固定部分:每个IP数据报首部所必须包含的部分
  • 可变部分:用于增加IP数据报的功能

IP数据报常以32个比特为单位(4B)进行描述,也即下图中的每一行,其中每个小格子称之为字段(或域),每个字段或某些字段的组合用来表达IP协议的相关功能

在这里插入图片描述

二:各字段作用概述

(1)版本

版本:占4个比特,表示IP协议的版本,通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4,也即IPv4

(2)首部长度和可选字段

首部长度:占4个比特,表示IP数据报首部的长度,该字段取值以4B为单位

  • 最小十进制取值为5,表示IP数据报首部只有20B的固定部分
  • 最大十进制取值为15,表示IP数据报首部包含20B的固定部分和最大40B的可变部分

可选字段1B到40B不等,用来支持排错、测量及安全等措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用

(3)填充

填充 用来确保首部长度应该是4B的整数倍,使用全0进行填充

(4)区分服务

区分服务8个比特,用来获得更好的服务。该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。1998年,因特网工程任务组IETF把这个字段改名为区分服务。利用该字段的不同数值可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段

(5)总长度

A:概述

总长度16个比特,用来表示IP数据报的总长度(首部+数据载荷)

  • 最大取值为十进制的65535,以字节为单位。在实际应用中,很少会传输这么长的IP数据报文

B:首部长度和总长度字段区别

下图可说明首部长度字段和总长度字段的区别

  • 首部长度 ( 0101 ) 2 × 4 = 5 × 4 = 20 B (0101)_{2}×4=5×4=20B (0101)2×4=5×4=20B
  • 总长度 ( 0000001111111100 ) 2 = 1020 B (0000001111111100)_{2}=1020B (0000001111111100)2=1020B
  • 数据载荷长度 1020 − 20 = 1000 B 1020-20=1000B 102020=1000B

在这里插入图片描述

在这里插入图片描述

(6)标识、标志和片偏移(用于IP数据报分片)

A:IP数据报分片

IP数据报分片:如下图,网际层封装出的IP数据报将会在数据链路层封装成帧。每一种数据链路层协议都规定了帧的数据载荷的最大长度,称之为最大传输单元MTU(例如以太网数据链路层规定MTU值为1500B)。如果某个IP数据报总长度超过MTU时,将无法封装成帧,需要将原IP数据报分片为很小的IP数据报,再将各分片IP数据报封装成帧。而这里的标识、标志和片偏移三个字段共同用于IP数据报分片

在这里插入图片描述

B:标识、标志和片偏移

标识16个比特,属于同一个数据报的各分片数据报应具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值+1,并将此值赋给标识字段

标志3个比特,各比特含义如下

  • DF位
    • 1:不允许分片
    • 0:允许分片
  • MF位
    • 1:后面还有分片
    • 0:这是最后一个分片
  • 保留位:必须设置为0

片偏移13个比特,用于指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位,片偏移以8个字节为单位

C:IP数据报分片例子

如下图有一IP数据报,其首部为20B,数据载荷部分3800B,所以总长度为3820B。假设使用以太网传送该IP数据报,其MTU为1500B,显然无法封装3820B长的IP数据报,因此需要把该IP数据报分片为几个更小的IP数据报,每个长度不能大于1500B,然后再将每个分片IP数据报封装成一个以太网帧进行传输。为了更好地描述后续分片工作,这里我们将原IP数据报数据载荷部分的每一个字节都编上号,范围为0-3799

在这里插入图片描述

我们可将原IP数据报的数据载荷部分分为3个更小的分片

  • 第一个分片:共1400字节,范围0-1399
  • 第二个分片:共1400字节,范围1400-2799
  • 第一个分片:共1000字节,范围2800-3799

在这里插入图片描述

分片结束后,给每个分片重新添加一个首部使之成为IP数据报,每个分片添加的首部自然不能完全相同,根据上面对标识、标志和片偏移字段的理解,可以填写下表

总长度标识MFDF片偏移
原始数据报3800+2012345000
分片1的数据报1400+2012345100/8
分片2的数据报1400+2012345101400/8
分片3的数据报1000+2012345002800/00

在这里插入图片描述

假设分片2的IP数据报经过某个网络时还需要再进行分片,其中一个分片长度为800B,另一个分片长度为600B,分片结束后给每个分片添加一个首部使之称为IP数据报,填写下表如下

总长度标识MFDF片偏移
原始数据报3800+201234500
分片2的分片1数据报800+201234510
分片2的分片2数据报600+201234510

(7)生存时间

A:概述

生存时间

  • 占8比特,最初以为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃
  • 现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃

B:作用

生存时间字段的最大作用就是防止IP数据报在网络中永久兜圈

如下图,假设路由器R2路由表目的网络为N2的条目其下一跳被错误的配置成了R1(本来是R3),这会导致去往网络N2的IP数据报错误地转发给路由器R1

在这里插入图片描述

假设某个IP数据报从网络N1发往N2,该IP数据报达到R1后,R1进行查表转发,发现了匹配的路由条目,其下一条指示转发给R2,于是R1将该IP数据报转发给了R2。R2收到该IP数据报后,进行查表转发,发现了匹配的路由条目,其下一条指示转发给R1,于是R2将该IP数据报又转发回了R1。很显然,这形成了路由环路,如果没有生存时间字段,IP数据报将在此路由环路中永久兜圈

在这里插入图片描述

(8)协议

协议8比特,指明IPv4数据报的数据部分是何种协议数据单元,常用的一些协议和相应协议字段的值如下表

协议名称ICMPIGMPTCPUDPIPv6OSPF
协议字段值126174189

(9)首部校验和

首部校验和16个比特,用来检测首部在传输过程中是否出现差错。IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报

(10)源IP地址和目的IP地址

源IP地址和目的IP地址占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址

三:总结

字段名长度作用
版本4个比特IP协议版本
首部长度4个比特IP数据报首部长度
总长度16个比特IP数据报总长度
标识16个比特同一个数据报各分片相同
标志3个比特DF;MF;保留位
生存时间8个比特防止永久兜圈
协议8个比特何种协议数据单元
首部校验和16个比特检测差错
源IP地址32个比特源主机IP地址
目的IP地址32个比特目的主机IP地址
可选字段0-40字节支持排错、测量及安全等措施

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

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

相关文章

WSL(ubuntu2204)xfce4语言支持报错及配置WSL服务自启

语言支持报错 在图形桌面或命令行打开语言支持报错:dbus.exceptions.DBusException: org.freedesktop.DBus.Error.FileNotFound: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory itboonelocalhost:/$ sudo /usr/bin/gnome-…

gRPC 非官方教程

一、 简介 gRPC的定义: 一个高性能、通用的开源RPC框架主要面向移动应用开发: gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。基于HTTP/2协议标准而设计,基于ProtoBuf(Protoc…

Visual Studio 高级调试-代码调试

概述编程圈子里隔三差五的就会有场“谁是最强IDE”之争,重要的是我们需要对使用的IDE有充分的了解,正所谓工欲善其事,必先利其器。本文主要讲述Visual Studio常用的调试技巧,包括多类型断点,数据监视,以及多…

剑指 Offer 59 - I. 滑动窗口的最大值

摘要 剑指 Offer 59 - I. 滑动窗口的最大值 一、大顶堆求解 对于每个滑动窗口,我们可以使用 O(k) 的时间遍历其中的每一个元素,找出其中的最大值。对于长度为n的数组 nums而言,窗口的数量为 n−k1,因此该算法的时间复杂度为 O(…

在线图片转gif怎么操作?试试这一招在线制作gif

静图怎么变成gif动图?想要将手中的静态图片变成gif动图又不想下载软件的时候要怎么操作呢?很简单,通过使用【GIF中文网】的动图在线制作(https://www.gif.cn/)功能,两招就能在线制作gif图片,方便…

小红书购物笔记在哪里看?

小红书购物笔记在哪里看?#小红书带货#小红书变现#小红书运营#小红书营销#内容营销 在现在这个时代,网上购物已经成为一种日常的行为。每天大量的人在通过小红书购买他们心仪的商品,生活态度也越来越追求高品质。小红书不但能够让用户在网上购…

Metasploit框架基础(二)

文章目录前言一、Meatsplooit的架构二、目录结构datadocumentationlibmodulesplugins三、Measploit模块四、Metasploit的使用前言 Metasploit是用ruby语言开发的,所以你打开软件目录,会发现很多.rb结尾的文件。ruby是一门OOP的语言。 一、Meatsplooit的…

【opencv源码解析0.1】opencv库VS环境配置

opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章,主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…

MySQL数据库优化————COUNT优化

直接进入主题 索引对count语句的影响 在我们对departments表进行count查询时,使用了以下语句 select count(*) from employees;当前employees表索引情况如图 只有一个主键索引 执行 explain select count(*) from employees;从结果中可以看到,这时…

NOIP2014-提高组初赛C语言解析(选择填空题)

第二十届(2014年)全国青少年信息学奥林匹克联赛初赛一、单项选择题(共 20 题,每题 1.5 分,共计 30 分。每题有且仅有一个正确选项)1. 以下哪个是面向对象的高级语言( B )A.汇编语言 B.C C.Fortran D.Basic参…

【opencv源码解析0.4】如何使用cmake来管理项目

如何使用cmake来管理项目 【opencv源码解析0.1】VS如何优雅的配置opencv环境 【opencv源码解析0.2】如何编译opencv库源码 【opencv源码解析0.3】调试opencv源码以及使用cmake来管理项目 前面几篇文章我们都是围绕Visual Studio 2019这个IDE来展开的,IDE为我们做了…

矩阵中的路径-剑指Offer-java深度优先

一、题目描述给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相…

k8s部署mysql+初始化数据

1. 准备工作 1.k8s的前置内容需要提前了解 2.mysql的初始化数据 3.docerk相关知识点需要了解 2. 部署步骤 初始化数据文件准备,准备了nacos的一张表sql脚本,需要修改一点点内容 文件名称:init-nacos.sql 部分内容显示: 主要创建…

潘长江张杰再现狂飙名场面,一般人把握不住

潘长江张杰再现狂飙名场面,一般人把握不住#我们的客栈#高启强#老墨我饿了 在昨晚播出的《我们的客栈》在猜人游戏的环节中,张杰和潘长江商量了一番,决定还原《狂飙》某一名场面,没想到被张维伊一秒猜出,张维伊还说这是…

图像分类竞赛进阶技能:OpenAI-CLIP使用范例

OpenAI-CLIP 官方介绍 尽管深度学习已经彻底改变了计算机视觉,但目前的方法存在几个主要问题:典型的视觉数据集是劳动密集型的,创建成本高,同时只教授一组狭窄的视觉概念;标准视觉模型擅长于一项任务且仅擅长于一项任务,并且需要大…

【QT专栏】QT中实现多线程的四种方式总结(金针菇般细)

目录 一、继承QThread 1,基本概念 2,操作流程 二、继承QObject(推荐) 1,基本概念 2,操作流程 三、继承QRunnable,配合QThreadPool实现多线程 1,外界通信 2,QMet…

SpringSecurity的安全认证的详解说明(附完整代码)

SpringSecurity登录认证和请求过滤器以及安全配置详解说明 环境 系统环境:win10 Maven环境:apache-maven-3.8.6 JDK版本:1.8 SpringBoot版本:2.7.8 根据用户名密码登录 根据用户名和密码登录,登录成功后返回Token数据…

狂神聊Redis复习笔记一

目录目前一个基本的互联网项目!NoSQL 特点Redis 是什么?Redis 能干嘛?特性测试性能基础的知识Redis 是单线程的!Redis 为什么单线程还这么快?五大数据类型Redis-KeyString(字符串)List&#xff…

[软件工程导论(第六版)]第3章 需求分析(复习笔记)

文章目录3.1 需求分析的任务3.2 与用户沟通获取需求的方法3.3 分析建模与规格说明3.4 实体-联系图(E-R图)3.5 数据规范化3.6 状态转换图3.7 其他图形工具3.8 验证软件需求需求分析是软件定义时期的最后一个阶段,需求分析的基本任务是准确的回…

EASYui+C#web

第一步创建一个web应用程序。 选择web应用程序。 第二步选择mvc框架 创建完成项目目录。 如图引入easyui包。 记住复制到content文件夹&#xff0c;否则无法识别。 easyui下载&#xff0c;官网。 如何用 引入jscss文件 <link rel"stylesheet" type"text…