IP协议头格式

简介:

以下内容摘自笔者编著的《网管员必读——网络测试、监控和实验》一书。

3.3 IP协议头格式和Sniiffer PortableIP

IPInternet Protocol,因特网协议)是OSI第三层——网络层协议,本节仅以IPv4版本为例进行介绍。IP协议也是一个无连接的协议,主要就是负责在主机间寻址,并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递。另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。

3.3.1  IP协议头格式

数据在经过IP网络层时,也会对数据进行封装,也就有相应的IP协议包头了。在以太网帧中,IPv4包头紧跟着以太网帧头,同时以太网帧头中的协议类型值设置为十六进制的0800它的基本格式如图3-12所示。
n          版本(Version
指定IP协议的版本号。因为目前仍主要使用IPv4版本,所以这里的值通常是 0x4 (注意封包使用的数字通常都是十六进位的)4位。
3-12  IP 协议头格式
n          包头长度(Internet Header LengthIHL
指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5。占4位。由于它是一个4比特字段,因此首部最长为60个字节,但实际上目前最多仍为24个字节。
n          服务类型(Type of ServiceTOS
定义IP封包在传送过程中要求的服务类型共由8bit组成其中每个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位。由源端设置,以显示源端节点的传输协议是支持ECNExplicit Cogestion Notifica tion,显式拥塞指示)的。取值:0(不支持ECN)、1(支持ECN
Ø               .......0Congestion Experienced):拥塞预警字段,1位。取值:0(正常,不拥塞)、1(拥塞)
n          包长度(Total LengthTL
指定IP包的总长,通常以byte做单位来表示该封包的总长度此数值包括标头和数据的总和。以字节为单位,16位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。
经验之谈由于该字段长16比特,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分段。而且,主机也要求不能接收超过576字节的数据报。由于TCP把用户数据分成若干段,因此一般来说这个限制不会影响TCPUDP的应用(如RIPTFTPBOOTPDNSSNMP等),都限制用户数据报长度为512字节,小于576字节。但是,事实上现在大多数的实现允许超过8192字节的IP数据报。
总长度字段是IP首部中必要的内容,因为一些数据链路(如 以太网 )需要填充一些数据以达到最小长度。尽管 以太网 的最小帧长为46个字节(将在本章后面介绍),但是IP数据可能会更短。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。
n          标识(Identification
每一个IP封包都有一个16位的唯一识别码。当程序产生的数据要通过网络传送时都会被拆散成封包形式发送,当封包要进行重组的时候这个ID就是依据了。占16位。
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份消息它的值就会加1 RFC 791认为标识字段应该由让IP发送数据报的上层来选择。假设有两个连续的IP数据报,其中一个是由TCP生成的,而另一个是由UDP生成的,那么它们可能具有相同的标识字段。尽管这也可以照常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个IP数据报,IP层都要把一个内核变量的值加1,不管交给IP的数据来自哪一层。内核变量的初始值根据系统引导时的时间来设置。
n          标记(Flags
这是当封包在传输过程中进行最佳组合时使用的3bit的识别记号。占3位。
Ø               000Reserved Fragment):保留分段。当此值为0的时候表示目前未被使用。 
Ø               .0.Don't Fragment):不分段。当此值为0的时候表示封包可以被分段,如果为1则不能被分割。 
Ø               ..0 More Fragment):更多分段。当上一个值为0时,此值为0就示该封包是最後一个封包,如果为1则表示其後还有被分割的封包。
n          分段偏移(Fragment OffsetFO
当封包被分段之后,由于网路情况或其它因素影响其抵达顺序不会和当初切割顺序一至,所以当封包进行分段的时候会为各片段做好定位记录,以便在重组的时候就能够对号入座。值为多少个字节,如果封包并没有被分段,则 FO 值为 “0”   13 位。  
n          生存时间(Time To LiveTTL
生存时间字段设置了数据报可以经过的最多路由器数,表示数据包在网络上生存多久。TTL的初始值由源主机设置(通常为3264),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP消息通知源主机。这样当封包在传递过程中由於某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。占8位。
n          协议(ProtocolPROT
指该封包所使用的网络协议类型,如ICMPDNS等。占8位。各协议对应的值如表3-1所示。
3-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        
n          头校验和(Header checksum
IPv4数据报包头的校验和。这个数值用来检错用的,用以确保封包被正确无误的接收到。当封包开始进行传送后,接收端主机会利用这个检验值会来检验余下的封包,如果一切无误就会发出确认信息表示接收正常。与UDPTCP协议包头中的校验和作用是一样的。占16位。
经验之谈首部检验和字段是根据IP首部计算的检验和码,不对首部后面的数据进行计算。ICMPIGMPUDPTCP协议在它们各自的首部中均含有同时覆盖首部和数据检验和码。
为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16位进行二进制反码求和(整个首部看成是由一串16位的字组成),结果存在检验和字段中。当接收端收到一份IP数据报后,同样对首部中每个16 位进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错消息,由上层去发现丢失的数据报并进行重传。
ICMPIGMPUDPTCP都采用相同的检验和算法,尽管TCPUDP除了本身的首部和数据外,在IP首部中还包含不同的字段。由于路由器经常只修改TTL字段(减1),因此当路由器转发一份消息时可以增加它的检验和,而不需要对IP整个首部进行重新计算。
n          源地址(Source AddressSA
发送IP数据包的IP地址。占32位。
n          目的地址(Destination Address
接收IP数据包的IP地址。也占32位。
n          选项(Options+填充(Padding
这两个选项较少使用,只有某些特殊的封包需要特定的控制才会利用到。共32位。这些选项通常包括:
Ø               安全和处理限制:用于军事领域
Ø               记录路径:让每个路由器都记下它的IP地址
Ø               时间戳:让每个路由器都记下它的IP地址和时间
Ø               宽松的源站选路:为数据报指定一系列必须经过的IP地址
Ø               严格的源站选路:与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。
以上这些选项很少被使用,而且并非所有的主机和路由器都支持这些选项。选项字段一直都是以32位作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32位的整数倍(这是首部长度字段所要求的)。
从以上IP包头格式可以看出,IP协议包头大小也有两种:当没有“选项”这个字段时,为160位,20个字节;当有“选项”字段时为192位,24个字节。它与TCP协议包头大小是一样的。
本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/87527如需转载请自行联系原作者

茶乡浪子
相关文章
|
1月前
|
网络协议 网络架构
【IP协议】IP协议报头结构
【IP协议】IP协议报头结构
16 2
|
2月前
|
网络架构 数据格式
IPv4首部格式(超详细)
IPv4数据报首部格式是实现IPv4协议的基础,通常以32比特为单位描述。首部包括固定部分(20字节)和可变部分(最多40字节)。固定部分含版本、首部长度、区分服务、总长度、标识、标志、片偏移、生存时间、协议及首部检验和等字段;可变部分含可选字段和填充,确保首部为4字节整数倍。首部检验和通过二进制反码求和计算。分片时需考虑MTU限制。
140 10
|
4月前
|
网络协议 网络架构 Windows
解析NDP报文格式
【7月更文挑战第8天】邻居发现协议(Neighbor Discovery Protocol,NDP)是IPv6协议体系中最重要的基础协议之一,很多IPv6功能都依赖NDP来实现。
|
6月前
|
网络协议 数据格式
|
网络协议
TCP协议报头格式和滑动窗口
TCP协议报头格式和滑动窗口
88 0
TCP协议报头格式和滑动窗口
|
网络协议
UDP的报文结构
UDP的报文结构
89 0
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
|
网络协议 安全 网络性能优化
MPLS格式和802.1q帧格式,ISL格式
MPLS格式和802.1q帧格式,ISL格式
275 0
计算机网络学习22:IPv4数据报首部格式
固定部分就是必须要有的。每个报文都要有的。 每个小格子称为 域 或者 字段,每个字段或者某些字段的组合用来表达IP协议的相关功能。
计算机网络学习22:IPv4数据报首部格式
|
网络协议 网络架构
http报文在各层的长度分析-wireshark报文实战
http报文在各层的长度分析-wireshark报文实战