文章目录

  • 前言
    • 前言

系列文章:
《Wireshark分析Netty建链过程( tcp三次握手、osi模型)》

《IPV4数据报头部格式》
《Wireshark分析RST消息》

前言

osi模型中涉及多个消息头,本篇文章特指tcp ip的头。


前言

发送端的网络层在收到它的上一层——传输层发来的数据段时,需要通过网络层协议将其封装成数据报,也就是加上网络层IP协议(在此仅以IP协议为例进行介绍)头部。IP协议头部主要是源和目的网络的IP地址,以便可以数据分段传输到目的网络中。然后数据包向下传输,到了数据链路层后又要封装成数据帧。
与在数据帧格式中包括帧头和数据部分类似,一个IP数据报也包括报头和数据这两个部分,如上图所示。其中数据部分就是来自传输层的完整数据段,而报头部分是为了正确传输数据报而增加的网络层IPV4/IPV6协议信息。

格式
版本(Version)
版本字段指定了IP数据报中使用的IP协议版本,占四位。如过协议是IPV4,则值为0100,对应16进制为4;IPV6,则值为0110,对应16进制为6。

头部长度(Header Length)
头部长度字段指示IP数据报头部的总长度,IP数据报头部的总长度以4字节为单位,该字段占4位。当报头中无选项字段时,报头的总长度为5,也就是5×4=20字节(此时,报头长度的值为0101)。这就是说IP数据报头部固定部分长度为20字节。当IP头部长度为1111时,头部的固定长度为15×4=60字节。但报头长度必须是32位(四字节)的整数倍,如果不是,需要在选项字段的填充(PAD)字段中补0凑齐

区分服务(Differentialted Services)
最开始IP数据报的这个字段为优先级和服务类型字段,又称为服务类型(ToS)字段,用于表示数据报的优先级和服务类型,占八位。它包括一个3位长度的优先级、4位长度的标志位。标志位分别是D(Delay延迟)、T(Throughput吞吐量)、R(Reliability可靠性)和C(Cost开销),分别表示延迟、吞吐量、可靠性和开销值,用来获得更好的服务。最高1位未用。
1998年IETF在RFC2474中把IP数据报中ToS字段改名为服务字段,同样为8位,前6位构成DSCP(Different Services Code Point,区分服务码点),是IP优先级和服务类型字段的组合,定义了0~63共64个优先级。最后两位未使用。无论是哪种版本,该字段只有在使用区分服务时才起作用,如果没有区分服务,则该字段值为0。

总长度(Total Length)
总长度字段标识整个IP数据报的总长度,包括报头和数据部分,整个IP数据报的总长度以字节为单位该字段占16位。由此可得出,IPv4数据报的最大长度为216−1字节即65535字节(64KB)。
说明:在网络层下面的每一种数据链路层都有自己的格式,其中包括表示数据字段的最大长度,这称为最大传送单元(Maximum Transfer Unit,MTU)。当一个数据报封装成链路层的帧时,此数据报的总长度(包括报头和数据部分)一定不能超过下面的数据链路层的MTU值

标识(Identification)
标识字段用于表示IP数据报的标识符,占16位,每个IP数据报有一个唯一的标识符。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给整个标识字段。但整个标识并不是序号,因为IP是无连接服务,数据报不存在按序接受的问题。当数据报由于长度超过下面数据链路层的MTU(最大传输单元)值而必须分段的时候,这个标识符的值就被复制到所有的数据报分段的标识字段中。相同的标识字段的值分段后的各数据报分段最后能正确地组装成原来的数据报。

标志(Flags)
标志字段用以指出该IP数据报后面是否还有分段,也就是这个字段时分段标志,占3位。目前只有前两位有意义:最低以为记为MF(More Fragment),如果MF=1,则表示后面还有分段,如果MF=0表示这已是某个数据报的最后一个分段;中间一位记为DF(Don’t Fragment),当DF=1时表示不允许分段,DF=0表示允许分段;最高1位没有使用。

段偏移(Fragment Offset)
段偏移字段用以指出该分段在数据报中的相对位置,也就是说,相对于用户数据字段的起点,该分段从何处开始,占13位。若有分段,段偏移以8字节为偏移单位,即每个分段的长度一定是8字节(64位)的整数倍。第一个分段偏移值就是0 0000 0000 0000,如果第一个分段一共是64字节,则0 0000 0000 1001,相当于10进制数的9,因为从第9个“8字节”数据块开始的。如果没有分段,则该字段值为0。

生存时间(Time To Live)
生存时间字段用来标识IP数据报在网络中传输的有效期,以秒来计数,占8位。最初的设计是以秒为单位,没经过一个路由器时,就在TTL(Time To Live)中减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1s,就把TTL值减1。TTL的建议值是32s,最长是28−1=255s。现在通常认为这个TTL是指数据报允许经过的路由器数,每经过一个路由器,则TTL减1,当TTL值为0时,就丢弃这个数据报。设定生存时间是为了防止数据报在网络中无限制地循环转发。

协议(Protocol)
协议字段用来标识此IP数据报在传输层所采用的协议类型(如TCP、UDP或ICMP等等),以便使目的主机的IP层直到应将数据部分上交给哪个处理过程,占8位。如TCP的协议号是6,等于二进制的0000 1010,UDP的协议号是17,等于二进制的0001 0001。

校验和(Checksum)
校验和字段用来检验IP数据报的报头部分(不包过“数据”部分)在传输到接收端后是否发生了变化,占16位。这是因为数据报每经过一个路由器,路由器都要重新计算一下报头检验和(因为一些字段,如生存时间、标识、段偏移等都可能发生变化),不检验数据部分可减少计算的工作量。

检验和的计算方法
利用校检和字段检验报头部分数据正确性的基本原理是:现在发送端校检和字段中填上一个特定的值,然后再接收端把包括校检和字段在内的报头部分进行二进制反码求和,再取反,如果结果为0,则表示报头部分在传输过程中没有发生变化,否则表示在传输过程中出现了差错。从以上可以看出,这里最关键的是在发送端计算出这个校检和的值。步骤如下:

  1. 把IP数据报报头中的校检和字段置0。
  2. 把头部看成由16位(2字节)位单位得数字组成,对每16位的二进制反码进行求和。如报头长度不是16位的整数倍数,则用0填充到16位的整数倍数。若此时校验和字段值为0,可以不计,因为0的反码仍为0。
  3. 以上得到的结果就是我们要求的校验和字段值,系统自动将其填入IP数据报报头的检验和字段中。
  4. 在接收端中,同样按照以16位为单位,对IP数据报报头部分进行二进制反码求和,再取反,如果结果为0,表示报头部分在传输过程中没有发生变化,否则表示发生了差错。但要注意,此时因位校验和字段已不再是0了,而是等于除了检验和字段外的其他字段的反码之和。现在在对校验码和字段值取反求和,再与其他字段的反码之和(相当于原来“校验和”字段的值)相加,结果肯定是全为1,因为这两个值互为反码;再取反后,结果肯定为0。这就是校验和的基本原理。

例子
假设有3个数(为了简便,在此均用4位表示):2(0010)、3(0011)、C(代表校验和字段值),计算C,即求2和3的反码之和,得到9(1001)。现在假设把这3个数(2,3,C)传送到接收端。在接收端也要对这3个数进行反码求和。因为2和3这两个的反码之和我们在计算C时已经计算过了,就是9(1001),现在只需要对C(校验和字段值)进行求反,得到6(0110)。把1001和0110相加,得到15(1111)。再取反,得到0(0000)。这就是这3个数在传输过程中没有出现差错的情况下得到的,这就是校验和的校验原理。

源地址/目的地址(Source Address/Destination Address)
源地址/目的地址这两个字段分别表示该IP数据报发送者和接受者的IP地址,各占32位。在这个数据报传送过程中,无论经过什么路由,无论如何分段,此两字段一直保持不变。

选项(Option)
选项字段支持各种选项,提供扩展余地。根据选项的不同,该字段时可变长,从1字节到40字节。用来支持拍错、测量以及安全等措施。作为选项,用户可以使用,也可以不使用它们。但作为IP协议的组成部分,所有实现IP协议的设备都必须能处理IP选项。在使用选项的过程中,如果造成了IP数据报的报头不是32位的整数倍,这时需要后面的填充字段凑齐。如果恰好是整数倍,则不需要填充字段。

【网络】IPV4数据报头部格式相关推荐

  1. IPv6数据报头部格式

    文章摘自书籍<深入理解计算机网络 王达 机械工业出版社> IPv4数据报头格式请点击此处 IPv6数据报头部格式 RFC2460定义了IPv6数据报格式.总体结构上,IPv6数据报格式与I ...

  2. ipv6头部格式 c语言,2.2.1 IPv6和IPv4基本头部格式

    2.2  IPv6报文 2.2.1  IPv6和IPv4基本头部格式 根据IPv4报文中存在的问题,IPv6报文头格式与IPv4相比进行了一些改动.IPv6头部结构遵循以下新规则: 基本头部的固定长度 ...

  3. ipv6头部格式 c语言,IPv6和IPv4基本头部格式

    原帖:http://book.51cto.com/art/201204/329740.htm 根据IPv4报文中存在的问题,IPv6报文头格式与IPv4相比进行了一些改动.IPv6头部结构遵循以下新规 ...

  4. Cisco ❀ IPV4协议数据报头部

    IPV4 数据报头部格式 图解 图片来自:http://blog.163.com/qhj4433210@126/blog/static/165975282201592251248584/ 图片来自:h ...

  5. IPv4数据报格式及其语义

    IPv4数据报格式及其语义 一.IP数据报的格式如下图所示 版本 首部长度 服务类型 数据报长度 16比特标识 标志 13比特片偏移 寿命 上层协议 首部检验和 32比特源IP地址 32比特目的IP地 ...

  6. IPv4数据报格式和Ipv6数据报格式(长文,详细解释每个字段)

    IPv4数据报介绍 IPv3数据报结构 版本号.这4比特规定了数据包的IP协议版本.通过查看版本号,路由器能够确定如何 解释IP数据报的剩余部分.因为不同版本的IP数据包的格式是不一样的. 首部长度. ...

  7. 【计算机网络】湖科大微课堂笔记 p54-56 IPv4数据报的首部格式、网际控制报文协议ICMP、虚拟专用网VPN与网络地址转换NAT

    文章目录 IPv4数据报的首部格式 小结 一些例题 网际控制报文协议ICMP 小结 一些例题 虚拟专用网VPN与网络地址转换NAT 小结 IPv4数据报的首部格式 版本 首部长度.可选字段.填充字段 ...

  8. 嵌入式网络的基础知识 -- 数据包的组装、拆解、各头部格式

    视频学习链接如下:https://www.bilibili.com/video/BV1qf4y1D7NU?p=11&spm_id_from=333.880.my_history.page.cl ...

  9. 详解 ipv4 数据报头格式

    ipv4 头部数据格式 IPv4数据报,头部大小可变,4位的IHL字段被限制为15个32位字(60)字节.一个典型的IPv4头部包含20字节.源地址和目的地址的长度位32位.第二个32位字的大部分用于 ...

最新文章

  1. 文件上传oss服务器
  2. 前端工程师需要掌握的技能
  3. 265. To B 端 Web 页面上线前 checklist
  4. 自己去年用intraweb写的模仿动网论坛的原程序,用的是动网论坛的数据库
  5. Laravel5.2之Filesystem-从Dropbox中下载文件到AWS S3
  6. 【bzoj2423】最长公共子序列[HAOI2010](dp)
  7. summary+plan
  8. 树莓派开机运行python脚本_【树莓派】开机自启动脚本方法之一(.Desktop文件)...
  9. d3.js中的选择元素
  10. LeetCode 1220. 统计元音字母序列的数目(DP)
  11. nand flash 原理简介
  12. web元素定位之------日历控件的定位
  13. Eclipse汉化教程2021新版
  14. 微信小程序选择开始时间和结束时间控件
  15. 小恐龙游戏python_自动玩Chrome浏览器的小恐龙游戏
  16. js 获取到number的length
  17. matlab 水箱fuzzy,matlab中使用fuzzy工具箱
  18. 08年计算机组成原理自考试卷,2008年04月自学考试02318《计算机组成原理》试题...
  19. 【Java】【MySnake】仿贪吃蛇小游戏开源代码(持续更新)
  20. 笃行务实 布萌区块链选择数字资产作为区块链行业突破口

热门文章

  1. 银行自动化运维项目前期规划八大难点
  2. 使用Protostuff实现序列化与反序列化
  3. 沉痛悼念老同学叶光立逝世
  4. 从Offer收割机到延毕到失业再到大厂996,兵荒马乱的2022年末总结
  5. 2021年青岛十九中高考成绩查询,2021年青岛高中录取分数线是多少及高中排名榜...
  6. 香港恒生指数股指期货做单直播实时更新及新手做国际期货的体验
  7. 火山小视频伪原创教程 | 如何制作伪原创视频
  8. shell中单引号、双引号与反引号的区别(学习笔记,摘抄版)
  9. 市场调研-全球与中国养老服务平台市场现状及未来发展趋势
  10. img标签和p标签是行内元素还是块级元素?以及p标签中可以放img标签吗?