IP协议是我们学习网络协议最开始,也是最基础的协议。那么今天我们主要介绍一下有关于IP协议头格式的基本状态。那么就让我们具体看以下有关于IP协议头格式和Sniiffer Portable的IP头的相关内容吧。IP(Internet Protocol,因特网协议)是OSI第三层——网络层协议,本节仅以IPv4版本为例进行介绍。IP协议也是一个无连接的协议,主要就是负责在主机间寻址,并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递。另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。

IP协议头格式

数据在经过IP网络层时,也会对数据进行封装,也就有相应的IP协议包头了。在以太网帧中,IPv4包头紧跟着以太网帧头,同时以太网帧头中的协议类型值设置为十六进制的0800。

◆版本(Version)

指定IP协议的版本号。因为目前仍主要使用IPv4版本,所以这里的值通常是 0x4 (注意封包使用的数字通常都是十六进位的)。占4位。

◆包头长度(Internet Header Length,IHL)

指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5。占4位。由于它是一个4比特字段,因此首部最长为60个字节,但实际上目前最多仍为24个字节。

◆服务类型(Type of Service,TOS)

定义IP封包在传送过程中要求的服务类型,共由8个bit组成其中每个bit的组合分别代表不同的意思。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。具体如下:

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

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

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

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

◆…..0.(ECN-Capable Transport):显式拥塞指示传输字段,占1位。由源端设置,以显示源端节点的传输协议是支持ECN(Explicit Cogestion Notifica tion,显式拥塞指示)的。取值:0(不支持ECN)、1(支持ECN)

◆.......0(Congestion Experienced):拥塞预警字段,占1位。取值:0(正常,不拥塞)、1(拥塞)

◆包长度(Total Length,TL)

IP协议头格式中指定IP包的总长,通常以byte做单位来表示该封包的总长度此数值包括标头和数据的总和。它以字节为单位,占16位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。

由于该字段长16比特,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分段。而且,主机也要求不能接收超过576字节的数据报。由于TCP把用户数据分成若干段,因此一般来说这个限制不会影响TCP。UDP的应用(如RIP、TFTP、BOOTP、DNS、SNMP等),都限制用户数据报长度为512字节,小于576字节。但是,事实上现在大多数的实现允许超过8192字节的IP数据报。

总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46个字节(将在本章后面介绍),但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。

◆标识(Identification)

每一个IP封包都有一个16位的唯一识别码。当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了。占16位。

标识字段唯一地标识主机发送的每一份数据报。通常每发送一份消息它的值就会加1。RFC791认为标识字段应该由让IP发送数据报的上层来选择。假设有两个连续的IP数据报,其中一个是由TCP生成的,而另一个是由UDP生成的,那么它们可能具有相同的标识字段。尽管这也可以照常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个IP数据报,IP层都要把一个内核变量的值加1,不管交给IP的数据来自哪一层。内核变量的初始值根据系统引导时的时间来设置。

◆标记(Flags)

这是当封包在传输过程中进行最佳组合时使用的3个bit的识别记号。占3位。

◆000(Reserved Fragment):保留分段。当此值为0的时候表示目前未被使用。

◆.0.(Don't Fragment):不分段。当此值为0的时候表示封包可以被分段,如果为1则不能被分割。

◆..0( More Fragment):更多分段。当上一个值为0时,此值为0就示该封包是最後一个封包,如果为1则表示其後还有被分割的封包。

◆分段偏移(Fragment Offset,FO)

IP协议头格式规定当封包被分段之后,由于网路情况或其它因素影响其抵达顺序不会和当初切割顺序一至,所以当封包进行分段的时候会为各片段做好定位记录,以便在重组的时候就能够对号入座。值为多少个字节,如果封包并没有被分段,则FO值为“0"。 占13位。

◆生存时间(Time To Live,TTL)

生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机。这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。占8位。

◆协议(Protocol,PROT)

指该封包所使用的网络协议类型,如ICMP、DNS等。占8位。各协议对应的值如表1所示。

表1 协议号

协议号

协议

协议号

协议

00

IP

22

XNS-IDP

01

ICMP

27

RDP

02

IGMP

29

ISO-TP4

03

GGP

36

XTP

04

IP-ENCAP

37

DDP

05

ST

39

IDPR-CMTP

06

TCP

73

RSPF

08

EGP

81

VMTP

12

PUP

89

OSPFIGP

17

UDP

94

IPIP

20

HMP

98

ENCAP

◆头校验和(Header checksum)

指IPv4数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常。与UDP和TCP协议包头中的校验和作用是一样的。占16位。

首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP协议在它们各自的首部中均含有同时覆盖首部和数据检验和码。

IP协议头格式规定了:计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16位进行二进制反码求和(整个首部看成是由一串16位的字组成),结果存在检验和字段中。当接收端收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错消息,由上层去发现丢失的数据报并进行重传。

ICMP、IGMP、UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份消息时可以增加它的检验和,而不需要对IP整个首部进行重新计算。

◆源地址(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协议包头大小是一样的。


关于IP协议常见的问题:

1.为什么IP不是可靠连接的协议

IP层没有超时和重传机制,没有连接握手协议。


2.IP数据报经过路由器都做了哪些改动

IP没经过一个路由器,TTL数就会减一,如果最后TTL为0了,但是依然没有到达目的地,这个IP包将会被丢弃。

这样做了目的是为了防止出现循环回路。并且最后一跳的路由器会发送一个ICMP不可达的数据包给源IP。


3.关于分片的问题

IP数据包的长度为16,也就是说最大为65535个字节。但是我们知道数据链路层规定MTU最大传输单元为1500个字节。

当IP数据包的大小超过了1500,IP数据包必须要进行分片处理。这还只是初始发送端的分片,在网络中如果某个路由器的MTU小于1500,那么还需要在路由器

端做分片,这就给IP包的完整接收照成了很大的不确定性(我们知道数据包达到终点不一定是按照顺序的),因为万一某一个分片丢失,可能会造成真个IP重传,当然前提是高层协议支持重传。对于TCP协议,不存在分片的问题,因为TCP报头的选项字段有MSS字段,规定一个TCP包最大可传输的字节数,一般是1500-20-20=1460字节。也就是说到达IP封包的时候最大可承载数据只有1460个字节,这样就可以避免分片的问题。但是对于UDP这一类的协议,分片操作还是交给IP完成,虽然这样可以增加载荷的效率,但是稳定性会受到很大的影响。

IP协议首部详细分析相关推荐

  1. IP数据报首部字段分析

    IP数据报首部字段分析 IP数据报传输使用的是网络字节序,网络字节序是大端字节序 IP数据报首部一般为20个字节(没有选项的情况),最大是60字节,60字节如何算出参考下面 首部长度字段 版本号 区分 ...

  2. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

  3. linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结

    首先声明,这篇博客是几篇博客转载然后总结在一起的,只当是学习笔记,不在意是什么原创和转载了,学到东西就好. 1.IP协议首部格式(IP协议处余网络层) IP数据报首部图片格式: 最高位在左边,记为0 ...

  4. OSI七层模型及TCP/IP四层模型详细分析

    在计算机网络中有OSI七层模型及TCP/IP四层模型的说法,而且也是计算机很重要的知识.下面我们就来分析一下它们: OSI七层模型及TCP/IP四层模型的对比: 从上面两张图我们知道,每层之间是相互独 ...

  5. ModbusTCP协议报文详细分析

    ModbusTCP协议分析 ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与M ...

  6. TCP/IP协议抓包分析

    目录 一.TCP/IP协议在协议中分层的位置 二.TCP三次握手流程 三.打开wireshark抓包 四.TCP三次握手分析 1.TCP第一次握手 五.四次挥手流程 六.四次挥手抓包分析 一.TCP/ ...

  7. 关于IP协议首部长度的计算

    看到<TCP/IP详解>IP协议中提到IP数据报首部长度是一个4比特字段,因此首部最长是60个字节.最小是20个字节.那么这个怎么算的呢? 我的理解是这样的 先看下IP数据报报格式及首部中 ...

  8. 通过QQ2010协议技术详细分析QQ登陆过程

    来自#博客园#文章,七月份的时候突然对QQ协议产生了些兴趣,于是这几个月有空就研究QQ协议,目前对QQ2010的协议已经分析得差不多了.QQ登录分为UDP和TCP登录,还支持代理登录.默认是UDP登录 ...

  9. QQ2010协议技术详细分析QQ登陆过程

    为什么80%的码农都做不了架构师?>>>    来自#博客园#文章,七月份的时候突然对QQ协议产生了些兴趣,于是这几个月有空就研究QQ协议,目前对QQ2010的协议已经分析得差不多了 ...

最新文章

  1. 一个web蠕虫的简单实现
  2. Java 导出excel表 POI
  3. H5网页App和纯原生的App差距在哪?
  4. php应用数据库连接中的单例模式
  5. 基于JRTPLIB库的RTP数据传输设计文档(1)
  6. error LNK2005 已经在***.obj中定义
  7. 线性模型第2讲:岭回归与分类
  8. WEB前端经典笔试/面试题
  9. 录播网站 服务器,录播服务器
  10. 南京大学计算机学院刘向阳,刘向阳  南京大学计算机科学与技术系教授_光通信名人录_光邻网...
  11. 斐波那契数列(费氏数列)
  12. C语言热电阻温度查表,热电阻分度表如何看?是什么意思?
  13. 【C语言】之实现三角形类型判断
  14. 今天不学习,明天变垃圾
  15. 为什么说采购一定要成为专家
  16. 如何批量打印 带图片名字的图片?Word 宏命令
  17. Observability——Wavefront
  18. ANSYS常见术语对照
  19. 081020_文本分类(Text Classification)
  20. 2021年全球切削刀具市场销售额达到了244.5亿美元,预计2028年将达到321亿美元

热门文章

  1. ps2口键盘改usb计算机设置,PS2接口键盘、鼠标改为USB接口
  2. 推荐 8 个优质的公众号
  3. 一步拿下抖音+微信生态圈,让内容变现再次加速
  4. 服务器虚拟机6的安装教程,VMware vCenter 6.7 安装过程(图文教程)
  5. CentOS7:配置防火墙
  6. 1926163-51-0|肽基脯氨酰异构酶底物:WFY(p)SPR-7-氨基-4-甲基香豆素
  7. python知识点智能问答_基于检索的智能问答
  8. 微信小程序iphone x适配
  9. 【译】css动画里的steps()用法详解
  10. Python_Flask