计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析
zhezhongyun 2025-05-11 19:39 3 浏览
我们说因为有了IP协议(Internet Protocol,互联网协议),因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。IP协议就是为计算机网络相互连接进行通信而设计的协议,在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。本文通过分析IP协议报文的格式,能够使大家明白为何IP协议能够在复杂的网络环境中将数据包发送到最终目的主机,从而实现主机与主机之间的通信。
IP报文格式
IP数据报的格式能够说明IP协议都具有什么功能,如下图所示,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的,但对于首部的长度来说,最长是60个字节,所以可选字段最长为40个字节。
IP数据报首部的固定部分中的各字段说明如下:
(1) 版本:占4位,指IP协议的版本。不同版本的协议格式或语义可能不同,但是双方通信使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4,即IPv4,其字段值就为0100。
(2) 首部长度:占4位,可表示最大十进制数值是15。请注意,一个位对应的是4个字节。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当这四个位都为1最大值为15的时候就表示此时达到了首部的最大长度,即60字节。需要注意的是当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便,通过首部长度可以知道数据部分是什么时候开始的。
(3) 服务类型:占8位,指定特殊的报文处理方式,用来获得更好的服务。在一般的情况下不使用这个字段,只有在有QoS差分服务要求时这个字段才起作用,实现网络流量优化。
QoS(Quality of Service,服务质量)是一种控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级,或者是根据应用程序的要求,保证数据流的性能达到一定的水准。
(4) 总长度:占16位,指首部和数据部分之和的长度,单位为字节。因此数据报的最大长度为2^16-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。
由于在IP层下面的每一种数据链路层协议都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU (Maximum Transfer Unit),当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。例如,最常用的以太网就规定其MTU值是1500字节。若所传送的IP数据报长度超过数据链路层的MTU值时,就必须把过长的数据报进行分片处理。在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
(5) 标识:占16位,通过标识来给已经分片的IP数据报进行分组,保证最后分片之后的各数据报片能正确地重装成为原来的数据报。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6) 标志:占3位。目前只有两位有意义,第一位一般是0;中间的一位记为DF(Don't Fragment),意思是不能分片,只有DF值为0的时候才允许分片;最后的一位记为MF(More Fragment),表示后面还有无分片,当MF=1表示后面还有分片的数据报,当MF=0表示后面已无分片,这已是若干数据报片中的最后一个。
(7) 片偏移:占13位,标识某个分片在分组中的位置。片偏移指出较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位,这就是说,每个分片的长度一定是8字节的整数倍。
数据分片举例:
一数据报的总长度为3820字节,数据部分为3800字节(IP首部为固定20字节),需要分片传输。假设每片IP报文长度不超过1420字节。去掉固定首部长度20字节,每片报文数据部分长度不超过1400。于是分成3个数据报片,其数据部分长度分别为1400、1400、1000字节。原始数据报首部被复制为各数据报片的首部,只需要改变有关字段的值。下图给出分片后得出的结果。
下图表是本例中数据报首部与分片有关的字段中的数值,其中标识字段的值是任意给定的(12345)。具有相同标识的数据报片在目的站就可无误地重装成原来的数据报。
(8) 生存时间:占8位,生存时间字段常用的英文缩写是TTL(Time To Live),表明数据报在网络中的寿命。TTL的意义是指明数据报在互联网中至多可经过多少个路由器,因此其单位不是时间而是跳数。由发出数据报的源点设置这个字段,其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。路由器在每次转发数据报之前就把TTL值减1,由于只有八个位,所以能够在网络中经过的路由器的最大数值是255,若TTL值减小到零,就丢弃这个数据报,不再转发。
(9) 协议:占8位。协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。例如协议字段为6表示上交给上层TCP协议进行处理。
常见的协议号:
(10) 首部检验和:占16位。这个字段只检验数据报的首部,不包括数据部分。在数据报传输过程中IP头中的某些字段可能发生改变(如生存时间、标志、片偏移等都可能发生变化),所以检验和要在每一个经过的路由器中进行校验和重新计算。利用二进制反码求和来进行校验,以此来决定是否丢弃数据报。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
(11) 源地址:占32位,源IP地址。标识IP数据报的源端地址。
(12) 目的地址:占32位,目的IP地址。标识IP数据报的目的地址。
IP数据报首部的可变部分
IP数据报首部的可变部分就是一个选项字段,一般很少使用。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。而有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。很多路由器都不考虑IP首部的可选字段,因此新的IP版本IPV6就把IP数据报的首部长度做成固定的。
Wireshark分析IP数据报头
之前我们已经通过Wireshark分析了以太网帧,详见该文《以太网数据帧结构详解并结合Wireshark工具深入分析》。现在我们进一步来分析一下通信过程中IP数据报头情况。如下图,可以看到该数据报是由主机192.168.1.107发往61.149.23.83的,点击展开Internet Protocol Version 4。
结合上面IP报文格式的介绍,那么现在我们对该IP数据报头各字段情况可以看得一目了然。
1.Vesion:版本。其值为0100=4。
2.Header Length:首部长度。其值为0101=5,表示该IP首部为固定长度20 bytes。
3.Differentiated Services Field:区分服务字段。其值为0x00=0,表示没有用到差分服务。
4.Total Length:总长度。可以看到该数据报的长度为83字节。
5.Identification:标识。其值为0x7be6=31718。
6.Flags:标志。其3位值都为0。
7.Fragment Offset:片偏移。其值为0。
8.Time to live:生存时间。其值为64。
9.Protocol:协议。其值为17,表示将数据部分交由上层UDP协议进行处理。
10.Header Checksum:首部检验和。
这里显示“validation disabled”(即禁止校验),这是因为有时校验和会由网卡计算,因此Wireshark抓到的本机发送的数据包的校验和都是错误的,这样检验校验和根本没有意义,所以Wireshark不自动做校验和的校验。
11.Source Address:源地址。这里可以看到源IP地址为192.168.1.107。
12.Destination Address:目的地址。这里可以看到目的IP地址为:61.149.23.83。
以上就是网络传输中IP数据报文的相关内容并结合Wireshark工具加以分析,关于更多网络知识可以加个关注,另外对Wireshark数据包分析感兴趣的同学可以订阅专栏内容~
相关推荐
- 「layui」表单验证:验证注册
-
注册界面手动验证获取短信验证码代码原文<!DOCTYPEhtml><htmllang="zh"><head>&...
- Full text: Joint statement between China and Kenya on creating an inspiring example in the all-weather China-Africa community with a shared future for the new era
-
JointStatementBetweenthePeople'sRepublicofChinaandtheRepublicofKenyaonCreatinganInspi...
- 国际组织最新岗位信息送给你
-
国际刑警组织PostingTitleITLogisticsManagerGrade5DutyStationAbidjan,IvoryCoastDeadlineforApplicatio...
- 【新功能】Spire.PDF 8.12.5 支持设置表单域的可见与隐藏属性
-
Spire.PDF8.12.5已发布。该版本新增支持设置表单域的可见与隐藏属性、添加自定义的元数据以及给PDF文档的元数据添加新的命名空间。本次更新还增强了PDF到DOCX和图片的转换...
- AI curbs show Biden's rejection of cooperation
-
AIcurbsshowBiden'srejectionofcooperation:ChinaDailyeditorial-Opinion-Chinadaily.com.cnT...
- “煤气灯效应”上热搜,这几种有毒的“情感关系”也要注意了……
-
近日,“煤气灯效应”(theGaslightEffect)再次进入公众视野并登上热搜,引发网友广泛关注。那么,什么是“煤气灯效应”?以“爱”之名进行情绪控制在心理学中,通过“扭曲受害者眼中的真实”...
- Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门
-
一、前言在推流领域,尤其是监控行业,现在主流设备基本上都是265格式的视频流,想要在网页上直接显示监控流,之前的方案是,要么转成hls,要么魔改支持265格式的flv,要么265转成264,如果要追求...
- 写给运维的Nginx秘籍
-
要说Web服务器、代理服务器和调度服务器层面,目前使用最大的要数Nginx。对于一个运维工程师日常不可避免要和Nginx打交道。为了更好地使用和管理Nginx,本文就给大家介绍几个虫虫日常常用的秘籍。...
- 突破亚马逊壁垒,Web Unlocker API 助您轻松获取数据
-
在数据驱动决策的时代,电商平台的海量数据是十足金贵的。然而,像亚马逊这样的巨头为保护自身数据资产,构建了近乎完美的反爬虫防线,比如IP封锁、CAPTCHA验证、浏览器指纹识别,常规爬虫工具在这些防线面...
- 每日一库之 logrus 日志使用教程
-
golang日志库golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持.所以催生了很多第三方...
- 对比测评:为什么AI编程工具需要 Rules 能力?
-
通义灵码ProjectRules在开始体验通义灵码ProjectRules之前,我们先来简单了解一下什么是通义灵码ProjectRules?大家都知道,在使用AI代码助手的时候,有时...
- python 面向对象编程
-
Python的面向对象编程(OOP)将数据和操作封装在对象中,以下是深度解析和现代最佳实践:一、核心概念重构1.类与实例的底层机制classRobot:__slots__=['...
- Windows系统下常用的Dos命令介绍(一)
-
DOS是英文DiskOperatingSystem的缩写,意思是“磁盘操作系统”。DOS主要是一种面向磁盘的系统软件,说得简单些,DOS就是人给机器下达命令的集合,是存储在操作系统中的命令集。主要...
- 使用 Flask-Admin 快速开发博客后台管理系统:关键要点解析
-
一、为什么选择Flask-Admin?Flask-Admin是Flask生态中高效的后台管理框架,核心优势在于:-零代码生成CRUD界面:基于数据库模型自动生成增删改查功能-高度可定制...
- Redis淘汰策略导致数据丢失?
-
想象一下,你的Redis服务器是一个合租宿舍,内存就是床位。当新数据(新室友)要住进来,但床位已满时,你作为宿管(淘汰策略)必须决定:让谁卷铺盖走人?Redis提供了8种"劝退"方案,...
- 一周热门
- 最近发表
-
- 「layui」表单验证:验证注册
- Full text: Joint statement between China and Kenya on creating an inspiring example in the all-weather China-Africa community with a shared future for the new era
- 国际组织最新岗位信息送给你
- 【新功能】Spire.PDF 8.12.5 支持设置表单域的可见与隐藏属性
- AI curbs show Biden's rejection of cooperation
- “煤气灯效应”上热搜,这几种有毒的“情感关系”也要注意了……
- Qt编写推流程序/支持webrtc265/从此不用再转码/打开新世界的大门
- 写给运维的Nginx秘籍
- 突破亚马逊壁垒,Web Unlocker API 助您轻松获取数据
- 每日一库之 logrus 日志使用教程
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- HTML 参考手册 (28)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)