本节书摘来异步社区《非常网管:网络管理从入门到精通(修订版)》一书中的第1章,第1.4节,作者: 崔北亮 , 陈家迁,更多章节内容可以访问云栖社区“异步社区”公众号查看。
非常网管:网络管理从入门到精通(修订版)
tcp/ ip是目前最成功、使用最频繁的互连协议。虽然现在已有许多协议都适用于互联网,但只有tcp/ip最突出,因为它在网络互连中用得最为广泛。
tcp/ip参考模型是4层结构,下面结合sniffer软件来介绍tcp/ip模型的4层结构。
实验1-5 使用sniffer软件监控网络
(1)实时监控网络。
step1 启动sniffer后,单击sniffer中的“matrix”(矩阵)图标,如图1-4-1中箭头所指。
这里显示网卡接收到的数据包,默认是以mac地址的形式显示,如图1-4-2所示。
step2 数据包以mac地址形式显示时,感觉不是很直观。单击如图1-4-2所示的“ip”选项卡(如箭头所指),将会以ip的形式显示网卡收到的数据包,从这里可以直观地看出每个ip发送数据包的情况,如图1-4-3所示。
注 意 如果连接到一个新的网络环境,在查询该网络使用的ip地址段时,那么可以使用该功能。如图1-4-3所示,捕获的包中可以显示该网段使用的ip地址,至于子网掩码,一般局域网中使用的都是255.255.255.0,网关一般都是1或254,dns可以随便配置。
step3 单击如图1-4-3所示的“detail”图标(如箭头所指),查看报文的详细情况。如图1-4-4所示,单击标题栏(箭头所指的那一行)中的“protocol”、“host 1”、“packets”、“bytes”、“bytes”、“packets”、“host 2”等,可以分别实现以该列进行升序/降序排列。
如果局域网是通过交换机互连的,要捕获局域网中所有与外部通信的包,则可以配置端口镜像,把上连端口的包镜像到连接sniffer主机的交换机端口,详见第4部分的实验e交换端口分析。
(2)捕获数据包。
step1 在sniffer中单击“start”按钮,启动数据包捕获,如图1-4-5所示。
step3 在图1-4-5中,“stop and display”按钮变亮,表示已经捕获到数据包了。单击此按钮停止捕获并显示数据包,如图1-4-6所示。
单击图1-4-6中的“decode”选项卡,显示捕获包的详细情况,如图1-4-7所示。
step4 最初的两个数据是dns的包,第一个包是客户机192.168.1.200去往dns服务器218.2.135.1的dns查询包,客户机需要从dns服务器获知“www.njut.edu.cn”所对应的ip地址,才能继续后面的访问。第二个包是dns服务器返回给客户机的dns应答包,其中“stat=ok”说明域名解析已经成功。接下来就是“www.njut.edu.cn”这台服务器与客户机之间的直接对话了。
(3)过滤数据包。
在如图1-4-7所示的窗口中,经常会捕获到很多数据包,但大多数都是无关的数据包,需要采用过滤技术才能过滤出有用的数据包。过滤数据包分为两个步骤:定义过滤条件和应用过滤条件。这里以过滤arp包为例进行讲解。
step1 定义过滤条件。如图1-4-7所示的数据包捕获窗口中,单击右键,在快捷菜单中选择“define filter”命令,如图1-4-8所示。
打开如图1-4-9所示的“define filter – display”对话框,选中“arp”复选框,单击“确定”按钮,完成过滤条件设置。
step2 应用过滤条件。在如图1-4-8所示的快捷菜单中选择“select filter”,打开如图1-4-10所示的对话框,选择“display”下的“default”,右边显示该项是针对arp进行过滤的。单击如图1-4-10所示的“确定”按钮,进行过滤。
过滤后的窗口如图1-4-11所示,可以看到过滤后,只有arp的包被显示。与此类似,还可以基于mac地址、ip地址、udp、tcp、http等进行过滤。
如图1-4-7所示,任选一条http的信息,可以看到第二个子窗口中显示此http信息由4个层组成。接下来详细介绍tcp/ip模型的4层。
(1)网络访问层。如图1-4-7所示的“dlc:”层,包含了数据链路层的地址,如用在以太网上就是mac地址。展开此层,可以看到数据包的源mac、目的mac地址。此层是tcp / ip模型的最低层,负责接收从ip层传来的ip数据报,并将ip数据报通过低层物理网络发送出去,或者从低层物理网络上接收物理帧,解封装出ip数据报,交给ip层处理。需要注意,当一台主机访问外网的某台服务器时,目的mac并不是目标服务器的mac地址,而是路由器局域网接口的mac地址。因为mac地址仅用于局域网内的寻址,假设目的mac就是目标服务器的mac,当路由器收到这样的报文,通过比较目的mac地址,发现不是发往本接口时,便把报文丢弃,这样数据报文也就无法通过路由器,更无法到达目标服务器了。因为目的mac地址是路由器接口的mac地址,路由器接收下这个报文并解封装后,交给上一层处理,路由器查询路由表,决定转发接口,把数据包交换到外出端口,再重新封装后发出去。如图1-4-7所示,验证目的mac地址。
(2)互联网层。如图1-4-7所示的“ip:”层,包含了网络层的地址,展开此层,可以看到数据包的源ip、目的ip地址。它的主要功能包括3个方面。第一,处理来自传输层的分组发送请求。将分组装入ip数据报,填充报头,选择去往目的节点的路径,然后将数据报发往适当的网络接口。第二,处理输入数据报。首先检查数据报的合法性,然后进行路由选择,假如该数据报已到达目的节点(本机),则去掉报头,将ip报文的数据部分交给相应的传输层协议;假如该数据报尚未到达目的节点,则转发该数据报。第三,处理icmp(internet control message protocol,网际控制信息协议)报文。即处理网络的路由选择、流量控制和拥塞控制等问题。tcp/ip网络模型的互联网层在功能上非常类似于osi参考模型中的网络层。
(3)传输层。如图1-4-7所示的“tcp:”层,包含了传输层的端口号,展开此层,可以看到数据包的源端口、目的端口。tcp/ip参考模型中传输层的作用与osi参考模型中传输层的作用是一样的,即在源节点和目的节点的两个进程实体之间提供可靠的端到端的数据传输。为保证数据传输的可靠性,传输层规定接收端必须发回确认,如果没有收到确认则假定分组丢失,再次发送,若干次重传后,仍然失败,则认为目标不可达,放弃重传。
tcp/ip模型提供了两个传输层协议:传输控制协议tcp和用户数据报协议udp。tcp是一个可靠的面向连接的传输层协议,它将某节点的数据以字节流形式无差错投递到互联网的另一台机器上。发送方的tcp将用户交来的字节流划分成独立的报文并交给互联网层进行发送,而接收方的tcp将接收的报文重新装配交给接收用户。tcp同时处理有关流量控制的问题,以防止快速的发送方淹没慢速的接收方。用户数据报协议udp是一个不可靠的、无连接的传输层协议,udp将可靠性问题交给应用程序解决。udp主要面向请求/应答式的交易型应用,一次交易往往只有一来一回两次报文交换,假如为此而建立连接和撤销连接,开销是相当大的。这种情况下使用udp就非常有效。另外,udp也应用于那些对可靠性要求不高,但要求网络的延迟较小的场合,如话音和视频数据的传送。
(4)应用层。如图1-4-7所示的“http”层,即应用层,应用层包括所有的高层协议。早期的应用层有远程登录协议、文件传输协议和简单邮件传输协议等。远程登录协议允许用户登录到远程系统并访问远程系统的资源,而且像远程机器的本地用户一样访问远程系统。文件传输协议提供在两台机器之间进行有效的数据传送的手段。简单邮件传输协议最初只是文件传输的一种类型,后来慢慢发展成为一种特定的应用协议。最近几年出现了一些新的应用层协议,如用于将网络中主机名字映射成网络地址的域名服务;用于传输网络新闻的网络新闻传输协议(nntp,network news transfer protocol)和用于从www网上读取页面信息的http。本书将在第2部分介绍有关dns、ftp、smtp、http等服务器的搭建。
在tcp/ip网络中,ip采用无连接的数据报机制,对数据进行“尽力而为的传递”,即只管将报文尽力传送到目的主机,无论传输正确与否,不做验证,不发确认,也不保证报文的顺序。tcp/ip的可靠性体现在传输层,传输层协议之一的tcp提供面向连接的服务(传输层的另一个协议udp是无连接的)。因为传输层是端到端的,所以tcp/ip的可靠性被称为端到端可靠性。
iso/osi参考模型是在其协议被开发之前设计出来的。这意味着iso/osi模型并不是基于某个特定的协议集而设计的,因而它更具有通用性。但另一方面,也意味着iso/osi模型在协议实现方面存在某些不足。而tcp/ip模型正好相反,先有协议,模型只是现有协议的描述,因而协议与模型非常吻合。问题在于tcp/ip模型不适合其他协议栈。因此,它在描述其他非tcp/ip网络时用处不大。下面介绍两种模型的具体差异。其中显而易见的差异是两种模型的层数不一样:iso/osi模型有7层,而tcp/ip模型只有4层。两者都有传输层和应用层,但其他层是不同的,两种模型之间的对应关系如图1-4-12所示。
ip地址是用来标识网络中的一个通信实体,如一台主机,或者是路由器的某一个端口。而在基于ip协议网络中传输的数据包,也都必须使用ip地址来进行标识,如同写一封信,要标明收信人的通信地址和发信人的地址,邮政工作人员通过该地址来决定邮件的去向。
在计算机网络里,每个被传输的数据包也要包括一个源ip地址和一个目的ip地址。当该数据包在网络中进行传输时,这两个地址要保持不变(有网络地址转换和代理的情况例外,本书第2部分及第4部分都会介绍网络地址转换的配置实例),以确保网络设备总能根据确定的ip地址,将数据包从源通信实体送往指定的目的通信实体,以及数据包从目的通信实体返回源通信实体。
目前,ip地址使用32位二进制地址格式,为方便记忆,通常使用以点号分隔的十进制数来表示,如202.119.248.65。一个ip地址主要由两部分组成:一部分是用于标识该地址所从属的网络号;另一部分用于指明该网络上某个特定主机的主机号。网络号由internet权力机构分配,主机地址由各个网络的管理员统一分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了ip地址的全球唯一性(其中保留给私网使用的地址段除外,私网使用的地址段有10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255)。
为了给不同规模的网络提供必要的灵活性,ip地址的设计者将ip地址空间划分为5个不同的地址类别,如表1-4-1所示,其中a、b、c三类最为常用,d类用于组播,e类用于科研。
规定a类中的0不允许使用,127作为测试tcp/ip的环回地址,也不可以使用,因此a类实际可用的地址是1~126。
如表1-4-1所示,a类地址的网络位是8位,在子网掩码的二进制格式中,前面的8位是“1”,子网掩码中“1”表示的是网络位,“0”表示的是主机位,所以a类地址的默认子网掩码是255.0.0.0。同理,b类地址的默认子网掩码中,“1”的位数是16位,换成十进制就是255.255.0.0;c类地址的默认子网掩码中,“1”的位数是24位,换成十进制就是255.255.255.0。
在讲述子网划分之前,先来看一个实例,如图1-4-13所示,4台计算机接在一个hub(集线器)上,ip和子网掩码配置如图中所示。图中的“/24”表示的是计算机ip地址的网络位有24位,主机位是8位(32−24=8),相当于子网掩码是255.255.255.0。哪些计算机之间可以通信?判断的依据是什么?如何才能让它们全部都可以互访?
结果是pc1和pc2为一组,pc3和pc4为一组,组内计算机之间可以通信,组间计算机之间不能通信。判断的依据是:同一子网的计算机可以直接通信,不同子网的计算机不可以直接通信,处在不同子网中的计算机间如需通信,需要通过一个三层设备(也就是有路由功能的设备)。
那么如何判断计算机是否在同一个子网呢?先把ip地址和子网掩码换算成二进制,然后进行“与”运算,也就是二进制的按位取小运算,得出一台计算机所在的网络号,如果两台计算机的网络号相同,则它们处在同一子网;如果网络号不同,则它们处在不同子网。把每台计算机的ip地址与子网掩码进行按位“与”运算,得出pc1的网络号192.168.1.0/24,pc2的网络号是192.168.1.0/24,pc3的网络号192.168.2.0/24,pc4的网络号192.168.2.0/24,pc1和pc2处在同一子网,pc3和pc4处在同一子网。如果192.168.1.0网络中的计算机需要访问192.168.2.0网络中的计算机,那么就需要通过一个三层设备,而hub处于osi七层模型中的第一层,即物理层,不具备路由功能,无法为不同子网中的计算机提供路由功能。
如何才能让4台计算机相互都可以通信呢?方法有很多种,这里简单列举3种。方法一,修改pc3、pc4的ip地址为192.168.1.3、192.168.1.4,这样4台计算机就处在同一子网中,相互之间可以直接通信;方法二,修改4台计算机的子网掩码为“/22”,即255.255.252.0,这样4台计算机就都处在192.168.0.0/22子网中了;方法三,把集线器换成三层交换机,并把接pc1、pc2的交换机端口划到一个vlan(虚拟局域网,在本书第3部分会更详细深入地介绍vlan的配置),并给此vlan分配ip地址192.168.1.254,把pc1和pc2的网关设成192.168.1.254,把连接pc3、pc4的交换机端口划到另一个不同的vlan,并给此vlan分配ip地址192.168.2.254,把pc3和pc4的网关设成192.168.2.254,这样4台计算机之间也可相互通信了。
需要注意,在做子网划分的时候,主机位全“0”、全“1”的ip地址都不可以使用,全“0”的是子网地址,全“1”的是子网广播地址,如192.168.1.0/24和192.168.1.255/24这两个ip地址就分别代表网络地址和广播地址,都不可以配置给计算机使用,192.168.1.0/24网络中可用的ip地址数是256−2=254个,即每个子网中可用的ip地址数量是:2主机位数−2。