计算机网络传输中IP数据报文格式详解并结合Wireshark深入分析
zhezhongyun 2025-05-11 19:39 21 浏览
我们说因为有了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数据包分析感兴趣的同学可以订阅专栏内容~
相关推荐
- 一篇文章带你了解SVG 渐变知识(svg动画效果)
-
渐变是一种从一种颜色到另一种颜色的平滑过渡。另外,可以把多个颜色的过渡应用到同一个元素上。SVG渐变主要有两种类型:(Linear,Radial)。一、SVG线性渐变<linearGradie...
- Vue3 实战指南:15 个高效组件开发技巧解析
-
Vue.js作为一款流行的JavaScript框架,在前端开发领域占据着重要地位。Vue3的发布,更是带来了诸多令人兴奋的新特性和改进,让开发者能够更高效地构建应用程序。今天,我们就来深入探讨...
- CSS渲染性能优化(低阻抗喷油器阻值一般为多少欧)
-
在当今快节奏的互联网环境中,网页加载速度直接影响用户体验和业务转化率。页面加载时间每增加100毫秒,就会导致显著的流量和收入损失。作为前端开发的重要组成部分,CSS的渲染性能优化不容忽视。为什么CSS...
- 前端面试题-Vue 项目中,你做过哪些性能优化?
-
在Vue项目中,以下是我在生产环境中实践过且用户反馈较好的性能优化方案,整理为分类要点:一、代码层面优化1.代码分割与懒加载路由懒加载:使用`()=>import()`动态导入组件,结...
- 如何通过JavaScript判断Web页面按钮是否置灰?
-
在JavaScript语言中判断Web页面按钮是否置灰(禁用状态),可以通过以下几种方式实现,其具体情形取决于按钮的禁用方式(原生disabled属性或CSS样式控制):一、检查原生dis...
- 「图片显示移植-1」 尝试用opengl/GLFW显示图片
-
GLFW【https://www.glfw.org】调用了opengl来做图形的显示。我最近需要用opengl来显示图像,不能使用opencv等库。看了一个glfw的官网,里面有github:http...
- 大模型实战:Flask+H5三件套实现大模型基础聊天界面
-
本文使用Flask和H5三件套(HTML+JS+CSS)实现大模型聊天应用的基本方式话不多说,先贴上实现效果:流式输出:思考输出:聊天界面模型设置:模型设置会话切换:前言大模型的聊天应用从功能...
- ae基础知识(二)(ae必学知识)
-
hi,大家好,我今天要给大家继续分享的还是ae的基础知识,今天主要分享的就是关于ae的路径文字制作步骤(时间关系没有截图)、动态文字的制作知识、以及ae特效的扭曲的一些基本操作。最后再次复习一下ae的...
- YSLOW性能测试前端调优23大规则(二十一)---避免过滤器
-
AlphalmageLoader过滤器是IE浏览器专有的一个关于图片的属性,主要是为了解决半透明真彩色的PNG显示问题。AlphalmageLoader的语法如下:filter:progid:DX...
- Chrome浏览器的渲染流程详解(chrome预览)
-
我们来详细介绍一下浏览器的**渲染流程**。渲染流程是浏览器将从网络获取到的HTML、CSS和JavaScript文件,最终转化为用户屏幕上可见的、可交互的像素画面的过程。它是一个复杂但高度优...
- 在 WordPress 中如何设置背景色透明度?
-
最近开始写一些WordPress专业的知识,阅读数奇低,然后我发一些微信昵称技巧,又说我天天发这些小学生爱玩的玩意,写点文章真不容易。那我两天发点专业的东西,两天发点小学生的东西,剩下三天我看着办...
- manim 数学动画之旅--图形样式(数学图形绘制)
-
manim绘制图形时,除了上一节提到的那些必需的参数,还有一些可选的参数,这些参数可以控制图形显示的样式。绘制各类基本图形(点,线,圆,多边形等)时,每个图形都有自己的默认的样式,比如上一节的图形,...
- Web页面如此耗电!到了某种程度,会是大损失
-
现在用户上网大多使用移动设备或者笔记本电脑。对这两者来说,电池寿命都很重要。在这篇文章里,我们将讨论影响电池寿命的因素,以及作为一个web开发者,我们如何让网页耗电更少,以便用户有更多时间来关注我们的...
- 11.mxGraph的mxCell和Styles样式(graph style)
-
3.1.3mxCell[翻译]mxCell是顶点和边的单元对象。mxCell复制了模型中可用的许多功能。使用上的关键区别是,使用模型方法会创建适当的事件通知和撤销,而使用单元进行更改时没有更改记...
- 按钮重复点击:这“简单”问题,为何难住大半面试者与开发者?
-
在前端开发中,按钮重复点击是一个看似不起眼,实则非常普遍且容易引发线上事故的问题。想象一下:提交表单时,因为网络卡顿或手抖,重复点击导致后端创建了多条冗余数据…这些场景不仅影响用户体验,更可能造成实...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- 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)
- CSS 水平对齐 (Horizontal Align) (30)
- opacity 属性 (32)