购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 网络层

网络层向上层提供简单灵活的、无连接的、尽最大努力交付的数据报服务。该层重要的协议有IP、ICMP(Internet Control Message Protocol,互联网控制报文协议)、IGMP(Internet Group Management Protocol,互联网组织管理协议)、ARP(Address Resolution Protocol,地址转换协议)、RARP(Reverse Address Resolution Protocol,反向地址转换协议)等。

1.4.1 IP协议

IP协议是TCP/IP协议族中最为核心的协议。它把上层数据报封装成IP数据报后进行传输。如果IP数据报太大,还要对数据报进行分片后再传输,到了目的地址处再进行组装还原,以适应不同物理网络对一次所能传输数据大小的要求。

1.IP协议的特点
(1)不可靠

不可靠的意思是它不能保证IP数据报能成功地到达目的地。IP协议仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层协议来提供(如TCP协议)。

(2)无连接

无连接的意思是IP协议并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A之前先到达。

(3)无状态

无状态的意思是通信双方不同步传输数据的状态信息,无法处理乱序和重复的IP数据报;IP数据报提供了标识字段用来唯一标识IP数据报,用来处理IP分片和重组,不指示接收顺序。

2.IPv4数据报的报头格式

IPv4数据报的报头格式如图1-8所示,主要说明IPv4的报头结构,IPv6的报头结构与之不同。图1-8中的“数据”以上部分就是IP报头的内容。因为有了选项部分,所以IP报头长度是不定的。如果选项部分没有,则IP报头的长度为(4+4+8+16+16+3+13+8+8+16+32+32)bit=160bit=20字节,这也是IP报头的最小长度。

图1-8

· 版本(Version):占用4 bit,标识目前采用的IP协议的版本号,一般取值为0100(IPv4)和0110(IPv6)。

· 首部长度(Header Length):即IP报头长度,这个字段的作用是为了描述IP报头的长度。该字段占用4 bit,由于在IP报头中有变长的可选部分,为了能多表示一些长度,因此采用4字节(32 bit)为本字段数值的单位,比如,4 bit最大能表示为1111,即15,单位是4字节,因此最多能表示的长度为15×4=60字节。

· 服务类型(Type of Service,TOS):占用8 bit,可用PPPDTRC0这8个字符来表示,其中,PPP定义了数据报的优先级,取值越大表示数据越重要,取值如表1-1所示。

表1-1 数据报的取值及其含义

D:时延,0表示普通,1表示延迟尽量小

T:吞吐量,0表示普通,1表示流量尽量大

R:可靠性,0表示普通,1表示可靠性尽量大

C:传输成本,0表示普通,1表示成本尽量小

0:这是最后一位,被保留,恒定为0

· 总长度:占用16 bit,该字段表示以字节为单位的IP数据报的总长度(包括IP报头部分和IP数据部分)。如果该字段全为1,就是最大长度了,即2 16 -1= 65535字节≈ 63.9990234375KB,有些书上写最大是64KB,其实是达不到的,最大长度只能是65535字节,而不是65536字节。

· 标识:在协议栈中保持着一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。注意这个“标识符”并不是序号,IP是无连接服务,数据报不存在按序接收的问题。当IP数据报由于长度超过网络的MTU(Maximum Transmission Unit,最大传输单元)而必须分片(把一个大的网络数据报拆分成一个个小的数据报)时,这个标识字段的值就被复制到所有的小分片的标识字段中。相同的标识字段的值使得分片后的各数据报片最后能正确地重装成为原来的大数据报。该字段占用16 bit。

· 标志(Flags):该字段占用3 bit,该字段最高位不使用,第二位称DF(Don't Fragment)位,DF位设为1时表明路由器不对该上层数据报分片。如果一个上层数据报无法在不分段的情况下进行转发,则路由器会丢弃该上层数据报并返回一个错误信息。最低位称MF(More Fragments)位,为1时说明这个IP数据报是分片的,并且后续还有数据报;为0时说明这个IP数据报是分片的,但已经是最后一个分片了。

· 片偏移:该字段的含义是某个分片在原IP数据报中的相对位置。第一个分片的偏移量为0。片偏移以8个字节为偏移单位。这样,每个分片的长度一定是8字节(64位)的整数倍。该字段占13 bit。

· 生存时间(TTL,Time to Live,也称存活时间):表示数据报到达目标地址之前的路由跳数。TTL是由发送端主机设置的一个计数器,每经过一个路由节点就减1,减到为0时,路由就丢弃该数据报,向源端发送ICMP差错报文。这个字段的主要作用是防止数据报不断在IP互联网络上循环转发。该字段占8 bit。

· 协议:该字段用来标识数据部分所使用的协议,比如取值1表示ICMP、取值2表示IGMP、取值6表示TCP、取值17表示UDP、取值88表示IGRP、取值89表示OSPF。该字段占8 bit。

· 首部校验和(Header Checksum):该字段用于对IP头部的正确性检测,但不包含数据部分。由于每个路由器会改变TTL的值,所以路由器会为每个通过的数据报重新计算首部校验和。该字段占16 bit。

· 起源和目标地址:用于标识这个IP数据报的起源和目标IP地址。值得注意的是,除非使用NAT(网络地址转换),否则整个传输的过程中,这两个地址不会改变。这两个地段都占用32 bit。

· 选项(可选):这是一个可变长的字段。该字段属于可选项,主要是给一些特殊的情况使用,最大长度是40字节。

· 填充(Padding):由于IP报头长度这个字段的单位为32bit,所以IP报头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。

在Linux源码中,IP报头的定义如下:

     struct iphdr {
     #if defined(__LITTLE_ENDIAN_BITFIELD)
        __u8    ihl:4,
            version:4;
     #elif defined (__BIG_ENDIAN_BITFIELD)
        __u8    version:4,
              ihl:4;
     #else
     #error    "Please fix <asm/byteorder.h>"
     #endif
        __u8    tos;
        __be16    tot_len;
        __be16    id;
        __be16    frag_off;
        __u8    ttl;
        __u8    protocol;
        __sum16    check;
        __be32    saddr;
        __be32    daddr;
        /*The options start here. */
     };

这个定义可以在源码目录的include/uapi/linux/ip.h查到。

3.IP数据报分片

IP协议在传输数据报时,将数据报分为若干分片(小数据报)后进行传输,并在目的系统中进行重组,这一过程称为分片(Fragmentation)。

要理解IP分片,首先要理解MTU,物理网络一次传送的数据是有最大长度的,因此网络层的下层(数据链路层)的传输单元(数据帧)也有一个最大长度,这个最大长度值就是MTU,每一种物理网络都会规定链路层数据帧的最大长度,比如以太网的MTU为1500字节。

IP协议在传输数据报时,若IP数据报加上数据帧头部后长度大于MTU,则将数据报切分成若干分片后再进行传输,并在目标系统中进行重组。IP分片既可能在源端主机进行,也可能发生在中间的路由器处,因为不同网络的MTU是不一样的,而传输的整个过程可能会经过不同的物理网络。如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。分片数据的重组只会发生在目的端的IP层。

4.IP地址的定义

IP协议中有个概念叫IP地址。所谓IP地址,就是Internet中主机的标识,Internet中的主机要与别的主机通信必须具有一个IP地址。就像房子要有个门牌号,这样邮递员才能根据信封上的地址送到目的地。

IP地址现在有两个版本,分别是32位的IPv4和128位的IPv6,后者是为了解决前者不够用的问题而产生的。每个IP数据报都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据报选择路由。

这里以IPv4为例,IP地址由四个数字组成,数字之间用小圆点隔开,每个数字的取值范围在0~255之间(包括0和255)。通常有两种表示形式:

(1)十进制表示,比如192.168.0.1。

(2)二进制表示,比如11000000.10101000.00000000.00000001。

两种方式可以相互转换,每8位二进制数对应一位十进制数,如图1-9所示。

图1-9

实际应用中多用十进制表示,比如172.16.100.2。

5.IP地址的两级分类编址

互联网有很多网络构成,每个网络上都有很多主机,这样便构成了一个有层次的结构。IP地址在设计的时候就考虑到地址分配的层次特点,把每个IP地址分割成网络号(NetID)和主机号(HostID)两个部分,网络号表示主机属于互联网中的哪一个网络,而主机号则表示其属于该网络中的哪一台主机,两者之间是主从关系。同一网络中绝对不能有主机号完全相同的两台计算机,否则会报出IP地址冲突。IP地址分为两部分后,IP数据报从网际上的一个网络到达另一个网络时,选择路径时可以基于网络而不是主机。在大型的网际中,这一优势特别明显,因为路由表中只存储网络信息而不是主机信息,这样可以大大简化路由表,方便路由器的IP寻址。

根据网络地址和主机地址在IP地址中所占的位数可将IP地址分为A、B、C、D、E五类,每一类网络可以从IP地址的第一个数字看出,如图1-10所示。

图1-10

这5类IP地址中,A类地址,第一位为0,第二至八位为网络地址,第九至三十二位为主机地址,这类地址适用于为数不多的主机数大于65536(2 16 )的大型网络,A类网络地址的数量最多不超过126(2 7 -2)个,每个A类网络最多可以容纳16777214(2 24 -2)台主机。

B类地址前两位分别为1和0,第三至第十六位为网络地址,第十七至三十二位为主机地址,此类地址用于主机数介于256~65536(2 8 ~2 16 )之间的中型网络,B类网络数量最多16382(2 14 -2)个。

C类地址前三位分别为1、1、0,四到二十四位为网络地址,其余为主机地址,用于每个网络只能容纳254(2 8 -2)台主机的大量小型网,C类网络数量上限为2097150(2 21 -2)个。

D类地址前四位为1、1、1、0,其余为多目地址。

E类地址前五位为1、1、1、1、0,其余位数留待后用。

A类IP的第一个字节范围是0到126,B类IP的第一个字节范围是128到191,C类IP的第一个字节范围是192到223,例如192.X.X.X肯定是C类IP地址,根据IP地址的第一个字节的范围就能够推导出该IP属于A类、B类或C类。

IP地址以A、B、C三类为主,又以B、C两类地址更为常见。除此之外还有一些特殊用途的IP地址:广播地址(主机地址全为1,用于广播,这里的广播是指同时向网上所有主机发送报文,不是指我们日常听的那种广播)、有限广播地址(所有地址全为1,用于本网广播)、本网地址(网络地址全为0,后面的主机号表示本网地址)、回送测试地址(127.X.X.X型,用于网络软件测试及本地机进程间通信)、主机位全0地址(这种地址的网络地址就是本网地址)及保留地址(网络号全为1和32位全为0两种)。由此可见,网络位全1或全0和主机位全1或全0都是不能随意分配的。这也就是前面的A、B、C类网络的网络数及主机数要减2的原因。

总之,主机号全为0或全为1时分别作为本网络地址和广播地址使用,这种IP地址不能分配给用户使用。D类网络用于广播,它可以将信息同时传送到网上的所有设备,而不是点对点的信息传送,这种网络可以用来召开电视电话会议。E类网络常用于试验。网络管理员在配置网络时不应该采用D类和E类网络。特殊的IP地址如表1-2所示。

表1-2 特殊的IP地址

当前,A类地址已经全部分配完,B类也不多了,为了有效并连续地利用剩下的C类地址,互联网采用CIDR(Classless Inter Domain Routing,无类别域间路由)方式把许多C类地址合起来作B类地址分配,全球被分为四个地区,每个地区分配一段连续的C类地址:欧洲(194.0.0.0~195.255.255.255)、北美(198.0.0.0~199.255.255.255)、中南美(200.0.0.0~201.255.255.255)、亚太地区(202.0.0.0~203.255.255.255)、保留备用(204.0.0.0~223.255.255.255)。这样每一地区都有约3200万个网址供使用。

6.网络掩码

在IP地址的两级编址中,IP地址由网络号和主机号两部分组成,如果我们把主机号部分全部置零,此时得到的地址就是网络地址,网络地址可以用于确定主机所在的网络,为此路由器只需计算出IP地址中的网络地址,然后与路由表中存储的网络地址相比较就知道这个分组应该从哪个接口发送出去。当分组达到目的网络后,再根据主机号抵达目的主机。

要计算出IP地址中的网络地址,需要借助于网络掩码,或称默认掩码。它是一个32位的数,前面n位全部为1,后边32~n位连续为0。A、B、C三类地址的网络掩码分别为255.0.0.0、255.255.0.0和255.255.255.0。我们通过IP地址和网络掩码进行与运算,得到的结果就是该IP地址的网络地址。网络地址相同的两台主机,就是处于同一个网络中,它们可以直接通信,而不必借助于路由器了。

举个例子,现在有两台主机A和B,A的IP地址为192.168.0.1,网络掩码为255.255.255.0;B的IP地址为192.168.0.254,网络掩码为255.255.255.0。我们先对A运行,把它的IP地址和子网掩码每位相与:

     IP:          11010000.10101000.00000000.00000001
     子网掩码:    11111111.11111111.11111111.00000000
     AND运算
     网络号:      11000000.10101000.00000000.00000000
     转换为十进制:192.168.0.0

再把B的IP地址和子网掩码每位相与:

     IP:          11010000.10101000.00000000.11111110
     子网掩码:    11111111.11111111.11111111.00000000
     AND运算
     网络号:      11000000.10101000.00000000.00000000
     转换为十进制:192.168.0.0

可以看到,A和B的两台主机的网络号是相同的,因此可以认为它们处于同一网络。

由于IP地址越来越不够用,为了不浪费,人们对每类网络进一步划分出子网,为此IP地址的编址又有了三级编址的方法,即子网内的某个主机IP地址={<网络号>,<子网号>,<主机号>},该方法中有了子网掩码的概念。后来又提出了超网、无分类编址和IPv6。限于篇幅,这里不再赘述。

1.4.2 ARP协议

网络上的IP数据报到达最终目的网络后,必须通过MAC地址来找到最终目的主机,而数据报中只有IP地址,为此需要把IP地址转为MAC地址,这个工作就由ARP协议来完成。ARP协议是网络层中的协议,用于将IP地址解析为MAC地址。通常,ARP协议只适用于局域网中。ARP协议的工作过程如下:

(1)本地主机在局域网中广播ARP请求,ARP请求数据帧中包含目的主机的IP地址。这一步所表达的意思就是“如果你是这个IP地址的拥有者,请回答你的硬件地址。”

(2)目的主机收到这个广播报文后,用ARP协议解析这份报文,识别出是询问其硬件地址,于是发送ARP应答报,里面包含IP地址及其对应的硬件地址。

(3)本地主机收到ARP应答后,知道了目的地址的硬件地址,之后的数据报就可以传送了。同时,会把目的主机的IP地址和MAC地址保存在本机的ARP表中,以后通信直接查找此表即可。

在Windows操作系统的命令行下可以使用arp –a命令来查询本机ARP缓存列表,如图1-11所示。另外,可以使用arp -d命令清除ARP缓存表。

图1-11

ARP协议通过发送和接收ARP报文来获取物理地址,ARP报文的格式如图1-12所示。

图1-12

结构ether_header定义了以太网帧首部;结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答;结构ether_arp除了包含结构arphdr外,还包含源主机和目的主机的地址。如果这个报文格式用C语言表述,代码如下:

     //定义常量
     #define EPT_IP   0x0800   /* type: IP */
     #define EPT_ARP   0x0806  /* type: ARP */
     #define EPT_RARP 0x8035            /* type: RARP */
     #define ARP_HARDWARE 0x0001   /* Dummy type for 802.3 frames */
     #define ARP_REQUEST 0x0001   /* ARP request */
     #define ARP_REPLY 0x0002           /* ARP reply */
     //定义以太网首部
     typedef struct ehhdr
     {
     unsigned char eh_dst[6];           /* destination ethernet addrress */
     unsigned char eh_src[6];           /* source ethernet addresss */
     unsigned short eh_type;            /* ethernet pachet type */
     }EHHDR, *PEHHDR;
     //定义以太网arp字段
     typedef struct arphdr
     {
     //arp首部
     unsigned short arp_hrd;            /* format of hardware address */
     unsigned short arp_pro;            /* format of protocol address */
     unsigned char arp_hln;             /* length of hardware address */
     unsigned char arp_pln;             /* length of protocol address */
     unsigned short arp_op;             /* ARP/RARP operation */
    
     unsigned char arp_sha[6];          /* sender hardware address */
     unsigned long arp_spa;             /* sender protocol address */
     unsigned char arp_tha[6];          /* target hardware address */
     unsigned long arp_tpa;             /* target protocol address */
     }ARPHDR, *PARPHDR;

定义整个ARP报文,总长度42字节,代码如下:

     typedef struct arpPacket
     {
     EHHDR ehhdr;
     ARPHDR arphdr;
     } ARPPACKET, *PARPPACKET;

1.4.3 RARP协议

RARP协议允许局域网的物理机器从网关服务器的ARP表或者缓存上请求其IP地址。比如局域网中有一台主机只知道自己的物理地址而不知道自己的IP地址,那么可以通过RARP协议发出请求自身IP地址的广播,然后由RARP服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。RARP允许局域网的物理机器从网管服务器ARP表或者缓存上请求其IP地址。

RARP协议的工作过程如下:

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

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

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

(4)如果不存在,RARP服务器对此不做任何的响应。

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

RARP的帧格式同ARP协议,只是帧类型字段和操作类型不同。

1.4.4 ICMP协议

ICMP协议是网络层的一个协议,用于探测网络是否连通、主机是否可达、路由是否可用等。简单来说,它是用来查询诊断网络的。

虽然和IP协议同处网络层,但ICMP报文却是作为IP数据报的数据,然后加上IP报头后再发送出去的,如图1-13所示。

图1-13

IP首部的长度为20字节。ICMP报文作为IP数据报的数据部分,当IP首部的协议字段取值1时其数据部分是ICMP报文。ICMP报文格式如图1-14所示。

图1-14

其中,最上面的(0、8、16、31)指的是比特位,所以前3个字段(类型、代码、校验和)一共占了32个比特(类型占8位,代码占8位,检验和占16位),即4字节。所有ICMP报文前4字节的格式都是一样的,即任何ICMP报文都含有类型、代码和校验和这3个字段,8位类型和8位代码字段一起决定了ICMP报文的种类。紧接着后面4字节取决于ICMP报文种类。前面8字节就是ICMP报文的首部,后面的ICMP数据部分的内容和长度也取决于ICMP报文种类。16位的检验和字段是对包括选项数据在内的整个ICMP数据报文的检验和,其计算方法和IP头部检验和的计算方法一样。

ICMP报文可分为2大类别:差错报告报文和查询报文。每一条(或称每一种)ICMP报文要么属于差错报告报文,要么属于查询报文,如图1-15所示。

图1-15

1.ICMP差错报告报文

我们从图1-15中可以发现属于差错报告报文的ICMP报文很多,为了归纳方便,根据其类型的不同,可以将这些差错报告报文分为5种类型:目的不可达(类型为3)、源端被关闭(类型为4)、重定向(类型为5)、超时(类型为11)和参数问题(类型为12)。

代码字段不同的取值进一步表明了该类型ICMP报文的具体情况,比如类型为3的ICMP报文都是表明目的不可达,但目的不可达的原因可用代码字段进一步说明,比如代码为0表示网络不可达、代码为1表示主机不可达等。

ICMP协议规定,ICMP差错报文必须包括产生该差错报文的源数据报的IP首部,还必须包括跟在该IP(源IP)首部后面的前8个字节,这样ICMP差错报文的IP数据报长度=本IP首部(20字节)+本ICMP首部(8字节)+源IP首部(20字节)+源IP数据报的IP首部后的8个字节=56字节。ICMP差错报文如图1-16所示。

图1-16

如图1-17所示为一个具体的UDP端口不可达的差错报文。

图1-17

从图1-17中可看到,IP数据报的长度是56字节。为了让读者更清晰地了解这五大类差错报告报文格式,我们用图形来表示每一类报文。

(1)ICMP目的不可达报文

目的不可达也称终点不可达,可分为网络不可达、主机不可达、协议不可达、端口不可达、需要分片但DF比特已置为1,以及源站选路失败等16种报文,其代码字段分别置为0至15。当出现以上16种情况时就向源站发送目的不可达报文。该类报文格式如图1-18所示。

(2)ICMP源端被关闭报文

也称源站抑制,当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。该类报文格式如图1-19所示。

(3)ICMP重定向报文

当IP数据报应该被发送到另一个路由器时,收到该数据报的当前路由器就要发送ICMP重定向差错报文给IP数据报的发送端。重定向一般用来让具有很少选路信息的主机逐渐建立更完善的路由表。ICMP重定向报文只能有路由器产生。该类报文格式如图1-20所示。

图1-18

图1-19

图1-20

(4)ICMP超时报文

当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送超时报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超时报文。该类报文格式如图1-21所示。

图1-21

(5)ICMP参数问题

当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。该类报文格式如图1-22所示。

图1-22

2.ICMP查询报文

根据功能的不同,ICMP查询报文可以分为4大类:请求回显(Echo)或应答、请求时间戳(Timestamp)或应答、请求地址掩码(Address Mask)或应答、请求路由器或通告。种类由类型和代码字段决定,其类型和代码,如表1-3所示。

表1-3 ICMP查询报文的种类

关于回显请求和应答,Echo的中文翻译为回声,有的文献用回送或回显,本书用回显。请求回显的含义就好比请求对方回复一个应答。Linux或Windows下有个ping命令,值得注意的是,Linux下ping命令产生的ICMP报文大小是64字节(56+8=64,56是ICMP报文数据部分长度,8是ICMP报头部分长度),而Windows(如XP)下ping命令产生的ICMP报文大小是40字节(32+8=40)。该命令就是本机向一个目的主机发送一个请求回显(类型Type=8)的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回一个回显应答的ICMP报文(类型Type=0),表明这台主机存在。

为了让读者更清晰地了解这四类查询报文格式,用图表示每一类报文,如图1-23~图1-27所示。

(1)ICMP请求回显和应答报文格式

图1-23

(2)ICMP时间戳请求和应答报文格式

图1-24

(3)ICMP地址掩码请求和应答报文格式

图1-25

(4)ICMP路由器请求报文和通告报文格式

图1-26

图1-27

例1.1 】 抓包查看来自Windows的ping包。

(1)启动VMware下的虚拟机XP,设置网络连接方式为NAT,则虚拟机XP会连接到虚拟交换机VMnet8上。

(2)在Windows 7安装并打开抓包软件Wireshark,选择要捕获网络数据报的网卡是VMware Virtual Ethernet Adapter for VMnet8,如图1-28所示。

图1-28

双击图1-28中选中的网卡,就开始在该网卡上捕获数据。此时在虚拟机XP(192.168.80.129)下ping宿主机(192.168.80.1),可以在Wireshark下看到捕获到的ping包,如图1-29所示为回显请求,可以看到ICMP报文的数据部分是32字节,如果加上ICMP报头(8字节),则为40字节。

图1-29

如图1-30所示为回显应答,ICMP报文的数据部分长度依然是32字节。

图1-30

例1.2 】 抓包查看来自Linux的ping包。

(1)启动VMware下的虚拟机Linux,设置网络连接方式为NAT,则虚拟机Linux会连接到虚拟交换机VMnet8上。

(2)在Windows 7安装并打开抓包软件Wireshark,选择要捕获网络数据报的网卡是VMware Virtual Ethernet Adapter for VMnet8,图片可以参考例1.1。

在虚拟机Linux(192.168.80.128)下ping宿主机(192.168.80.1),可以在Wireshark下看到捕获到的ping包,如图1-31所示为回显请求,可以看到ICMP报文的数据部分是56字节,如果加上ICMP报头(8字节),则为64字节。

图1-31

如图1-32所示为回显应答,ICMP报文的数据部分长度依然是56字节。

图1-32 3ceiJwrCCJGCeEKLWYBnk6mSjKB9GSOsbOgOmdbLzITLIrKOlrWIJREzERsV1MNJ

点击中间区域
呼出菜单
上一章
目录
下一章
×