Internet Protocol Version 4, Src: 192.168.1.1 (192.168.1.1), Dst: 192.168.1.2 (192.168.1.2)
    0100 .... = Version: 4      ----->版本(4位)
    .... 0101 = Header Length: 20 bytes (5)---->头部长度(4位)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT))---->DS字段(6位)+ECN(2位)
    Total Length: 60)---->总长度(16位)
    Identification: 0x9255 (37461))---->标识(16位)
    Flags: 0x02 (Don't Fragment))---->标志(3位)
    Fragment offset: 0)---->分片偏移(13位)
    Time to live: 128)---->生存期(8位)
    Protocol: ICMP (1))---->协议(8位)
    Header checksum: 0xe517 [validation disabled])---->头部校验和(16位)
    [Header checksum status: Unverified])
    Source: 192.168.1.1 (192.168.1.1))---->源IP地址(32位)
    Destination: 192.168.1.2 (192.168.1.2))---->目的IP地址(32位)
    [Source GeoIP: Unknown]
    [Destination GeoIP: Unknown]


版本号(4位)
包含IP数据包的版本号,IPv4为4,IPv6为6,和IPv6相比,除版本字段位置相同以外再无其他字段相同,因此两个协议不能相互操作的。
在包的首位定义出此字段区分不同的协议,以正确的协议解包。
头部长度(4位)
单位:32bit(4字节)
正常值为5(即20个字节)
在解包时能够方便切割出头部
DS和ESN字段(8位)
IPv4[RFC0791]的最初规范指定了一个服务类型(ToS)字段,由于他们从未被广泛使用,因此最终被分为两部分。
DS:区分服务 代码点(指预定义的具有特殊含义的位)   ESN:显示拥塞通知
                                                                           原来ToS的结构
IPv4协议笔记

优先级字段:用于表示哪些分组具有更高的优先级
D:延时         S:吞吐量            R:可靠性     (如果这些值为1,分别对应于低延时、高吞吐量、高可靠性)
IPv4协议笔记
                                                                 DS字段
IPv4协议笔记
DSCP分为三个池(标准、实验/本地用途(EXP/LU)、最终打算标准化的实验/本地用途)
IPv4协议笔记

DSCP值有两种表达方式,数字形式和关键字形式。
一种表达方式是数字形式。DSCP使用6比特,十进制区间是0~63,可以定义64个等级(优先级。)如二进制DSCP值000000=十进制DSCP值0,二进制DSCP值010010=十进制DSCP值18。
另一种关键字形式的DSCP值称为逐跳行为(PHB),目前有三类已定义的PHB,分别是尽力服务(BE或DSCP 0)、确保转发(AFxy)和加速转发(EF)。由于DSCP和IP Precedence是共存的,于是存在兼容性的问题,DSCP可读性较差,比如DSCP 43我们一眼看去并不知道对应着IP Precedence的什么取值,于是把DSCP进行进一步分类, DSCP总共分成四类:
类选择器Class Selector(CS)aaa 000
加速转发Expedited Forwarding(EF) 101 110
确保转发Assured Forwarding(AF) aaa bb0
默认Default(BE) 000 000
DS字段值表略
  • CS6和CS7默认用于协议报文。因为如果这些报文无法接收的话会引起协议中断。而且是大多数厂商硬件队列里最高优先级的报文。
  • EF用于承载语音的流量,因为语音要求低延迟,低抖动,低丢包率,是仅次于协议报文的最重要的报文。
  • AF4用来承载语音的信令流量,这里大家可能会有疑问为什么这里语音要优先于信令呢? 其实是这样的,这里的信令是电话的呼叫控制,你是可以忍受在接通的时候等待几秒钟的,但是绝对不能允许在通话的时候的中断。所以语音要优先于信令。
  • AF3可以用来承载IPTV的直播流量,直播的实时性很强需要连续性和大吞吐量的保证。
  • AF2可以用来承载VOD的流量,相对于直播VOD要求实时性不是很强,允许有时延或者缓冲。
  • AF1可以承载不是很重要的专线业务,因为专线业务相对于IPTV和VOICE来讲,IPTV和VOICE是运营商最关键的业务,需要最优先来保证。当然面向银行之类需要钻石级保证的业务来讲,可以安排为AF4甚至为EF。
  • 最不重要的业务是Internet业务,可以放在BE模型来传输。
ECN:
  • 00 – 不支持ECN的传输,非ECT
  • 10 – 支持ECN的传输,ECT(0)
  • 01 – 支持ECN的传输,ECT(1)
  • 11 – 发生拥塞,CE。

当两端支持ECN时,它将数据包标为ECT(0)或ECT(1)。如果分组穿过一个遇到阻塞并且相应路由器支持ECN的活动队列管理(AQM)队列(例如一个使用随机早期检测,即RED的队列),它可以将代码点更改为CE而非丢包。这种行为就是“标记”,其目的是通知接收端即将发生拥塞。在接收端,该拥塞指示由上层协议(传输层协议)处理,并且需要将信号回传给发送端,以通知其降低传输速率。

因为CE指示只能由支持它的上层协议有效处理,ECN只能配合上层协议使用。例如TCP协议,它支持阻塞控制并且有方法将CE指示回传给发送端。

---维基百科

总长度(16位)
单位:字节
最小值是20(20字节首部+0字节数据),最大值是216-1=65,535
IP层下面的每一种数据链路层都规定了数据帧的数据字段的最大传输长度,称为最大传送单元MTU (Maximum Transfer Unit)。例如以太网中MTU值为1500字节,超出则需要分片处理。
IP协议规定,在因特网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度), 加上最长的IP首部60字节,再加上4字节的富裕量,就得到576字节。当主机需要发送长 度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。 否则,就要进行分片。

标识(16位)
标志(3位)
分片偏移(13位)
当数据包进行分片传输时,使得能够在接收端将分片完整的组合在一起做的标记字段。(暂不记录)
生存期TTL(8位)
设置一个数据报可经过路由器的最大数量上限,每次经过路由器,TTL值就会减少1,当这个值达到0时,该数据报就会被丢弃。
一般地,路由器读取到TTL值为1的时候就会丢弃。
有效的防止环路出现
协议(8位)
表示数据报的有效载荷部分的数据类型(即上层协议的类型)
IPv4协议笔记
告诉计算机用什么协议解析段(有效载荷部分)
其实在每一层中都会有标识上层协议的类型
头部校验和(16位)
在发送方,先把IP数据报首部划分为许多16位字的序列,并把检验和字段置零。用反码算术运算把所有16位字相加后,将得到的和的反码写入检验和字段。接收方收到数据报后,将首部的所有16位字再使用反码算术运算相加一次。将得到的和取反码, 即得出接收方检验和的计算结果。若首部未发生任何变化,则此结果必为0,于是就保留这个数据报。否则即认为出差错,并将此数据报丢弃。
                                 计算过程例:
IPv4协议笔记
目的IP(32位) 相当于收件人的地址
源IP(32位) 相当于寄件人的地址



参考文档:《TCP/IP协议详解 卷一:协议》



相关文章: