网络工程师 (43)IP数据报

前言

       IP数据报是互联网传输控制协议(Internet Protocol,IP)的数据报格式,由首部和数据两部分组成。

一、首部

       IP数据报的首部是控制部分,包含了数据报传输和处理所需的各种信息。首部可以分为固定部分和可变部分。

  1. 固定部分

    • 版本:占4位,指IP协议的版本。目前广泛使用的协议版本号为4(即IPv4)。通信双方的协议版本必须一致。
    • 首部长度:占4位,表示数据报首部的长度。因首部长度可表示的最大数值是15个单位(每单位为4字节),所以IP的首部长度的最大值为60字节。
    • 区分服务:占8位,表示对数据报的服务要求。该字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。其中,前三位表示优先级(0~7,0最低),D、T、R和C分别表示对时延、吞吐量、可靠性和路由服务费用有选择的要求。最后一位未用。
    • 总长度:占16位,指整个数据报(包括首部和数据)的长度,单位为字节。数据报的最大长度为65535字节(64KB)。这个字段很重要,因为数据报在传输过程中需要被封装成链路层的帧,而帧有自己的最大传输单元MTU(Maximum Transfer Unit)。如果数据报的总长度超过了MTU,那么就需要对数据报进行分片。
    • 标识:占16位,用于数据报各分片最终被重装成原来的数据报。它是一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。目的主机将相同标识字段值的各分片数据报最后进行正确地重装(合片)。
    • 标志:占3位,但只有后两位有意义。最低位记作MF(More Fragment),MF=1表示后面“还有分片”,MF=0表示已是最后一个分片。次低位是DF(Don't Fragment),用来控制是否允许数据报分片。只有DF=0才允许分片。
    • 片偏移:占13位,指较长的分组在分片后某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始,以便目的主机重装数据报。片偏移以8个字节为偏移单位,即每个分片的长度一定是8字节(64位)的整数倍。
    • 生存时间:占8位,记为TTL(Time To Live),表示该数据所在网络中的寿命。其单位最初是秒,但为了方便,现在都用“跳数”作为TTL的单位。数据报每经过一个路由器,其TTL值就减1,当TTL值减为零时,就丢弃这个数据报。
    • 协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
    • 首部检验和:占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
    • 源地址:占32位,表示数据报的发送方地址。
    • 目的地址:占32位,表示数据报的接收方地址。
  2. 可变部分

    • 可变部分是一个可选字段,其长度可变,从1个字节到40个字节不等,取决于所选择的项目。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段包括安全和处理限制(用于军事领域)、记录路径(让每个路由器都记下它的IP地址)、时间戳(让每个路由器都记下IP数据报经过每一个路由器的IP地址和当地时间)、宽松的源站路由(Loose Source Route)(为数据报指定一系列必须经过的IP地址)以及严格的源站路由(Strict Source Route)(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址)等。
    • 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用,新的IP版本IPv6就将IP数据报的首部长度做成固定的。

二、数据部分

       数据部分是高层需要传输的数据。在IP数据报中,数据部分紧跟在首部之后,其长度由总长度字段减去首部长度字段得到。

三、IP数据报的工作原理

  1. 封装与发送:在源主机上,传输层的数据交给IP协议后,IP协议要在其前面加上一个IP报头(即首部),用于控制对数据的转发和处理等。然后,通过地址解析协议ARP将目的IP地址映射为物理地址,把IP数据报嵌入数据链路层帧中,交由数据链路层完成将其发送到网络上的工作。

  2. 寻址与路由:当IP数据报在网间穿行时,网络上的IP协议需要对它进行寻址和路由选择,以使其正确到达目的地。

  3. 分段与重组

    • 分段:如果一个路由器收到一个IP数据报,其长度对下一个物理网络来讲太长,那么就由IP协议将它分成若干个段。分段可以在任何需要的中间路由器上进行。在IP报头中,用标识符、标志和片偏移三个字段来实现对报文的分段。
    • 重组:当这些分段到达目的主机时,由端系统中的IP层将其重组成源IP数据报,然后传至传输层处理。
  4. 流量控制:IP层还提供初步的流量控制。如果由于IP分组到达主机或路由器太快而被丢弃时,IP层就会发送一个ICMP源抑制报文给发送端,告诉它数据发得太快了。

 结语        

每一个心灵的闪光瞬间

都是对生活的深深热爱与感悟

!!!

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

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

相关文章

Leetcode 424-替换后的最长重复字符

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符,并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后,返回 包含相同字母的最长子字符串的长度。 题解 可以先做LCR 167/Leetcode 03再做本题 滑动窗口&…

28 在可以控制 postgres 服务器, 不知道任何用户名的情况下怎 进入 postgres 服务器

前言 最近有这样的一个需求, 有一个 postgres 服务器 但是 不知道 他的任何的用户名密码, 但是我想要查询这台 postgres 服务器 然后 基于这个需求, 我们看一下 怎么来处理 pg_hba.conf 认证方式修改为 trust 首先将 postgres 服务器的认证方式修改为 trust 这时候 …

LM Studio笔记

一、什么是 LM Studio? LM Studio 是一款功能强大、易于使用的桌面应用程序,用于在本地机器上实验和评估大型语言模型(LLMs)。它允许用户轻松地比较不同的模型,并支持使用 NVIDIA/AMD GPU 加速计算。 功能集&#xff1…

内网下,Ubuntu (24.10) 离线安装docker最新版教程

一般在数据比较敏感的情况下,是无法使用网络的,而对于Ubuntu系统来说,怎么离线安装docker呢? 下面我给大家来讲一下: 采用二进制安装: 1.下载docker离线包 官网下载: Index of linux/static…

框架ThinkPHP(小迪网络安全笔记~

免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…

sql数据执行失败,三个命令依次执行

set global innodb_strict_mode off set global.sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION; set sql_mode ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;

【网络安全】零基础入门网络安全劝退指北

作为从16年接触网络安全的小白,谈谈零基础如何入门网络安全,有不对的地方,请多多指教。 这些年最后悔的事情莫过于没有把自己学习的东西积累下来形成一个知识体系。 如何入门 简单了解网络安全 网络安全就是指的确保网络系统中的数据不被别…

【Linux】网络基础

目录 一、协议分层 (一)计算机网络 (二)协议分层 (三)OSI模型 (四)TCP/IP协议 二、网络传输过程 三、IP地址和MAC地址 (一)IP地址 (二&a…

ms-swift3 序列分类训练

目录 引言 一、数据集准备 二、训练/推理代码 2.1 训练 2.2 推理 三、性能验证 引言 swift 3.x支持了序列分类Command Line Parameters — swift 3.2.0.dev0 documentation 想尝试一下用多模态(图像)的序列分类与普通的图像分类任务有啥区别 一、…

STC 51单片机63——关于STC8H的ADC通道切换问题

使用STC8H时,发现在ADC中断中只能使用一个通道,即使切换了通道,那么数据要不为0,要不就是原先通道的电压。查阅手册,内容并不多,没有发现专门提到的问题。只能去试试,最后发现在ADC中断中&#…

大数据处理如何入门

大数据处理的入门可以从以下几个方面入手: 1. 基础知识学习 在深入大数据领域之前,建议先掌握一些基础知识,包括数据类型、存储与处理的基本概念,以及常用的数据处理工具。例如,Python或Java编程语言在大数据领域应用…

Logistic Regression 逻辑回归中的sigmoid函数是什么?

Sigmoid函数是一种在数学、计算机科学,尤其是在机器学习和深度学习领域广泛应用的函数,以下是关于它的详细介绍: 定义与公式 Sigmoid函数的数学表达式为: S ( x ) = 1 1 + e − x S(x)=\frac{1}{1 + e^{-x}} S(x)=1+e−x1​,其中 x x x 可以是一个实数、向量或矩阵。当 …

什么是Spring Boot?

Spring Boot 是基于 Spring 框架的扩展工具,旨在简化 Spring 应用的初始搭建和开发流程。它通过约定优于配置和自动装配机制,减少了传统 Spring 开发中的繁琐配置,使开发者能快速构建独立运行、生产级别的应用。 Spring Boot 的核心特性 自动…

后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理

一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…

计算机网络(3)TCP格式/连接

1、TCP三大特点&#xff1a;面向连接、可靠、基于字节流 2、如何唯一确定一个TCP连接&#xff1f;TCP四元组&#xff1a;源地址、源端口、目的地址、目的端口 源地址和目标地址的字段(32 位)是在 IP 头部中&#xff0c;作用是通过 IP 协议发送报文给对方主机源端口和目标端口…

Visual Studio Code使用ai大模型编成

1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用

Flowith.io 初探:DeepSeek-R1免费用,用画布式 AI 提升效率和创意

摘要 介绍了 Flowith.io&#xff0c;一款创新的画布式 AI 平台&#xff0c;旨在提升效率和创意。它通过独特的画布交互、Oracle AI 系统、知识花园和丰富的模型选择&#xff0c;为用户提供全新的 AI 体验。画布交互打破线性思维&#xff0c;Oracle AI 帮助任务拆解与执行&#…

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化&#xff1a; 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…

数据结构 day02

3. 线性表 3.1. 顺序表 3.1.3. 顺序表编程实现 操作&#xff1a;增删改查 .h 文件 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define N 10 typedef struct seqlist {int data[N];int last; //代表数组中最后一个有效元素的下标 } seqlist_t;//1.创建一个空的顺序表 seq…