当前位置: 首页 > news >正文

IP首部格式[转载]

TCP 传输首部是 IP首部,所以把IP首部格式 拿过来研究下,看IP首部解码过程;
 
来源:51CTO博客,地址: http://lihuan.blog.51cto.com/4391550/799911 
 
原文如下:
 

 IP包首部格式

IPv4首部一般是20字节长。在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为080016。 IPv4提供不同,大部分是很少用的选项,使得IPv4包首部最长可扩展到60字节(总是4个字节4个字节的扩展)

0

4

8

12

16

19

24

31

版本

首部长度

服务类型

长度

认证

标志

段偏移量

TTL

协议

校验和

源IP地址

目的IP地址

选项 ...

IP包头字段说明

版本:4位,指定IP协议的版本号。

包 头长度(IHL):4位,IP协议包头的长度,指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这 个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4 = 20字节)。就是说,它表示的是包头的总字节数是4字节的倍数。

服务类型:定义IP协议包的处理方法,它包含如下子字段

过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

延迟字段:1位,取值:0(正常)、1(期特低的延迟)

流量字段:1位,取值:0(正常)、1(期特高的流量)

可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

成本字段:1位,取值:0(正常)、1(期特最小成本)

未使用:1位

长度:IP包的总长

认证:

标志:是一个3位的控制字段,包含:

保留位:1位

不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)

更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)


段偏移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。

TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。

协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP(1)、TCP(6)、UDP(17)。

校验和:16位,是IPv4数据报包头的校验和。

源地址(Source Address,SA)

发送IP数据包的IP地址,占32位。

目的地址(Destination Address)

接收IP数据包的IP地址,也占32位。

选项(Options)+填充(Padding)

这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。共32位。这些选项通常包括:

? 安全和处理限制:用于军事领域

? 记录路径:让每个路由器都记下它的IP地址

? 时间戳:让每个路由器都记下它的IP地址和时间

? 宽松的源站选路:为数据报指定一系列必须经过的IP地址

? 严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。

以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项。选项字段一直都是以32位作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32位的整数倍(这是首部长度字段所要求的)。

从以上IP包头格式可以看出,IP协议包头大小也有两种:当没有“选项”这个字段时,为160位,20个字节;当有“选项”字段时为192位,24个字节。它与TCP协议包头大小是一样的。

相关文章:

  • Cisco配置VLAN+DHCP中继代理+NAT转发上网
  • 让angular-cli工程基于ExpressJS服务,为对接后台API做准备
  • 面空间数据中网格索引和四叉树索引的结合及优化的一种方案
  • Python学习(20):Python函数(4):关于函数式编程的内建函数
  • socket.io中文文档
  • Digester 的使用(tomcat中server.xml and web.xml 的加载)
  • 我的MYSQL学习心得(九) 索引
  • nginx(二)nginx的安装
  • 聚合查询
  • 《Spring Boot开发:从0到1》大纲结构
  • mapdb 如何存数据
  • Unity 框架篇
  • IntelliJ IDEA 14.1.4导入项目启动报错:Error during artifact deployment.[组件部署期间出错]...
  • linux tree命令以树形结构显示文件目录结构
  • lzma解压
  • ----------
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Android开源项目规范总结
  • eclipse(luna)创建web工程
  • gcc介绍及安装
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Meteor的表单提交:Form
  • Redux 中间件分析
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于Java中分层中遇到的一些问题
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何在GitHub上创建个人博客
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 学习笔记:对象,原型和继承(1)
  • FaaS 的简单实践
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #100天计划# 2013年9月29日
  • #pragma once与条件编译
  • (09)Hive——CTE 公共表达式
  • (14)Hive调优——合并小文件
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (蓝桥杯每日一题)love
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原)本想说脏话,奈何已放下
  • .gitignore文件—git忽略文件
  • .htaccess 强制https 单独排除某个目录
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET MVC第三章、三种传值方式
  • .NET Reactor简单使用教程
  • .net 按比例显示图片的缩略图
  • .net/c# memcached 获取所有缓存键(keys)
  • .net反编译的九款神器
  • .NET中使用Redis (二)