上次和大家聊了聊以太网的帧格式,本文会讲解IP数据报格式的定义。

==

开门见山,先上图:

任何一个IP数据报都是由首部和数据两部分组成,而且首部基本是固定长度的,长度为20字节。这一点很重要,其他都不记得了,这一点也要记得哦!

首部其实也分为两部分,即固定部分和可变部分,固定部分出的长度是20字节,可变部分的长度是可变的,但用的机会很少。

下面,我们就逐个域的来分析IP数据报:

【版本】- 4bit

用来标识IP协议的版本,最常见的就是4和6,分别代表IPv4和IPv6。

【首部长度】- 4bit

4bit所能表示的最大数值就是15了,而IP数据报标准规定,“首部长度”的单位是4字节(32bit),因此,我们在计算首部长度时,需要用其值乘以4字节,才是首部的实际长度。

可见,最大的首部长度是15×4=60字节,而最小的首部长度则是固定部分的长度,即20字节。

如果出现首部长度不是4字节的整数倍时,需要在最后一个字段加以填充,务必保证首部长度是4字节的整数倍。这样,我们的数据部分就总是从4字节的整数倍处开始。

【服务类型】- 8bit

此域常被称为TOS(Type Of Service),其中前3bit代表本数据报的优先级;D表示要求更低的时延;T表示要求更高的吞吐;R表示要求更高的可靠性;C表示要求选择代价更小的路由;第8个bit目前没有被使用。

上面这种分类方式,其实已很少应用,因为有时候这些要求的组合会使得调度策略产生矛盾,比如一条路由是高吞吐但不可靠,另一条是低吞吐但可靠,那么当用户同时要求T和R时,就会产生矛盾。因此,IETF组织将TOS重新进行了定义,称为DS(Differentiated Service),由于此标准只在特定环境特定设备中才有应用,所以就不在此赘述。

【总长度】- 16bit

此处的总长度是指首部长度和数据长度之和,单位仍然是字节。

16bit可以表示的最大值为65535,所以IP数据报的最大长度可以到达65535字节。但由于以太网的MTU(Maximum Transmission Unit)最大为1500字节,所以如果IP协议是运行在以太网的话,就会遇到需要分片的情况。

【标识】- 16bit

此域是一个计数器,所产生的值即为IP数据报的标识。当IP数据报的长度超过下层协议所规定的MTU的话,就要对IP数据报进行分片。在这种情况下,就是用这个域在表示同组的IP数据报的。

【标志】- 3bit

这3bit中只有前2bit有用,中间一位表示DF(don’t fragment),而最低位(最右侧的bit)表示MF(more fragment)。

DF等于1的话,表示此IP数据报“不能分片”。只有在DF等于0时,才允许对其进行分片。

MF等于1的话,表示此IP数据报后面还有分片的数据报,而MF等于0时,则表示当前的IP数据报是这一组中最后一个数据报。

【片偏移】- 13bit

此域表示当IP数据报超过MTU而被分拆成多片后,每一片在原IP数据报中的位置。此偏移量的参照起点是原数据报的数据部分的起点。

要注意的是,片偏移的单位是“8字节”,也就是说,每个分片的长度必须是8字节的整数倍。

【生存时间】- 8bit

此域也叫TTL(Time To Live),也可以叫做“寿命”。在IP数据报中是以“所经过的路由器跳数”来计算的。每经过一个路由器,此值都会减一,当TTL为0时,路由器便会丢弃该包。

默认情况下Linux的TTL为255,windowsXP为128,windows98为32,UNIX为255。更全的TTL统计,可以参考[这里]

【协议】- 8bit

此域指出数据报携带的数据是使用了哪一种协议,大部分情况下TCP(值为6)或UDP(值为17)。

【首部校验和】- 16bit

此域是针对IP数据报的首部,进行校验。注意校验的只有首部,不包括数据部分。

【源站IP地址】- 32bit

即来源处的IP地址。

【目的站IP地址】- 32bit

即目的处的IP地址。

计算机网络协议包头赏析-IP的更多相关文章

  1. 计算机网络协议包头赏析-UDP

    之前我们已经针对以太网.IP.TCP协议,进行了包头赏析.本次,我们继续UDP协议包头赏析. 提到TCP,想必大家会有所了解,它早已是家喻户晓的一个网络协议了,而UDP远没有他的大哥那么的有名,所以, ...

  2. 计算机网络协议包头赏析-TCP

    仍然先把TCP报文段的格式放在这里,然后我们看图说话: TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加. 下面, ...

  3. 计算机网络协议OSI TCP/IP协议--001

    网桥:连接同构的LAN的网络互联设备,(同构的LAN 网是,应用层到逻辑层)   实  现的功能是:MAC子层和物理层.1.帧的发送与接收.2.缓冲的管理.3.协议转换. 路由器:在网络层实现互联,他 ...

  4. 2.1.5 计算机网络协议: TCP/IP

    应用程序阶段:妳打开浏览器,在浏览器上面输入网址列,按下 [Enter].此时网址列与相关数据会被浏览器包成一个数据, 并向下传给 TCP/IP 的应用层: 应用层:由应用层提供的 HTTP 通讯协议 ...

  5. 一些重要的计算机网络协议(IP、TCP、UDP、HTTP)

    一.计算机网络的发展历程 1.计算机网络发展 与其说计算机改变了世界,倒不如说是计算机网络改变了世界.彼时彼刻,你我都因网络而有了交集,岂非一种缘分? 计算机与网络发展大致经历如下过程:

  6. 计算机网络自学之路------IP协议(2)

    之前忘记说了,这些内容都是边看视频边写的,视频出自西安交通大学. 本期说的是IP分组转发的内容,里面详细介绍了IP协议跟ARP协议,最后再给出一个例子,说明这两个协议在网络中传输的具体过程. 1)Ip ...

  7. 计算机网络自学之路------IP协议(1)

    1)TCP/IP模型与OSI对应 2)TCP/IP集每层主要协议 3)IP协议 4)IP地址的命名与使用 5)子网与子网掩码 1)TCP/IP模型与OSI对应关系 我们看到,TCP/IP只有四层与OS ...

  8. 计算机网络知识之TCP/IP协议簇

    OSI参考模型 OSI的来源         OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网 ...

  9. 计算机网络基础之TCP/IP 协议栈

    计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...

随机推荐

  1. ZBrush常用3D术语

    转自:http://www.zbrushcn.com/jichu/zbrush-cy-3dsys.html Polygon(多边形) 多边形是一种形状,通过在3D空间连接几个点而创建,最简单的形式就是 ...

  2. [UE4][Canvas]用C++代码绘制血条(HealthBar)

    转自:http://aigo.iteye.com/blog/2275110 参考自Epic官方项目StrategyGame 血条效果: StrategyHUD.h StrategyHUD.cpp

  3. 数据迁移_老集群RAC迁移数据恢复到新集群RAC

    数据迁移_老集群RAC迁移数据恢复到新集群RAC 作者:Eric 微信:loveoracle11g 1.把老集群RAC备份的数据远程拷贝到新集群RAC [root@old-rac-node1 ~]# ...

  4. WAV和PCM的关系和区别

    什么是WAV和PCM? WAV:wav是一种无损的音频文件格式,WAV符合 PIFF(Resource Interchange File Format)规范.所有的WAV都有一个文件头,这个文件头音频 ...

  5. delphi正则表达式学习笔记(一)

    在 Delphi 中是没有自带的正则表达式库的,在网上能找到的用于 Delphi 的正则表达式类大体上有两个,分别是 PerlRegEx 和 RegExpr. 前者相当强大,但发布程序时需要带上他的一 ...

  6. tips:Java的Random类和Random函数

    tips:Java的Random类和Random函数! 随机数是一个很有趣的东西,在java中可以通过下面这2种方法得到: (1)Random类: Random类是java.util.Random这个 ...

  7. Cloudera HUE大数据可视化分析

    下载版本 cdh版本 http://archive-primary.cloudera.com/cdh5/cdh/5/ 我们下载这个 这个是我下载好的 我们解压一下 下载需要的系统包 yum insta ...

  8. Linux性能优化 第二章 性能工具:系统CPU

    2.1 CPU性能统计信息 2.1.1运行队列统计 在Linux中,一个进程要么是可运行的,要么是阻塞的(正在等待一个事件的完成).阻塞进程可能在等待从I/O设备来的数据,或者是系统调用的结果如果一个 ...

  9. @Autowired与@Resource 详细诠释和区别(附带例子)

    @Autowired 与@Resource:1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配( ...

  10. 【Jmeter自学】常见错误类型(九)

    ==================================================================================================== ...