TCP/IP协议学习之实例ping命令学习笔记
TCP/IP协议学习之实例ping命令学习笔记(一)
一. 目的
为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详细过程的深入研究。包括的知识点有:ping,ICMP,IP,协议系统,ARP.包含的章节有第1,3,4,6,7章。
二. 实践环境
1. 网络环境
2. 协议分析工具
Ethereal工具。在本机上安装并进行抓包观察。
三. 工具设置
由于Ethereal工具在进行网络监视时,会抓取来自其他机器的数据包,为了清楚的看到本机和远程机之间的数据包交流,需要设置下ethereal。过程如下:
1. 选择正确的网卡接口,下面的IP address出现正确的IP地址即可。如下图:
注:每次打开该软件后,都需要再一次设置网卡接口。
2. 设置好捕捉过滤器(Capture Fileter),只捕捉我们想要的数据包,需要观察IP地址远程机和本机之间的数据交流,并保存好过滤条件,如下图:
四. 抓包
1. 设置好Captrue Fileter后,点击开始录制按钮。
2. 进入本机的DOS环境下,执行命令:ping 10.13.0.5。
3. 等到ping命令结束时,点击Ethereal的停止抓包按钮。
4. ping命令的显示结果和Ethereal上捕捉数据分别如下面的图所示。
说明:为了能抓到ARP协议的包,在本机DOS中先运行arp –d 清除arp缓存。
五.过程分析
1. 理解TCP/IP协议层结构
这里省略,参考另一篇学习日志:看图熟记TCP/IP协议系统
2. 过程
分析一下上述例子中数据的传输步骤:
1)ARP协议层,查找远程机的MAC地址。
2)ICMP协议层,执行ping命令过程
参考资料:http://www.cnpaf.net/forum/archiver/tid-3060.html
http://blog.csdn.net/lichengiggs/archive/2006/04/19/669444.aspx
http://network.ccidnet.com/art/1084/20070615/1113987_1.html
http://publish.it168.com/2005/0831/20050831015601.shtml
http://www.cnpaf.net/class/OtherAnalysis/0532918532942694.html
前文请看:TCP/IP协议学习之实例ping命令学习笔记(一)
六.实例分析+学习过程
1.ARP协议的学习
《TCP/IP协议详解》中包含的章节有第1,2,4章。
学习方法:从上面实例的观察中提出问题(Q),先在TCP/IP协议详解书中寻找答案,如果答案还不够详细,再从网上寻找答案。得到答案后,简短的写出答案(A)。在寻找答案中,可以对不懂的地方再次提出问题(Q),然后一样的过程寻找答案(A),如此反复进行。网上查找到的资料将会在问答(QA)的后面被记录下链接地址。书上查找到的资料位置不记录。
Q:什么是ARP协议?
A:ARP(Address Resolution Protocol)是指地址解析协议,为IP地址到对应的硬件地址之间提供动态映射,将网络中的协议地址(当前网络中大多是IP地址)解析为本地的硬件地址(MAC地址)
Q:IP地址是什么?MAC地址又是什么?
A:IP地址:也可以称为互联网地址或Internet地址。是用来唯一标识互联网上计算机的逻辑地址。每台连网计算机都依靠IP地址来标识自己。
MAC(Media Access Control, 介质访问控制)地址是识别LAN(局域网)节点的标识。网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM(一种闪存芯片,通常可以通过程序擦写),在网络底层的物理传输过程中,是通过物理地址来识别主机的,它一般也是全球唯一的。
参考资料:http://wlzx.ncu.edu.cn/yhfw/jczs/ip2.htm
http://baike.baidu.com/view/69334.htm
Q:如何查看本机和远程机的网卡的MAC地址是多少?
A:在windows下,在DOS下运行命令:ipconfig \all.即可看到网络连接详细信息。如下图所示,本机的MAC地址是00-19-D1-22-8F-9A
而在HP-UX系统下,以太网的地址被典型的称为lan0。通过键入lanscan并查看返回信息就可以得到MAC地址。如下所示:
#lanscan
Hardware Station Crd Hdw Net-Interface NM MAC HP-DLPI DLPI
Path Address In# State NamePPA ID Type Support Mjr#
0/0/0/0 0x00306E08CE8A 0 UP lan0 snap0 1 ETHER Yes 119
HP系统中,默认是去掉了MAC地址各个字段的分割符“:”。在上面的例子中,这台机器的实际MAC地址应该为:00:30:6E:08:CE:8A。
再和上个实例中捕捉到的MAC地址相比较,将会发现是一致的。如下图:
参考资料:http://www.itpub.net/118118.html
Q:10.13.0.5属于哪类IP地址?为什么和上家公司使用内网IP地址(192.168.0.5)不一样?
A:现在的IP网络使用32位地址,以点分十进制表示。IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。
IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。其中一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。
在IP地址A类和C类型里,各保留了1个区域作为私有地址,其地址范围如下:
A类地址:10.0.0.0~10.255.255.255
C类地址:192.168.0.0~192.168.255.255
所以,10.13.0.5属于A类地址,192.168.0.5属于C类地址。2类私有地址都可以被使用,所以并无本质区别。
参考资料:http://www.99net.net/study/know/52810535.htm
Q:在IP地址类型中,什么是私有地址?
A:私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
所以公司内部使用的内网地址,可以随便分配,但必须是同一类IP地址。
参考资料:http://www.ikaka.com/ip/label.htm
Q:ARP协议属于哪一层?为什么实例中协议工具抓的数据包没有IP协议数据包?
A:属于链路层,而IP协议数据包属于网络层,而网络层在链路层的上面,自然没有IP数据包的产生,而ICMP协议属于网络层,所以有IP数据包。
Q:链路层是什么?有什么作用?
A:链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
在T C P / I P协议族中,链路层主要有三个目的:(1)为I P模块发送和接收I P数据报;(2)为A R P模块发送A R P请求和接收A R P应答;(3)为R A R P发送R A R P请求和接收R A R P应答。
由此可见,该实例中用到了链路层的第二个目的。
Q:为什么在Ping命令过程中需要ARP请求过程,也就是说为什么需要知道远程机的MAC地址?
A:P i n g程序的目的是为了测试另一台主机是否可达。该程序发送一份I C M P回显请求报文给主机,并等待返回I C M P回显应答。在发送过程中,本机把以太网数据帧(包含了ICMP请求)发送到位于同一局域网上的远程机时,是根据48 bit的MAC地址来确定目的接口的,设备驱动程序(网卡的)从不检查I P数据报中的目的I P地址。当使用ping 10.13.0.5命令时,告诉本机系统的只是IP地址,本机系统并不知道对方的MAC地址是多少,内核(如以太网驱动程序)必须知道目的端的MAC地址才能发送数据。所以需要ARP请求得到远程机的MAC地址,才能开始发送ICMP。
Q:ARP请求过程,是如何得到目的主机的MAC地址的?是向网关询问吗?
A:A R P发送一份称作A R P请求的以太网数据帧给以太网上的每个主机。这个过程称作广播。A R P请求数据帧中包含目的主机的I P地址,其意思是“如果你是这个I P地址的拥有者,请回答你的硬件地址。”目的主机的A R P层收到这份广播报文后,识别出这是发送端在寻问它的I P地址,于是发送一个A R P应答。这个A R P应答包含I P地址及对应的硬件地址。
由此看出,是远程机响应了请求,并将自己的MAC地址应答回本机。
前文请看:TCP/IP协议学习之实例ping命令学习笔记(二)
Q:广播是什么原理?广播地址又是什么?这次的实例中,广播地址是多少?
A:一个主机要向网上的所有其他主机发送帧,这就是广播。
主机对由信道传送过来帧的过滤过程:网卡查看由信道传送过来的帧,确定是否接收该帧,若接收后就将它传往设备驱动程序。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。
一共有四种I P广播地址
1.受限的广播:受限的广播地址是255.255.255.255。
2.指向网络的广播:地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。
3.指向子网的广播:主机号为全1且有特定子网号的地址。作为子网直接广播地址的I P地址需要了解子网的掩码。
4.指向所有子网的广播:也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。
在本实例中,只能看出广播地址的MAC地址是ff:ff:ff:ff:ff:ff,而无法看出IP地址属于哪一种广播地址。待解决。如下图
参考资料:http://www.cnpaf.net/Class/TCPANDIP/0532918532733861.html
Q:ARP请求和应答包的格式什么?包含哪些内容?
A:书中关于ARP格式的如下图所示:
其中:帧类型表示后面数据的类型。硬件类型表示硬件地址的类型。协议类型表示要映射的协议地址类型。硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。op是操作字段,指出四种操作类型:A R P请求(值为1)、A R P应答(值为2)、R A R P请求(值为3)和R A R P应答(值为4)。其他字段很好理解。
从Ethereal工具中分别截取ARP请求和应答包内容,如下图:
和ARP格式图示相比较:
以太网首部:以太网目的地址是广播地址(全1),以太网源地址是本机的MAC地址,帧类型是ARP的标志值0x0806。
28字节ARP请求/应答:硬件类型是以太网标志值0001,协议类型是I P地址标志值0800,硬件地址长度是6,协议地址长度是4,操作字段是ARP请求标志值0001,发送端以太网地址是本机的MAC地址,发送段IP地址是本机的IP地址(176),目标以太网地址还没有获取到,所以为全0,目标IP地址是远程机的IP地址(5)。
和ARP格式图示相比较:
以太网首部:以太网目的地址是本机的MAC地址,以太网源地址是远程机的MAC地址,帧类型是ARP的标志值0x0806。Trailer是什么?待解决。
28字节ARP请求/应答:硬件类型是以太网标志值0001,协议类型是I P地址标志值0800,硬件地址长度是6,协议地址长度是4,操作字段是ARP应答标志值0002(与ARP请求区别开来),发送端以太网地址是远程机的MAC地址,发送端IP地址是远程机的IP地址(5),目标以太网地址是本机的MAC地址,目标IP地址是本机的IP地址(176)。
由此看来,ARP请求和应答包非常相似,标志性的区别在操作字段的不同。
Q:为什么需要在本机DOS中先运行arp –d 清除arp缓存,才能抓到ARP协议包?
A: A R P高效运行的关键是由于每个主机上都有一个A R P高速缓存。这个高速缓存存放了最近I n t e r n e t地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为2 0分钟,起始时间从被创建时开始算起。可以用a r p命令来检查ARP高速缓存。参数-a的意思是显示高速缓存中所有的内容,如下图所示:其中包括了远程机(5)的MAC映射记录。
一般情况下,当系统收到A R P请求或发送A R P应答时,都要把请求端的硬件地址和I P地址存入A R P高速缓存。在获取目标机的MAC地址时,会先从ARP高速缓冲中查找是否存在,如果存在,则可以不用进行ARP请求过程。为了确保可以抓到ARP的请求数据包,因此,先用命令arp –d清除掉本地的MAC地址映射。
前文请看:TCP/IP协议学习之实例ping命令学习笔记(三)
2.ICMP协议的学习
《TCP/IP协议详解》中包含的章节有第6、7章。
学习方法:从上面实例的观察中提出问题(Q),先在TCP/IP协议详解书中寻找答案,如果答案还不够详细,再从网上寻找答案。得到答案后,简短的写出答案(A)。在寻找答案中,可以对不懂的地方再次提出问题(Q),然后一样的过程寻找答案(A),如此反复进行。网上查找到的资料将会在问答(QA)的后面被记录下链接地址。书上查找到的资料位置不记录。
Q:什么是ICMP协议?属于哪一层?
A:ICMP(Internet Control Message Protocal)是指Internet控制报文协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的状态信息。
I C M P经常被认为是IP层(也就是指网络层)的一个组成部分。ICMP报文通常被I P层或更高层协议(TCP或UDP)使用(在本实例中是在IP层使用)。一些ICMP报文把差错报文返回给用户进程(在本实例中的用户进程是指ping进程)。ICMP报文是在IP数据报内部被传输的。如下图所示:
和Ethereal中捕捉到的ICMP数据进行比较,其中包含了IP首部和ICMP报文,如下图所示:
Q:ICMP报文的格式是什么?
A:如下图所示:
所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。类型字段可以有1 5个不同的值,以描述特定类型的I C M P报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。检验和字段覆盖整个ICMP报文。
Q:ICMP报文有哪些类型?ping所使用的是其中哪种?
A:共有18种类型字段,每种类型字段对应多个代码字段,所以,不同ICMP类型由报文中的类型字段和代码字段来共同决定。每种ICMP类型属于2种报文性质中的其中一种:查询报文和差错报文,具体见TCP/IP协议详解中的图6-3。
Ping请求和应答的ICMP报文类型是不同的:
Ping请求所使用的类型字段=8,代码字段=0,对应的类型名为请求回显,属于查询报文。
Ping应答所使用的类型字段=0,代码字段=0,对应的类型名为回显应答,属于查询报文。
Q:ping命令的请求ICMP报文格式是什么?应答ICMP报文格式又是什么?
A:ping命令的ICMP请求和应答报文格式如下图所示:
类型、代码、检验和在前面的问答已经得到解释。
标识符:U n i x系统在实现p i n g程序时是把I C M P报文中的标识符字段置成发送进程的I D号。这样即使在同一台主机上同时运行了多个p i n g程序实例, p i n g程序也可以识别出返回的信息。(那windows系统下呢?是否也是进程ID号?待解决)
序号:序列号从0开始,每发送一次新的回显请求就加1(在本实例中,共发送了4次请求,但是序列号分别是3200、3300、3400、3500,和书中所说的不一致?在ping参数中并没有设置序列号这种功能的选项,所以第一个序列号可能是随机产生的,待解决)。p i n g程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。
选项数据:客户发送的选项数据必须回显,假设客户对这些信息都会感兴趣。也就说,应答和请求的选项数据是一样的。(那么选项数据是如何被定制的?在ping参数中同样没有设置选项数据这种功能的选项,所以可能是DOS下默认发送的数据,待解决。)
Ethereal工具捕捉到的ICMP第一次的请求报文数据,如下图所示:
和上面所说的ICMP请求报文相比较:
类型=8,代码=0,检验和=175c,标识符=0400,序列号=3200,
选项数据=abcdefghijklmnopqrstuvwabcdefghi(第二个图的蓝色背景部分).
观察后面的3次请求,它们的标识符都是0400,序列号是递增的,选项数据都是一样的。
Ethereal工具捕捉到的ICMP第一次的应答报文数据,如下图所示:
和上面所说的ICMP应答报文相比较:
类型=0,代码=0,检验和=1f5c,标识符=0400,序列号=3200,
选项数据=abcdefghijklmnopqrstuvwabcdefghi(第二个图的蓝色背景部分)
和对应的第一次请求报文比较,除了类型字段和检验和字段不一样,其他字段都相同。
前文请看:TCP/IP协议学习之实例ping命令学习笔记(四)
Q:IP首部的报文格式是什么?
A:IP数据报文如下图所示:
其中的数据字段就是ICMP数据报文。前20个字节是IP首部。和前面所提到过的IP数据报文是一致的。
版本:目前的协议版本号是4,因此I P有时也称作IPv4。
首部长度:指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为6 0个字节。普通I P数据报(没有任何选择项)字段的值是5(从图中可看出首部一共5行)。
服务类型(TOS):包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TO S子字段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。在书中的图3 - 2列出了对不同应用建议的TO S值,具体可以查阅,在本实例中,ICMP查询对应的TOS值是0000,属于一般服务。
总长度(字节数):指整个I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道I P数据报中数据内容的起始位置和长度。
标识:唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。(该字段和数据报的分片有关,这里暂时不展开)
标志:(同样,和数据报的分片有关,这里暂时不介绍)
片偏移:(同样,和数据报的分片有关,这里暂时不介绍)
生存时间(TTL):设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。T T L的初始值由源主机设置(通常为3 2或6 4),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送I C M P报文通知源主机。
协议:被I P层用来对数据报进行分用,根据这个字段可以识别是哪个协议向I P传送数据。本实例中,是ICMP协议。
首部检验和:是根据I P首部计算的检验和码。它不对首部后面的数据进行计算。也就是说,在本实例中,不包含ICMP报文的检验,因为ICMP报文有自己的检验和字段。
源IP地址:本机或远程机的IP地址。
目的IP地址:本机或远程机的IP地址。
选项(如果有):是数据报中的一个可变长的可选信息。这些选项很少被使用,并非所有的主机和路由器都支持这些选项。在本实例中,IP数据报文是没有该字段的。
在Ethereal中捕捉的第一个ICMP请求的IP数据报首部如下图所示:
和上面所说的IP首部进行比较:
版本=4,首部长度=20(这里的单位是字节,和书中说的单位是32bit不一致,5个32bit是等于20个字节,但为什么不一样?待解决),服务类型=00,总长度=60,标识=3b7c(和后面的来回7个首部比较该字段,每个都不相同),标志=00,片偏移=0,TTL=128(应该是默认值,后面3个请求的该字段都是128,但应答包的该字段不一样,是255),协议=ICMP(01),首部检验和=ea76,源IP地址=10.13.0.5(本机IP),目的IP地址=10.13.0.5(远程机IP),无选项。
在Ethereal中捕捉的第一个ICMP应答的IP数据报首部如下图所示:
和上面所说的IP首部进行比较:
版本=4,首部长度=20,服务类型=00,总长度=60,标识=6105,标志=04(注意,和请求的IP数据报中的不一样),片偏移=0,TTL=255,协议=ICMP(01),首部检验和=05ed,源IP地址=10.13.0.5(远程IP),目的IP地址=10.13.0.176(本机IP),无选项。
本实例中,请求和应答的IP数据报基本相似,在IP首部并不区别是ICMP请求还是ICMP应答。
Q:什么是数据报分用?
A:当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demult iplexing),书中的图1-8显示了该过程是如何发生的。具体请查阅该章内容。在我另一篇学习日志中也有这张图片。
前文请看:TCP/IP协议学习之实例ping命令学习笔记(五)
Q:除了ping命令使用外,什么情况下会使用到ICMP协议?
A:从书中的图6-3 ICMP报文类型中,可以看出相关的章节有:
第六章的3、4、5节:ICMP地址掩码请求与应答;ICMP时间戳请求与应答;ICMP瑞口不可达差错
第七章:Ping程序
第八章:Traceroute程序
第九章的3、5、6节:IP选路。ICMP主机与网络不可达差错;ICMP重定向差错;ICMP路由器发现报文
第十一章的5、6、11节:UDP。IP分片;ICMP不可达差错(需要分片);ICMP源站抑制差错。
Q: 在本机DOS下显示的ping的输出结果都表示什么意思?
A: 如下图所示:
1. 每次发送32字节的数据,和Ethereal工具捕捉到的ICMP数据报中的data字段大小一致,都是32字节
2. 只显示ICMP返回的4次应答,并且打印出每次应答的data大小(都是32)和T T L(都是255,和Ethereal捕捉到的ICMP应答的IP首部TTL字段值一样),并计算往返时间time(都小于1ms).
3. 共发送了4个ICMP请求,收到4个ICMP应答,无数据报丢失
4. ping程序通过在I C M P报文数据中存放发送请求的时间值(ICMP数据报格式中并没有这个时间值字段,怎么回事?)来计算往返时间。当应答返回时,用当前时间减去存放在I C M P报文中的时间值,即是往返时间。在本实例中, 平均往返时间最小/最大/平均时间都近似等于0ms, 这是因为程序使用的计时器分辨率低的原因.
Q: 发送4次ICMP请求时,间隔多少时间一次?
A: ping命令默认是每间隔1秒发送一次请求.在Ethereal中可以看出这个时间间隔是1秒左右,如下图所示的第二列:
第一次是0.000186秒钟,第二次是0.992374秒钟,第三次是1.992331秒钟,间隔约为1秒.
本学习记录已完结。