目录
五、ICMP,Internet Control Message Protocol,Internet控制报文协议
TCP/IP协议体系结构中的“网际互连层”最重要的协议就是IP簇协议。
IPv4协议簇包括3个协议:
1.IP(Internet Protocol,因特网协议);
2.ARP,Address Resolution Protocol,地址解析协议
3.ICMP,Internet Control Message Protocol,因特网控制消息协议
IPv6协议簇包括4个协议:
1.IPv6
2.ICMPv6:取代原来IPV4中的ICMP;
3.ND(neighbor discovery,邻居发现):取代IPV4网络中的ARP协议,用于管理相邻节点间的交互,包括自动配置地址和将下一跃点IPV6地址解析为MAC地址;
4.MLD(Multicast Listener Discover,组播侦听器发现):取代IPV4中的IGMP,用于管理IPV6多播组成员身份。
IP协议是一个无连接的协议,负责在源IP地址和目的IP地址之间传送数据报,然后为了适应不同网络对分组大小的要求,需要对上层传来的报文进行分割最后调用本地网络协议将数据报传送至下一个网关或目的计算机。即在互联的网络上传送数据报,通过将数据报在一个个IP模块间传送到目的模块。网络中的每个主机和网关上都有IP模块。
1.寻址。与以太局域网寻址的区别。以太局域网内部,节点间的寻址主要通过二层MAC地址进行,但在不同网络之间不能通过MAC地址寻址,因为数据通信中,数据到达不同网络时需要重新进行帧封装,帧里面的源/目的MAC地址会进行替换。
2.数据报的封装。IP封装的目的就是标识此IP数据报发送节点和接收节点的IP地址及控制信息。
3.分段与重组。不同网络链路的最大数据单元(MTU)不同,当一些MTU较大的数据报到达某个较小MTU网络链路时,就需要对原来的数据报进行拆分,然后把拆分后的分段一次传输出去,即IP协议的“分段(分组)”功能。在接收节点再重新组合起来(重组)。
1.地址空间面临枯竭。IPv4地址仅32位(IPV6 128位),公网地址数量有限。尽管采用像NAT(Network Address Translation网络地址转换)、VLSM(Variable Length Subnet Mask可变长子网掩码)、CIDR(Classless Inter-Domain Routing无类域间路由,CIDR的研究思路是:将剩余的IP地址不是按照标准的地址分类规则分配,而是以可变大小的块方法进行分配)等技术解决,但仍然难以满足需求,于是就有了IPv6协议。
2.骨干路由器维护的路由表项数量过大。由于IPv4发展初期分配规划的问题,造成许多IPv4地址块分配不连续,不能有效聚合路由。虽然通过CIDR能比较有效预制了全球IPv4 BGP路由表的线性增长,但聚合有的BGP路由表项有的也已高达几十万条,庞大的路由表用内存较多,对设备成本和转发效率都有一定的影响。
CIDR和VLSM在某程度上可以看做是逆过程,CIDR是把几个小网络汇聚成一个大网络来做表示,而VLSM则是把一个大网络继续细分为几个小网络进行IP地址分配。前者能让路由器的路由条目得到有效的减少,而后者可以充分利用IP进行地址分配而解决IP地址不被浪费的问题。
3.地址结构不合理。IPv4地址的分类(ABCDE)结构本身存在严重缺陷,不利于充分利用。如A类地址,大部分地址被浪费了;使用C类地址,空间又会严重不足;D和E类地址都无法利用。虽然可以通过VLSM和CIDR技术弥补,但路由表和策略就十分复杂,影响路由效率。
4.配置复杂。目前大多必须手动配置或通过控制状态的地址协议配置(如DHCP),需要更简单更自动化的地址配置和其他不依赖于DHCP基础机构的管理配置设置。如IPv6的自动配置功能。
5.不支持端到端安全。大多数基于IPV4协议的网络应用的安全功能需要依靠其他安全协议或功能模块实现,而IPV6就自带有像IPSec的安全功能(基础功能,任何节点都必须支持),不需要额外配置。如IPV4网络中的RIP\OSPFv2和IS-IS路由协议中邻居建立的安全认证就需要另外配置,而IPV6中RIPng\OSPFv3等路由协议不需要另外配置。
1.更大的地址空间。16字节,128位。初步估算,全球每人可分10个专用IP。
2.有效和分级的寻址及路由基础机构。大的地址空间和网络前缀,可以方便地进行层次化部署。如一个机构可以在其网络中只使用一个前缀。分层聚合使全局路由表项数量少,转发效率高。同一客户使用多个ISP接入时可以同时使用不同的前缀,这样不会对全局路由表的聚合造成影响。
3.支持无状态和控制状态的地址配置。为简化主机配置,ipv6既支持控制状态的地址配置(如DHCP)又支持无状态的地址配置,即DHCP服务器不存在时的地址配置。
使用无状态的地址配置,链接上的主机使用用于该链接的IPV6地址(本地链接地址)和由本地路由器广告的前缀导出的地址自动配置。即使没有路由器,同一链接上的主机也可以自动用本地连接地址配置自己,并在没有手动配置的情况下通信。
4.对服务质量QoS的更好支持。IPV6报头中的新字段定义了如何处理和识别通信。通过在报头中使用“流标签”字段,通信标识允许路由器识别属于流的数据报并为之提供特殊处理。因为在IPV6包头中标识通信,所以即使在数据报有效负载使用IPSEC加密时也很容易实现对QOS的支持。
5.提供用于邻近节点交互的新协议。IPV6的ND协议时一个用于IPV6的internet控制消息协议,用于管理邻居节点(即同一连接上的节点)的交互。ND协议使用有效的多播和单播消息替代原来的IPV4协议中的ARP和ICMPV4,并提供附加的功能。
6.可扩展性。IPSEC是ipv6协议基本定义的一部分,部署的任何节点都必须支持。IPV6中支持为IP定义的安全目标:保密性(只有预期接收者能读数据)、完整性(数据在传输过程中没有被篡改)、验证性(发送数据的实体和所宣称的实体完全一致)。
7.支持移动特性。任何IPV6节点都可以使用移动IP功能。移动IPV6使用邻居发现功能可直接实现外地网络的发现并得到转交地址,而不必使用外地代理。同时,利用路由扩展头和目的地址扩展头移动节点和对等节点之间可以直接通信,解决移动IPV4的三角路由、源地址过滤问题,移动通信处理效率更高且对应用层透明。
网络层协议有很多,这些协议也有层次高低之分。IP协议属于中层,比其高的有ICMP\IGMP,低的有ARP协议。凡是比IP协议高的协议的报文都需要经过IP协议封装,低的报文不需要经过IP协议封装。

1.版本:IP数据报中使用的IP协议版本。若是IPV4,值4(0100)
2.头部长度Header Length。4个字节为单位。当报头中没有“选项”字段时,报头总长度为5,即20字节(长度值为0101)。当长度为1111时,头部长度就达60字节,此时报头肯定包括一些选项。但报头长度必须是32位(4个字节)的整数倍(因为该字节是以4个字节为单位计数),否则需要在“选项”字段中填充(PAD)子字段中加0凑齐。
3.区分服务Differentiated Services。可以简单理解为数据报在处理时,要考虑处理的优先级情况。
最早该字段为“优先级和服务类型”(ToS)字段

Flag分别代表D-Delay延迟,T-Throughput吞吐量,R-Reliability可用性,C-Cost开销
后续又改为“区分服务”DS字段

DSCP,Differentiated Services Code Point区分服务码点
ECN-CT,Capable Transport,显示拥塞通知-能力传输,源端设置,表示是否迟滞ECN
ECN-CE,Congestion Experienced,显示拥塞通知-拥塞预警,路由器设置,向终端站点指示是否发生拥塞
4.总长度Total Length。标识整个IP数据报的总长度,包括报头和数据部分,以字节为单位。因而最大长度为2^16-1=65535字节,即64KB。
5.标识Identification。标识数据报的编号,每发送一个IP数据报其编号增加1,主要用于分组的封装。当一个数据报由于其长度超过下面数据链路层的MTU值必须进行拆分时,标识字段的值就被复制到所有的数据报分组的“标识”字段中。
6.标志Flags。标识该数据报后面是否还有分段。3位,最高始终为1,第二为DF(Don't Fragment不分段),1标识不分段,0标识分段;第3位为MF(More Fragment更多分段),1标识还有分段,0标识没有分段。
7.段偏移Fragment Offset。8个字节为单位(数据字段长度一定时8个字节的整数倍,不够填充),表示本分段的“数据”字段起始字节相对整个IP数据报的偏移单位(上层协议头必须全部在第一个分段中),每偏移8个字节增加1;若无分段,该字段值为0。
8.生存时间(Time To Live,TTL)。标识数据报在网络中传输的有效期,以秒计数。最初每经过一个路由器就把TTL减去数据报在路由器中消耗的一段时间。若在路由器中消耗时间小于1秒,则TTL值减1,建议值是32秒,最长2^8-1=255秒。现在通常认为TTL是指数据报允许经过的路由器数,每经过一个路由器减1,当值为0时就丢弃。设定TTL值是为了防止数据报在网络中无限制地循环转发。
9.协议Protocol。标识数据报中的数据字段内容的上层协议类型。如ICMP=0x1=00000001,TCP=0x6=00000110,UDP=0x17=00010001
10.校验和Checksum。主要检验“报头”部分(不包括数据部分)在传输到接收端后是否发生了变化。因为数据报每经过一个路由器,路由器都要通过CRC重新计算报头校验和(生存时间、标志、段偏移等都可能发生变化),不检验数据字段可减少计算的工作量。
11.源地址/目的地址Source Address/Destination Address。传输过程中,无论经过什么路由,无论如何分段,这两个字段一直保持不变。
数据报中没有子网掩码,如何确定要使用那个路由表项?使用“最长匹配”原则:当设备上又多条路由表项与要被转发的IP数据报中的目的IP地址匹配时,选择掩码长度最长的路由表项进行转发。
12.选项Options。提供各种扩展选项,用来支持排错、测量、安全等措施。如果报头不是32位的整数倍,需要使用后面的填充字段凑齐。如果恰好位整数倍,则不需要填充。

IPV6把IPV4报头中的某些字段移入到扩展报头中。其使用固定长度的基本报头(40字节),从而简化了转发设备对报文的处理,提高了转发效率。
1.版本。0x6(0110)表示IPv6版本。
2.通信分类Traffic Class。标识数据报的通信流类别或者优先级别。类似IPV4中的DS字段
3.流标签Flow Label。标识报文的数据流类型,以便在网络层区分不同报文,默认全0.
4.有效载荷长度Payload Length。数据字段包括“扩展报头”的总长度。
5.下一头部Next Header。标识当前报头(或扩展报头)的下一个头部的类型。
在IPV4报头中包含了几乎所有的可选项,因此每个中间路由器都必须检查这些选项是否存在。IPV6中,相关选项被同一移到扩展报头中,这样中间路由器不必处理每一个可能出现的选项(仅有“逐项选项”报头时必须要处理的),提高了路由器处理报文的速度,也提高了转发性能。主要的扩展报头类型如下:
(1)逐跳选项报头Hop-by-Hop Options Header
用于为通向目标路径上的每次跳转制定所需发送的参数。此报头必须被转发路径上的所有结点处理。
(2)目的选项报头Destination Options Header
只能出现在2个位置:一是“路由报头”前,此时该选项报头被目的节点和路由报头中指定的节点处理;二是“上层报头”前,此时只能被目的节点处理。
移动 IPv6中使用了“目的选项报头”,称为“家乡地址选项”。家乡地址选项由目的选项报头携带用于移动节点离开家乡后通知接收节点此移动节点对应的家乡地址。接收节点收到带有家乡地址选项的报文后,会把家乡地址选项中的源地址(移动节点的家乡地址)和报文中的源地址(移动节点的转交地址)交换,这样上层协议始终认为是在和移动节点的家乡地址通信,实现了移动漫游功能。
(3)路由报头Routing Header.用于源路由选项和移动IPV6
(4)分段报头Fragment Header.用于标识数据报的分段。
(5)认证报头Authentication Header,用于IPSEC,提供报文验证、完整性检查。
(6)封装安全有效载荷报头Encapsulation Security Payload Header,用于IPSEC,提供报文验证、完整性检查和加密。
(7)上层报头,用来标识数据报中上层协议的类型,如TCP\UDP\ICMP等。
注意:
前一个报头的Next Header字段指明下一个扩展报头的类型,形成链状的报头列表。

6.跳数限制Hop Limit。报文每经过一个路由器节点跳数减1,为0时直接丢弃。
7.源IP地址
8.目的IP地址。
1.每种数据链路层协议帧“数据”字段的大小(数据链路的MTU,最大传输单元)不一定一样,来自网络层的IP数据报大小必须小于等于对应链路层协议的MTU,否则一次性装不下,需要分几次来封装。

分段后IP报头的“标志”和“段偏移”字段要设置相应的值。
假设有一个ICMP 类型的 IP 数据报被分成了3个 IP 数据分段(不带“选项”字段),然后分别传输到以太网数据链路,最终获知前两个帧的大小均为 1518 个字节,最后一个帧的大小为 86个字节,求原来在网络层被拆分的各 ICMP 类型IP 数据分段的偏移值。

ARP协议,Address Resolution Protocol,地址解析协议,全称:Ethernet Address Resolution Protocol以太网地址解析协议。它的报文不需要经过IP协议封装(即报文头没有IP协议头),因为它比IP协议的层次低,直接生成自己的报文。如下:

硬件类型:2字节,标识发送方接口类型,以太网为0x0001
协议类型:2字节,标识网络类型,IPV4网络为0x0800
硬件地址长度:1字节,标识MAC地址长度,以太网地址为0x06
协议地址长度:1字节,IP地址长度,固定为0x04
操作类型:2字节,标识ARP报文类型,请求报文为1(0x0001),响应报文为2(0x0002)
源MAC地址:6字节,标识发送端接口的MAC地址
源IP地址:4字节,标识发送端设备接口的IP地址
目的MAC地址:6字节,标识接收端设备接口的MAC地址。请求报文中该值为00-00-00-00-00-00,标识任意地址,因为还不知道这个MAC地址。在响应报文中为接收方设备接口的MAC地址。
目的IP地址:4字节,标识接收端设备接口的IP地址
ARP报文在向下传输到数据链路层时仍需要经过数据链路层协议的帧封装,形成ARP帧。

目的MAC地址:6字节,如果时ARP请求帧,因为它是一个广播帧,所以填上FF-FF-FF-FF,目标是网络上的所有主机;如果是响应帧,则填上接收端接口的MAC地址。
类型:2字节,标识帧数据部分对应的上层协议类型,ARP协议号0x0806
可以在主机或三层设备上创建或者通过自动学习生成ARP映射表,把已知的IP地址与MAC地址光亮建立一个映射表,这样下次有数据要发送时直接通过在ARP映射表中查看接收方的IP地址就可以指导对应的接收方MAC地址了,不用再发送广播报文。
===============
数据在计算机网络中转发路径的建立就是依靠:交换机上的MAC地址表、主机上的ARP映射表
交换机上的MAC地址表:包括MAC地址、出接口(学习到对应MAC地址的如接口)、VLAN ID(仅在VLAN环境中存在);
主机上的ARP映射表:IP地址、MAC地址、出接口(网卡)
三层交换中在交换机上则需要同时建立二层MAC地址表(用于在同一局域网内部的数据转发)和三层的ARP映射表(用于在不同IP网段之间的数据转发).
===============
有2类:动态和静态
动态:指通过ARP协议自动学习到的源MAC和源IP地址表,可以被老化和被新的、相同的MAC或IP更新,可能被相同的MAC或IP静态ARP映射表项覆盖。当到达老化时间、接口关闭时会自动删除相应表项。
静态:手工配置的。不会被老化,不会被动态表项覆盖。可增加安全性(IP/MAC绑定,动态无法覆盖)。静态又可分为长静态和短静态表项:
长静态表项:必须包括IP地址、MAC地址对应的VLAN和出接口;
短静态表项:只需配置IP和MAC地址项。如果出接口是三层以太网接口,可以直接转发报文。如果短静态如果出接口是VLAN虚拟接口,不能直接转发报文,需要先发送ARP请求广播报文,如果收到的响应报文中的源IP和源MAC与所配置的IP和MAC相同,则将接收响应报文的接口加入该静态ARP映射表中,之后就可以用于IP数据报的转发了。
有2类
1.源主机与目的主机在同一IP网段的情形

2.源主机与目的主机不在同一IP网段情形
(1)广播获取网关MAC地址
(2)网关对比目的IP是不是自己,若不是自己则需要转发。网关首先在自己的ARP映射表中查与目的IP地址对应的映射表项,如果有则网关直接转发。
(3)如果网关没有对应的目的IP地址表项,会根据路由表项查找目的IP地址所在网段的路由路径中对应的出接口发送ARP请求广播报文,以查找所收到的数据帧中目的IP地址对应的MAC地址。
此时,假设目的主机是直接连接在网关上,因为目的主机的IP地址与ARP广播帧中的目的IP地址一致,所以会接收这个广播帧并建立基于网关的ARP映射表项。然后再以单播方式向网关发回一个响应报文,相当于向网关告诉目的主机的MAC地址。
(4)当网关收到响应报文后,建立基于目的主机的ARP表项,然后利用获取的目的主机的MAC地址对收到来自源主机的数据重新封装帧。此时帧中的源MAC地址是网关接口的MAC地址,目的地址就是目的主机的MAC地址。
免费ARP(Gratuitous ARP)、代理ARP(Proxy ARP)、逆向ARP(Reverse ARP,RARP)
1.免费ARP是ARP请求广播帧的一个特例,其报文中的源IP地址和目的IP地址是相同的。
主要作用:IP地址冲突检测、MAC地址更新、防止IP地址欺骗
(1)IP地址冲突检测:应用于DHCP自动为客户机分配IP地址的情形,再客户端收到DHCP服务器分配的IP地址时,会先通过向网络中发送一个免费ARP报文验证网络中是否还有其他节点在使用。
(2)MAC地址更新:某设备MAC地址更新了,需要同步更新网络上的各设备创建的MAC地址表和ARP映射表
(3)防止IP地址欺骗:攻击者仿冒网关的MAC地址,但IP地址不与网关地址一样,这样网络设备会误认为网关的IP地址发生了变化,会更新自身的MAC地址表和ARP映射表,最终导致本网段用户连接到了非法网关上。可以通过定期发送免费ARP报文解决。
2.代理ARP。主要用于在同一IP网段,但中间却间隔了三层设备的两个物理网段的用户间通信。
如华为、H3C的Super VLAN中各子VLAN是不能直接进行二层通信的,只能通过三层。但这些子VLAN又在同一个IP网段,要实现它们之间的三层通信,就必须借助于这里的代理ARP功能。
要使用代理ARP,主机上必须不能配置默认网关,否则当查询的MAC地址位于本网段之外时,也会把查询任务交给默认网关,即使目的主机与源主机在同一IP网段。
3.RARP与ARP的解析原理是相反的,即通过MAC地址来解析出对应的IP地址,常用于无盘工作站中。因为无盘工作站所使用的操作系统都位于服务端的(无盘工作站自己没有硬盘),在启动时只指导自己网卡MAC地址,其IP地址就要通过RARP来从服务器端解析出来,因为在服务器端会为每个无盘工作站的MAC地址于所分配的IP地址建立一个映射表。

用于在IP主机、路由器之间传递控制消息,比IP协议的内部层次高。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。
因为ICMP在网络层中比IP协议的层次高,所以它的报文仍要通过IP协议封装。主要用于像ping和tracert这样的诊断程序的信息回显。
ICMP报文包括:一个IP报头(至少20字节,没有选项字段)、一个ICMP报头(至少8个字节)和一个ICMP信息内容。IPV4报头中的“协议”字段值为1是,说明这是ICMP报文。



1.ICMP在ping操作中的应用
ping使用一系列ICMP的消息来测试目的地址是否可达,是一个发出请求(echo包)并等待响应(echo reply包)的过程。Ping 不成功,会显示request timed out。
2.ICMP在tracert操作中的应用
tracert是为了探测源节点到目的节点之间数据报文所经过的跃点(Hop),是一项路径跟踪计数。
它利用的是IP报文的TTL字段值在每经过一个路由器(即一个跃点)转发后减1,当TTL=0时则向源节点报告TTL超时的机制。

1.先发送TTL=1的UDP报文,因原始TTL=1,所以会因为TTL超时返回一个超时信息,包括报文传输时间、ICMP消息的返回时间、返回ICMP消息的节点IP地址。
2.在发送TTL=2的UDP报文,在到达第二个跃点后同样会因为TTL超时而返回一个超时消息。
3这个过程不断进行,直到到达目的地
tracert记录下每一个ICMP TTL超时消息的源地址,从而提供了到达目的地所经过的所有跃点IP地址,也就直到了到达目的地址的整条路径。
tracert也可像ping一样测试网络连通性,因为当tracert某一目的地址时,从显示的路径信息可以判断出故障点在什么地方(不通或者跟踪超时的跃点的回显信息为*)。如果路径中某一跳到达不了时则会无法继续测试下一条,会提前结束tracert操作。