I P是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。
1. 特点:
不可靠( unreliable)的意思是它不能保证I P数据报能成功地到达目的地。I P仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误处理算法:丢弃该数据报,然后发送I C M P消息报给信源端。任何要求的可靠性必须由上层来提供(如T C P)。
无连接( connectionless)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。对于防火墙来说没有关于IP的状态化信息
2. 最大传输单元,MTU
不同类型的网络都有规定数据帧的最大值,链路层的这个特性称作MTU,最大传输单元。以太网是1500字节,802.3网络是1492字节。PPP链路上是1500字节,PPP接收端还有MRU,最大接收单元,也是1500字节。
Windows 2003 和XP更改MTU的注册表
MTU
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\InterfaceGUID
Data Type:REG_DWORD
Valid range:88--<the MTU reporter by the network adapter>
Default value:0xFFFFFFFF(the MTU reporter by the network adapter)
Present by default:No
TCP/IP初始化的时候会查询绑定的NIDS网络适配器驱动程序并得到MTU,如果注册表的值超过了查询到的值将被忽略。
3. 路径最大MTU
两台主机通信过程中,所经过网络的MTU的最小值。经过的每个网络都会有字节的MTU,路径最大的MTU就是取这些MTU中的最小值。
4. IP数据报格式
IP头 20~60字节,每4字节一个增量级别。它提供路由支持、有效载荷类型、IP头和数据报大小、分片支持以及IP选项等
IP有效载荷 长度可变
5. IP头部格式
字段说明
版本 4位长,值可以从0到15,目前主要用的是IP v4,该值就是4, IP v6 对应6.
www.iana.org/assignments/version-numbers可以查询
头长度 4位,IP头部的长度,4位最大值是15,所以长度的单位不是字节,是4字节。所以头部长度最长60字节。
服务类型 (TOS) 8位长,TOS字段有2种定义:RFC791和RFC2474定义
优先权(Precedence) 3位,表示数据重要性 ,默认值000
优先权的值 | 优先权 |
000 | 常规 |
001 | 优先 |
010 | 紧急 |
011 | 闪存 |
100 | 闪存覆盖 |
101 | CRITIC/ECP |
110 | 互联网控制 |
111 | 网络控制 |
时延(Delay) 1位,0表示一般时延,1表示低时延。例如,根据时延字段,路由器选择陆地上的低时延WAN链路代替高时延的人造卫星链路,即使人造卫星有较高带宽。
吞吐量(Throughput) 1位 0表示一般吞吐量,1表示搞吞吐量。例如,根据吞吐量字段,路由器选择陆地上的高吞吐量人造卫星链路代替低带宽的WAN链路,即使WAN链路有较低时延。
可靠性(Reliability) 1位 0表示一般可靠性, 1表示高可靠性。高可靠性决定哪个IP数据报首先被丢弃。例如一些视频数据采用2种类型的包发送,高可靠性发送用来重建基本视频图像的包,一般可靠性用来建立高清图像的数据包。
费用(Cost) 1位 0表示一般费用,1表示低费用,这里的费用就是指钱。例如根据费用路由器将选择低费用的链路代替高费用的人造卫星链路。
保留(Reserved) 1位 必须为0,路由器忽略这个字段
ping –v tos-value destination 来设置ICMP响应信息中的TOS值。
需将DisableUserTOSSetting的注册表设置为0时才有效。
RFC2474 根据6位的DSCP(Differentiated Services Code Point,区分服务代码点)和未用的2位重新定义了TOS字段。DSCP确定每一跳的动作,接收路由器据此对数据报的发送控制。DSCP的值由网络策略决定。
区分服务(Differentiated Services)是对使用RSVP(Resource ReServation Protocol, 资源保留协议)协议的IP QoS机制的另一种选择。RSVP要求通信节点有信号初始化的过程并在中间每个路由器中保持通信流的状态。用了区分服务,网络策略就决定了DSCP的值和相应的传输,已经参数的排列。网络策略被告知于路由器和通信主机。当几点发送数据报需要非默认的QoS时,它将选择DSCP的值,并把它放在IP头的TOS字段中。中间路由器记录DSCP的值并提供相应的非默认的QoS发送服务。
Windows Server 2003中的使用RFC2474的TOS定义作为默认设置。可以通过下列注册表键值修改TOS字段:
DisableUserTOSSetting
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type:REG_DWORD
Valid range:0--1
Default value:1
Present by default:No
该键值控制TOS字段,0表示使用RFC791,1使用RFC2474
总长度(Total Length) 2字节,表示IP数据报总字节数(IP头+IP有效载荷),根据头长度和总长度可以计算出有效载荷:IP有效载荷(字节)=长度(字节) — 4X头长度(32位)
标识(Identification) 2 字节 用来标识在源和目的节点间发送的每一个数据包。这个字段对连续的IP数据报是不断增加的。被用来标识原始IP数据报的分片。每发送一个字节增加1
标志(Flags) 3位长 包含2个用于分片的标志。其中一个用于表示IP有效载荷是否符合分片标准,另一个表示对已分片的IP数据报是否还有更多分片。
片偏移(Fragment offset) 13位长,表示分片相对于原始IP数据报有效载荷的偏移量。
生存时间 (Time To Live) 1字节长,表示数据报在被路由器丢弃钱经过的最大链路数。作为时间计数,TTL是预先定义好的,表示IP数据报在Internet上存在的秒数。。每当数据报经过一个路由器的时候减少1或者减去在路由器停留的秒数,但大多数时延都小于1秒,所以TTL最终称为一个跳数计数器. 为了阻止环路发生。
特征:
1.进行路由前,路由器将TTL减1. 如果TTL小于1,数据报将丢弃,并向主机发送一个ICMP时间终止-TTL终止的消息
2.目的主机不检查TTL字段。
3.发送主机的TTL必须大于0. 发送IP数据报的TTL由应用程序指定或者系统默认,最大值为255.
4.TTL不受路由协议跃点的限制,如RIP跃点数和OSPF花费的限制。
注意:TTL使用链路数和路由协议跃点数的区别?
跃点数:到达指定目的端所经过的路由器数。
链路数:到达目的段所经过的网络接口层的链路数。跃点比链路数少1.
例如,A和B间有5个路由,跃点就是5,链路是6,如果TTL是5到达不了B,设置6才能到达。
Windows 2003 修改TTL默认值,默认是128
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type:REG_DWORD
Valid range:1—255
Default value:128
Present by default:No
Ping –i TTL-value destination 对ping设置TTL参数
协议(Protocol) 1 字节长,表示包含在IP数据报中的上层协议。1表示ICMP、6表示TCP、17表示UDP。其他的值表示的含义可以查询:www.iana.org/assignments/protocol-numbers
Windows 可以通过存储在 ..\system32\drivers\etc目录下的protocol文件将协议名解释成编号。Windows支持的协议ICMP(1)、IGMP(2)、已经封装了的IP(4)、TCP(6)、17(UDP)、IP v6(41)、常规路由封装GRE(47)、ESP(50)、AH(51)、OSPF(89)
头部校验和(Header Checksum) 2 字节,只是对IP头执行位级别的校验。IP有效载荷不在其中,它使用自己的位级别校验和。源和目地之间经过的每个路由器都会校验首部校验和字段,如果失败就丢弃该数据报。由于TTL字段每次都会减1,所以每次要重新生成此字段。
头部校验和字段也在头部,为了计算的是所有其他字段,所以计算时将该字段取值0,在计算得到结果后在写入该字段。
源地址 4字节 源主机IP地址,在NAT情况下数据报源地址会被改写,其他时候产生数据报后就不变。NAT,是进行公有和私有技术的转换的,可以参加RFC1631.
目的地址 4字节 包含目的主机的地址。NAT情况下或者进行了松散或严格源路由选择,会出现修改该地址情况,其他时候产生数据报后就不变。
选项和填充(Option and Padding)以4字节为增量
IP 分片相关字段
IP数据报大于MTU的时候会出现分片来满足MTU大小,发生分片时,IP的有效载荷被分段,每段都有自己的IP头部,在目的主机收到分片后,按照IP头部信息组装成完整IP数据报。
在X.25和ATM这样的虚拟电路包交换技术中用的分割IP数据报和IP分片不一样。他们只是在数据链路层对发送的数据报进行分割。分片一样会在这样的链路中传输的时候一样会被分割。
IP头部中的标识,分片标志和片偏移共同完成分片功能。
例子,
总长度4482字节,MTU 1500字节。如果没有IP选项,有效载荷最大1480字节,1480=185 x 8,所以片值以185位增量增加。第一片的片偏移是0,第二片是185
Ping –f destination 可以设置ping的ICMP包的DF位为1,默认为0
IP选项(IP Options)
IP头部最大60字节,标准的是20字节,选项40字节。
每个IP选项的第一个字节格式
选项类别 | 选项编号 | 描述 |
0 | 0 | 选项列表结束 表示选项列表结束的1字节选项 |
0 | 1 | 无操作 表示选项列表的字节排列的1个字节长的选项 |
0 | 2 | Security. Used to carry Security,Compartmentation, User Group (TCC), and Handling Restriction Codes compatible with DOD requirements. |
0 | 3 | 松散源路由 用于指定的路径对数据进行路由(可以进行路由选择),可变长度 |
0 | 7 | 记录路由 用于跟踪IP Internet网络中路由的可变长度 |
0 | 8 | Stream ID. Used to carry the stream identifier. |
0 | 9 | 严格源路由 用于指定的路径对数据进行路由(不可以进行路由选择),可变长度 |
0 | 20 | Ip路由报警 用于告诉路由器数据报需要特效处理的固定长度选项 |
2 | 4 | Internet时间戳 用于每一跳记录一系列时间戳的可变选项 |
Ping -r 可以设置 ping的路由记录选项
这里要注意tracert 命令的原理不是使用路由记录选项。
Ping -s slots destination 设置Internet时间戳参数
例子:
Ping -s 3 10.1.1.1 带3个插槽的时间戳。
6. IP地址分配简介
IP v4地址格式4字节,每个字节用点分开的。
在一个IP地址中,我们如何区分出哪部分是网络ID,哪部分是主机ID?
我们靠子网掩码来区分出网络ID和子网ID的。子网掩码是一种子网分割技术,与IP地址一样也是4字节长度,每字节间用点区分。如果该位与网络ID相对应设为1,与主机ID对应就设为0.
分类网络里A类子网掩码255.0.0.0,B类是255.255.0.0,C类是255.255.255.0;无类网络是由设计人员设计的网络掩码来分割子网。
关于地址分配的更详细的信息可以查看RFC1918
Windows 下列注册表控制此选项
UseZeroBroadcast
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters|InterfaceGUID
Data Type:REG_DWORD
Valid range:0—1
Default value:0
Present by default:yes
UseZeroBroadcast 决定限制广播地址是0.0.0.0(设为1),还是255.255.255.255(设为0)。默认是0.
完全列表:www.iana.org/assignments/multicast-addresses
Windows Server 2003 预留的部分地址
多播IP地址
目的
224.0.0.1
全主机多播地址,可以到达子网上所有主机
224.0.0.2
全路由多播地址,到达子网上所有路由器
224.0.0.5
到达子网所有OSPF路由器
224.0.0.6
到达子网所有DR OSPF路由器
224.0.0.9
Rip v2,到达子网上所有RIP v2的路由器