`
soardragon
  • 浏览: 311610 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

IP首部拆解

阅读更多

IP数据报的格式如图3-1所示。普通的IP首部长为20个字节,除非含有选项字段。

图3-1 IP数据报格式及首部中的各字段

分析图3-1中的首部。最高位在左边,记为0bit;最低位在右边,记为31bit。
4个字节的32bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作bigendian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如littleendian格式,则必须在传输数据之前把首部转换成网络字节序。
目前的协议版本号是4,因此IP有时也称作IPv4。3.10节将对一种新版的IP协议进行讨论。
首部长度指的是首部占32bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。在第8章中,我们将看到这种限制使某些选项如路由记录选项在当今已没有什么用处。普通IP数据报(没有任何选择项)字段的值是5。
服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4bit中只能置其中1bit。如果所有4bit均为0,那么就意味着是一般服务。RFC1340[ReynoldsandPostel1992]描述了所有的标准应用如何设置这些服务类型。RFC1349[Almquist1992]对该RFC进行了修正,更为详细地描述了TOS的特性。
图3-2列出了对不同应用建议的TOS值。在最后一列中给出的是十六进制值,因为这就是在后面将要看到的tcpdump命令输出。

图3-2 服务类型字段推荐值

Te l n e t 和R l o g i n这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的交互数据。另一方面,F T P文件传输则要求有最大的吞吐量。最高可靠性被指明给网络管理(SN M P)和路由选择协议。用户网络新闻(Usenet news, NNTP)是唯一要求最小费用的应用。
现在大多数的T C P / I P实现都不支持TO S 特性,但是自4.3BSD Reno以后的新版系统都对它进行了设置。另外,新的路由协议如O S P F和I S - I S都能根据这些字段的值进行路由决策。
在2 . 1 0节中,我们提到S L I P一般提供基于服务类型的排队方法,允许对交互通信数据在处理大块数据之前进行处理。由于大多数的实现都不使用TO S 字段,因此这种排队机制由S L I P自己来判断和处理,驱动程序先查看协议字段(确定是否是一个T C P 段),然后检查T C P信源和信宿的端口号,以判断是否是一个交互服务。一个驱动程序的注释这样认为,这种“令人厌恶的处理方法”是必需的,因为大多数实现都不允许应用程序设置TOS字段。
总长度字段是指整个I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长1 6比特,所以I P数据报最长可达6 5 5 3 5字节(回忆图2 - 5,超级通道的M T U为6 5 5 3 5 。它的意思其实不是一个真正的M T U—它使用了最长的I P数据报)。当数据报被分片时,该字段的值也随着变化。
尽管可以传送一个长达6 5 5 3 5字节的I P数据报,但是大多数的链路层都会对它进行分片。而且,主机也要求不能接收超过5 7 6字节的数据报。由于T C P把用户数据分成若干片,因此一般来说这个限制不会影响T C P。在后面的章节中将遇到大量使用U D P的应用(R I P,T F T P, B O O T P,D N S,以及S N M P),它们都限制用户数据报长度为5 1 2字节,小于5 7 6字节。但是,事实上现在大多数的实现(特别是那些支持网络文件系统N F S的实现)允许超过8 1 9 2字节的I P数据报。
总长度字段是I P首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为4 6字节,但是I P数据可能会更短。如果没有总长度字段,那么I P层就不知道4 6字节中有多少是I P数据报的内容。
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1
RFC791 [Postel 1981a]认为标识字段应该由让IP发送数据报的上层来选择。假设有两个连续的I P数据报,其中一个是由T C P生成的,而另一个是由U D P生成的,那么它们可能具有相同的标识字段。尽管这也可以照常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个I P数据报,I P层都要把一个内核变量的值加1,不管交给IP的数据来自哪一层。内核变量的初始值根据系统引导时的时间来设置。
T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置(通常为3 2或6 4),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送I C M P报文通知源主机。第8 章我们讨论Tr a c e r o u t e 程序时将再回来讨论该字段。
首部检验和字段是根据I P首部计算的检验和码。它不对首部后面的数据进行计算。I C M P、I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
为了计算一份数据报的I P检验和,首先把检验和字段置为0。然后,对首部中每个16 bit 进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份I P数据报后,同样对首部中每个16 bit 进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么I P就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
I C M P、I G M P、U D P和T C P都采用相同的检验和算法,尽管T C P和U D P除了本身的首部和数据外,在I P首部中还包含不同的字段。在RFC1071[Braden, Borman and Patridge 1988]中有关于如何计算I n t e r n e t检验和的实现技术。由于路由器经常只修改T TL字段(减1),因此当路由器转发一份报文时可以增加它的检验和,而不需要对I P 整个首部进行重新计算。R F C 1141Mallory and Kullberg 1990]为此给出了一个很有效的方法。
但是,标准的BSD实现在转发数据报时并不是采用这种增加的办法。每一份I P数据报都包含源I P地址和目的I P地址。我们在1 . 4节中说过,它们都是32 bit 的值。最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义如下:
安全和处理限制(用于军事领域)

记录路径(让每个路由器都记下它的I P地址,)

时间戳(让每个路由器都记下它的I P地址和时间,)

宽松的源站选路(为数据报指定一系列必须经过的I P地址,)

严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。这些选项很少被使用,并非所有的主机和路由器都支持这些选项。选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。这样就保证I P首部始终是32 bit 的整数倍(这是首部长度字段所要求的)。
分享到:
评论

相关推荐

    java ip首部效验和

    (4)必须验证程序的正确性:基于Wireshark工具所抓取的真实IP包首部数据,能够成功检验首 部校验和字段的计算程序。例如,以下是发出ping命令之后,捕获ICMP包的IP首部信息,可用用来 检验“首部校验和”字段的计算...

    IP首部

    IP首部

    IP首部各种经

    IP首部各种经

    IP首部分析

    计算机网络课程设计IP首部解析的代码,有兴趣的下下看看

    ip首部检验和代码

    IP首部检验和的一些源代码,适合做课设的大学同学们

    行业资料ip首部校验和算法.doc

    行业资料ip首部校验和算法.doc

    IP_UDP首部检验和

    如何计算IP_UDP首部检验和

    IP头部校验和计算

    IP头部校验和计算

    构造IP头linux socket程序

    该程序写了一个客户端与服务器端的程序,客户端可以通过构造IP头,向服务器端发送数据,客户端接收的数据后,打印出构造的IP地址。

    IP选择题和测试题答案

    1、以下( )不是有效的IP地址。 2、以下( )地址为回送地址。 3、C类IP地址的子网掩码是 ( ) 4、没有任何子网划分的IP地址125.3.54.56的网络地址是( ) 5、IP地址219.25.23.56的默认子网掩码有( )位 6、网络地址154.27....

    计算机网络作业project2.docx

    1、 主机Host1 ping主机 Host2时,IP包的首部有哪些字段?各字段的值是多少? 找出该IP包的源IP地址与目的IP分别地址是多少?是谁的IP地址? 找出该IP包所封装成的数据帧的源MAC地址与目的MAC地址分别是多少?是谁...

    IP数据报首部实验.docx

    在cmd窗口ping IP–l 3000 –n 1,用科来软件进行抓包截图,主要是观察其分片,文档特别简洁。各取所需 :)

    TCP_IP培训资料.doc

    3.2.1 IP数据报首部的固定部分 3.2.2 IP首部的可变部分 3.3 路由段与路由表 3.4 Internet控制报文协议ICMP 4 UDP协议 5 TCP协议 5.1 TCP报文格式 5.2 TCP协议状态机 5.3 TCP定时器 6 路由协议 6.1 路由协议简介...

    三网融合网络技术第十三讲 三网融合TCPIP网络结构.ppt

    Tcp首部 Ip首部 应用数据 Tcp首部 以太网首部 应用数据 Tcp首部 Ip首部 以太网首部 TCP段 IP数据报 14 20 20 4 以太网帧 46-1500字节 应用程序 TCP IP 以太网驱动程序 TCP/IP结构及相关协议 TCP/IP协议数据封装方式 ...

    tcp首部

    tcp首部

    TCP-IP详解卷一:协议

    3.2 IP首部 24 3.3 IP路由选择 27 3.4 子网寻址 30 3.5 子网掩码 32 3.6 特殊情况的IP地址 33 3.7 一个子网的例子 33 3.8 ifconfig命令 35 3.9 netstat命令 36 3.10 IP的未来 36 3.11 小结 37 第4章 ARP:地址解析...

    IP协议ICMP协议分析实验报告

    IP协议包括Ipv4和Ipv6两个版本,IPv4包括20字节的固定手部及可变长的可选首部。 (2) 利用ping检查网络是否能够连通,可以帮助我们分析判断网络故障。该命令只有在安装了TCP/IP协议后才可以使用。Ping命令的主要...

    ip数据报程序网络包采集与分析

    2.2 对IP数据报进行分析以获得其首部详细信息; 2.3 对TCP报文段进行分析以获得其首部详细信息; 2.4 显示分析结果 3 建议使用VC++ 4 基于WinPcap开发库实现上述功能也可以。 ,之前我费了好多心血才找到的~

    TCP_IP培训教材

    3.2.1 IP数据报首部的固定部分 3.2.2 IP首部的可变部分 3.3 路由段与路由表 3.4 Internet控制报文协议ICMP 4 UDP协议 5 TCP协议 5.1 TCP报文格式 5.2 TCP协议状态机 5.3 TCP定时器 6 路由协议 6.1 路由协议简介...

    发送TCP数据包源代码

    /定义IP首部结构体 typedef struct _iphdr { UCHAR h_lenver; //4位IP版本号,4位首部长度 UCHAR tos; //8位服务类型(TOS) USHORT total_len; //16位总长度(字节) USHORT ident; //16位标识 USHORT frag_...

Global site tag (gtag.js) - Google Analytics