IP校验和

TCP/IP协议族包含了很多功能各异的子协议。为此我们也利用上文所述的分层的方式来剖析它的结构。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。 


TCP/IP网络协议 
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛发展密切相关—TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。 


* 应用层—应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、 远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。 


* 传输层—这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。 


* 网络层—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。 


* 网络接口层—这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。 


IP数据包的头信息格式:
    +-------------------------------------------------+
    |  版本 (4位)                                    |
    +-------------------------------------------------+
    |  首部长度(4位)                                        |
    +-------------------------------------------------+    
    |  服务类型(TOS)8位                            |
    +-------------------------------------------------+
    |  数据包总长度(16位)                            |
    +-------------------------------------------------+
    |  标识ID号(16位)                                |
    +-------------------------------------------------+    
    |  标志位(3位)                                  |
    +-------------------------------------------------+
    |  片偏移(13位)                                  
    +-------------------------------------------------+    
    |  生存时间(TTL)(8位)                          |
    +-------------------------------------------------+    
    |  协议类型 (8位)                                 |
    +-------------------------------------------------+    
    |  首部校验和(16位)                              |
    +-------------------------------------------------+    
    |  源IP地址(32位)                               |
    +-------------------------------------------------+    
    |  目的IP地址 (32位)                            |
    +-------------------------------------------------+  
    *  IP选项(若有) (32位)                        *
    +-------------------------------------------------+    
    *  数据                                          *
    +-------------------------------------------------+    


这里要说的是首部校验和字段。
    在发送数据时,为了计算数IP据报的校验和。应该按如下步骤:
    (1)把IP数据报的首部都置为0,包括校验和字段。
    (2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和。
    (3)把得到的结果存入校验和字段中。
    在接收数据时,计算数据报的校验和相对简单,按如下步骤:
    (1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段。
    (2)检查计算出的校验和的结果是否等于零。
    (3)如果等于零,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。








分组头的校验和 (checksum) 算法是 16 位 累加和后的反码, TCP 和 UDP 数据报头也使用相同的校验算法,但参与运算的数据与 IP 分组头不一样。 


IPv4 分组头的结构如下所示: 


0 1 2 3 
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 


其中的 "Header Checksum" 域即为头校验和部分。当要计算 IPv4 分组头校验和时,发送方先将其置为 0 ,然后按 16 位逐一累加至 IPv4 分组头结束,累加和保存于一个 32 位的数值中。如果总的字节数为奇数,则最后一个字节单独相加。累加完毕将结果中高 16 位再加到低 16 位上,重复这一过程直到高 16 位为全 0 。下面用实际截获的 IPv4 分组(数据连路层 DLC 的包)来演示整个计算过程: 

0x0000: 00 60 47 41 11 c9 00 09 6b 7a 5b 3b 08 00 45 00 
0x0010: 00 1c 74 68 00 00 80 11 59 8f c0 a8 64 01 ab 46 
0x0020: 9c e9 0f 3a 04 05 00 08 7f c5 00 00 00 00 00 00 
0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 


在上面的 16 进制采样中,起始为 Ethernet 帧 (DLC 包 ) 的开头。 IPv4 分组头从地址偏移量 0x000e 开始,第一个字节为 0x45 ,最后一个字节为 0xe9 ,即 IPv4 分组头到目标 IP 地址为止。根据以上的算法描述,我们可以作如下计算: 


(1) 0x4500 + 0x001c + 0x7468 + 0x0000 + 0x8011 + 0x0000( 累加和位置先置0) + 0xc0a8 + 0x6401 + 0xab46 + 0x9ce9 = 0x3a66d 


(2) 0xa66d + 0x3 = 0xa670 


(3) 0xffff - 0xa670 = 0x598f 


注意在第一步我们用 0x0000 设置头校验和部分。可以看出这一分组头的校验和与收到的值完全一致。以上的过程仅用于发送方计算初始的校验和,实际中对于中间转发的路由器和最终接收方,可将收到的 IPv4 分组头校验和部分直接按同样算法相加,如果结果为 0xffff ,则校验正确。 


对于 TCP 和 UDP 的数据报,其头部也包含 16 位的校验和,校验算法与 IPv4 分组头完全一致,但参与校验的数据不同。这时校验和不仅包含整个 TCP/UDP 数据报,还覆盖了一个虚头部。虚头部的定义如下: 


0 7 8 15 16 23 24 31 
+--------+--------+--------+--------+
| source address |
+--------+--------+--------+--------+
| destination address |
+--------+--------+--------+--------+
| zero |protocol| TCP/UDP length |
+--------+--------+--------+--------+ 


其中有 IP 源地址, IP 目的地址,协议号 (TCP:6/UDP:17) 及 TCP 或 UDP 数据报的总长度 ( 头部 + 数据 ) 。将虚头部加入校验的目的,是为了再次核对数据报是否到达正确的目的地,并防止 IP 欺骗攻击 (spoofing) 。上述报文在 0x0018 处的协议类型 = 十六进制 11 ,即该报文是一个 UDP 报文,其长度存放在 0x0027 开始的两个字节 ( 含源目端口地址 4 字节 +UDP 长度 2 字节 + 校验和 2 字节 =8 字节,以及 UDP 数据的长度:故本数据包 UDP 数据的长度实际为 0 字节 ) , IP 源目地址存放在 0x0x1a 到 0x0x21 共八个字节中,先将校验和 0x002a 处的两个字节置 0 ,计算 UDP 包的校验 和如下: 

0 7 8 15 16 23 24 31 
+--------+--------+--------+--------+
| source address |
+--------+--------+--------+--------+
| destination address |
+--------+--------+--------+--------+
| zero |protocol| TCP/UDP length |
+--------+--------+--------+--------+ 


其中有 IP 源地址, IP 目的地址,协议号 (TCP:6/UDP:17) 及 TCP 或 UDP 数据报的总长度 ( 头部 + 数据 ) 。将虚头部加入校验的目的,是为了再次核对数据报是否到达正确的目的地,并防止 IP 欺骗攻击 (spoofing) 。上述报文在 0x0018 处的协议类型 = 十六进制 11 ,即该报文是一个 UDP 报文,其长度存放在 0x0027 开始的两个字节 ( 含源目端口地址 4 字节 +UDP 长度 2 字节 + 校验和 2 字节 =8 字节,以及 UDP 数据的长度:故本数据包 UDP 数据的长度实际为 0 字节 ) , IP 源目地址存放在 0x0x1a 到 0x0x21 共八个字节中,先将校验和 0x002a 处的两个字节置 0 ,计算 UDP 包的校验 和如下: 


(1) 0xc0a8+0x6401( 前为源IP)+0xab46+ 0x9ce9 ( 前为目IP)+0x0011( 即Zero 和Protocol)+ 0x0008(UDP 长度)+ 0x0f3a( 源端口)+0x0405( 目端口)+0x0008(UDP 长度)+0x0000 (校验和预置为0 )+…( 这里没有任何数据了:UDP 数据的长度实际为0 字节)=0x2803 8 


(2) 0x28038=>0x8038+0x0002=0x803A 


(3) 0xFFFF-0x803A=0x7FC5 


计算结果和 0x0028 处的结果相同,注意 UDP 长度出现了两次。 


ip头部结构分析 
2010-08-17 13:39
Version     4      IP头的版本号,目前是IPv4,最新是IPv6 
Header Length     4      IP头的长度,若没有特殊选择,IP头总是20字节长 
Type of Service     8      服务类型,定义了数据传输的优先级、延迟、吞吐量和可靠性等特性
Total Packet Length     16      IP包的长度,若没有特殊选项,一般为20字节长 
Identification     16      IP包标识,主机使用它唯一确定每个发送的数据报 
Flag     3      IP数据分割标志
Fragment Offset     13      IP数据分割偏移 
Time to Live      8      数据报在网络上的存活时间,每通过一个路由器,该数值减一 
Protocol      8      TCP/IP协议类型,比如:ICMP为1,IGMP为2,TCP为6,UDP为17等 
Header Checksum     16     头部检验和 
Source IP Address      32     源IP地址 
Destination IP Address     32      目的IP地址
Other     ?      其他选项 
Data     ?      数据 
struct iphdr
     {
       unsigned char ihl:4, version:4, tos;
       unsigned short tot_len, id, frag_off;
       unsigned char ttl, protocol;
       unsigned short check;
       unsigned int saddr, daddr;
     };
    
     struct igmphdr
     {
       unsigned char type, code;
       unsigned short cksum;
       struct in_addr group;
     };


typedef struct ethdr
{
     unsigned char   eh_dst[6];
     unsigned char   eh_src[6];
     unsigned short eh_type;
}


struct udphdr
{
     unsigned short souceport;
     unsigned short destport;
     unsigned short length;
     unsigned short checksum;
}


struct tcphdr { unsigned short source;
        unsigned short dest;
        unsigned long seq;
        unsigned long ack_seq;        
        unsigned short doff:4;
        unsigned char flags;
        unsigned short window;        
        unsigned short check;
        unsigned short urg_ptr;
};


版本 —— 标识了IP协议的版本,通常这个字段的值为0010,常用的版本号为4,新的版本号为6,现在IPv6还没有普遍使用,但是中国已经为奥运会建立了一个ipv6的网络。IPv6又被称为IPng(IP Next Generation)


报头长度 ——这个字段的长度为4,它表明了IP报头的长度,设计这个字段的原因是报文的选择项字段会发生改变,IP报头的最小长度为20个8bit,最大为24个8bit。报文字段描述了以32比特为单位程度的报头长度,其中5表示IP报头的最小长度为160比特,6表示最大。


服务类型——字段长度为8位,它用来表示特殊报文的处理方式。服务类型字段实际上被划分为2个部分,一部分为优先权一部分为TOS。优先权用来设定报文的优先级,就像邮包分为挂号和平信一样。TOS允许按照吞吐量、时延、可靠性和费用方式选择传输服务,在早期的时候,TOS还被用来进行路由选择。在QOS中有时也会使用优先权,常见的优先权队列。


总长度—— 字段长度为16位,通常预标记字段和分片偏移字段一起用于IP报文的分段。如果报文总长度大于数据链路可传输的最大传输单元(MTU),那么就会对报文进行分片。


标记字段 —— 长度位3位,其中第一位没有被使用第二位是不分片位,当DF位被置1,表示路由器不能对数据报文进行分片处理,如果报文由于不能被分片而不能被转发,那么路由器将丢弃这个数据包,并向源地址发送错误报告。这一功能可以用来测试线路的最大传输单元。第三位MF,当路由器对数据进行分片时,除了最后一个分片的MF位为0外,其他所有的MF为全部为1,表示其后面还有其他的分片。


分片偏移――字段长度为13位,以8个bit为单位,用于指明分片起始点相对于报头的起始点的偏移量,由于分片到达时间可能错序,所以分片偏移字段可以使得接受者按照顺序重新组织报文。


生存时间—— 字段长度为8位,在最初创建报文时,TTL就被设定为某个特定值,当报文沿路由器传送时,每经过一个路由器TTL的值就会减小1,当TTL为零的时候,就会丢弃这个报文,同时向源地址发送错误报告,促使重新发送。


协议――字段长度为8位,它给出了主机到主机或者传输层的地址或者协议号,协议字段中指定了报文中信息的类型,当前已分配了100多个不同的协议号。
校验和――时针对IP报头的纠错字段,校验和的计算不能用被封装的数据内容,UDP/TCP/和ICMP都有各自的校验和,此字段包含一个16位的二进制补码和,这是由报文发送者计算得到的,接收者将联通院士校验和从新进行16位补码和计算,如果在传输中没有发生错误,那么16位补码值全部为1,由于路由器都会降低TTL值,所以路由器都会重新计算校验和。


源地址――字段长度为32位,分别表示发送报文的路由器的源地址。


目的地址――标识接收数据报文的路由器的地址。


可选项――这个字段是一个变长字段,并且可选,可选项被添加到报头中,包括圆点长生的信息和其他路由器假如的信息,这个字段主要用于测试。常用的可选项如下:

Loose Srouce Routing ――它给出了一连串路由器接口的IP地址序列。报文必须沿IP地址序列传送,但是允许在相继的两个的只见跳过多个路由器。


Sttict Source Routing――它给出了一系列路由器接口的IP地址的序列,不同于loose Source Routing ,报文必须按照序列转发,否则就会出错。


Record Route――给离开路由器的报文记录出口地址,以便保留报文经过的所有的路由器的记录。


Timestamp―― 除了每个路由器还会记录一个时间戳之外,时间戳现象十分类似于记录路由选项。


填充――该字段通过在后面添加0来补足32位,这样保证报头长度是32bit的倍数。






ICMP数据报结构 引用自:http://blog.csdn.net/jiadelin/archive/2008/07/28/2726435.aspx


// ICMP header
typedef struct _tagX_icmphdr
{
 unsigned char i_type;     //类型
 unsigned char i_code;     //代码
 unsigned short i_cksum;  //检验和
 unsigned short i_id;        //标识符
 unsigned short i_seq;     //序列号
 unsigned long i_timestamp;  //当前时间  =(unsigned long)::GetTickCount();


}XIcmpHeader;


 


各种ICMP报文的前32bits都是三个长度固定的字段:type类型字段(8位)、code代码字段(8位)、checksum校验和字段(16位)


8bits类型和8bits代码字段:一起决定了ICMP报文的类型。常见的有:
  
  类型8、代码0:回射请求。


类型0、代码0:回射应答。
  
  类型11、代码0:超时。
  
  16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方法和IP头部校验和的计算方法是一样的。


下图是一张ICMP回射请求和应答报文头部格式




 


对于ICMP回射请求和应答报文来说,接下来是16bits标识符字段:用于标识本ICMP进程。
  
最后是16bits序列号字段:用于判断回射应答数据报。


 


ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面


一个ICMP报文包括IP头部(20字节)、ICMP头部(8字节)和ICMP报文


IP头部的Protocol值为1就说明这是一个ICMP报文


ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式


此外还有代码(Code)域用于详细说明某种ICMP报文的类型


所有数据都在ICMP头部后面。RFC定义了13种ICMP报文格式,具体如下:


类型代码 类型描述


0 响应应答(ECHO-REPLY)


3 不可到达


4 源抑制

5 重定向


8 响应请求(ECHO-REQUEST)


11 超时


12 参数失灵


13 时间戳请求


14 时间戳应答


15 信息请求(*已作废)


16 信息应答(*已作废)


17 地址掩码请求


18 地址掩码应答


其中代码为15、16的信息报文已经作废。


下面是几种常见的ICMP报文:


1.响应请求


我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。


2.目标不可到达、源抑制和超时报文

这三种报文的格式是一样的,目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。最后,无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。


3.时间戳


时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。


--------------------------------种类-------------------------------------


ICMP报文格式 
ICMP虽然是网络层的协议,但要将ICMP报文放入IP中发送。


ICMP报文的公共头标由1字节的类型(type)、1字节的 
代码(code)和2字节的校验和(checksum)组成。 
类型域和代码域用来标识各种ICMP报文。类型域表示ICMP报文的类型,目前已定义了14 
种,从类型值来看ICMP报文可分为二大类。


第1 类是取值为1~127的差错报文,


第2类是取值128以上的是信息(informational)报文。




1不能到达信宿(Destination Unreachable)差错报文 
2分组过大(Packet Too Big)差错报文 
3超时(Time Exceeded)差错报文 




4参数问题(Parameter Problem)差错报文 
128返回请求(Echo Request)报文 
129返回应答(Echo Reply)报文 
130组成员查询(Group Membership Query) 
131组成员报告(Group Membership Report) 

131组成员报告(Group Membership Report) 
132组成员结束(Group Membership Termination) 
133路由器请求(Router Solicitation) 
134路由器公告(Router Advertisement) 
135邻机请求(Neighbor Solicitation) 
136邻机公告(Neighbor Advertisement) 
137 重定向(Redirect)








ARP/RARP协议默认分类 2007-06-18 14:21:42 阅读22 评论0   字号:大中小 订阅 .


 


一、            ARP/RARP协议简介


ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,用于将网络中的协议地址(当前网络中大多是IP地址)解析为本地的硬件地址(MAC地址)。


注意:此文中的协议地址都以IP地址为例,硬件地址以MAC地址为例。


ARP的工作流程如下:


1.       首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。 


2.       当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。


3.       网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址; 


4.       源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。


RARP,全称Reverse Address Resolution Protocol,中文名为逆向地址解析协议,它工作在数据链路层,用于将本地的硬件地址(MAC地址)解析为网络中的协议地址(当前大多是IP地址)。


RARP的工作流程如下:


1.     发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;


2.     本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;


3.     如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;


4.     如果不存在,RARP服务器对此不做任何的响应;


5.     源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。




ARP和RARP使用相同的报头结构,如图1所示。






硬件类型
 
协议类型
 


硬件地址长度
 
协议长度
 
操作类型
 


发送方的硬件地址(0-3字节)
 


发送方的硬件地址(4-5字节)

发送方IP(0-1字节)
 


发送方IP(2-3字节)
 
目的硬件地址(0-1字节)
 


目的硬件地址(2-5字节)
 


目的IP(0-3字节)
 
   




(图1 ARP/RARP报头)


l         硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;


l         协议类型字段指明了发送方提供的高层协议类型,IP为0806(16进制);


l         硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;


l         操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;


l         发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;


l         发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;


l         发送方IP(0-1字节):源主机硬件地址的前2个字节;


l         发送方IP(2-3字节):源主机硬件地址的后2个字节;


l         目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;


l         目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;


l         目的IP(0-3字节):目的主机的IP地址。


  


二、            跟踪分析ARP/RARP流程


1.     ARP流程


我们使用科来网络分析系统5.0跟踪分析一个ARP的通讯过程,一个正常的ARP通讯包括ARP请求和ARP响应两部分。


 ARP报头里的操作类型字段值为1,说明这个ARP数据包是一个ARP请求,源主机的硬件地址是00:A1:B0:05:14:15,IP地址是192.168.2.44,它将此ARP请求广播到当前网段上的所有主机,期望获得IP地址192.168.2.1所对应的硬件地址。


ARP报头里的操作类型字段值为2,说明这个ARP数据包是一个ARP响应,源主机的硬件地址是00:E0:4E:10:F9:4C,IP地址是192.168.2.1,目标主机硬件地址是00:A1:B0:05:14:15,目标IP是192.168.2.44。此数据包是一个单播数据包,表示IP地址为192.168.2.1的主机告诉192.168.2.44自己的硬件地址是00:E0:4E:10:F9:4C。


 


2.     RARP流程


再次使用科来网络分析系统5.0跟踪分析一个RARP的通讯过程,一个正常的RARP通讯也包括RARP请求和RARP响应两部分。


RARP报头里的操作类型字段值为3,说明这个RARP数据包是一个RARP请求,源主机的硬件地址是00:A1:B0:05:14:15,但源主机并不知道自己的IP地址,于是置为0.0.0.0,源主机也不知道RARP服务器的硬件地址和IP地址,将RARP服务器的地址置为自己的硬件地址,IP地址置为0.0.0.0。并将此RARP请求广播到当前网段上的所有主机,期望获得硬件地址00:A1:B0:05:14:15对应的IP地址。


RARP报头里的操作类型字段值为4,说明这个RARP数据包是一个RARP响应,源主机的硬件地址是00:E0:4E:10:F9:4C,IP地址是192.168.2.1,目标主机硬件地址是00:A1:B0:05:14:15,目标IP是192.168.2.44。此数据包是一个单播数据包,表示IP地址为192.168.2.1的RARP服务器告诉硬件地址为00:A1:B0:05:14:15的主机可以使用的IP地址是192.168.2.44。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值