VLSM(可变长子网掩码)
在CIDR以前,每个主类网络号只可以分配给一个组织使用,这个组织可以利用子网化技术使得一个主类网络划分为多个子网,但是所有子网必须是一致的掩码,也就是说只能分一次子网,即FLSM。
VLSM是FLAM的增强版,是“子网的子网化”,使得同一网络号可以有不同的子网掩码,而这也就决定了VLSM只能在无类网络环境中使用,当然这不是迫于无奈的选择,而是技术进步的必然。
但是VLSM只是提高了分配地址块的使用效率,却没能解决地址分配的低效,很多组织呗分配到了多个C类地址,而不是一个单独的B类地址。
CIDR(无类别域间路由)
CIDR应运而生,CIDR是以“位”为单位决定IP地址的网路位和主机位,不再受原来的八位组限制,那么从后向前归位,CIDR能够聚合汇总路由信息,从而缩小路由表大小,减小开销,这对BGP来讲是很Help的。
从前向后的借位,CIDR使得子网不再只有本地意义,分配更为灵活,比如,131.108.0.0/16可以分成131.108.0.0/18 ~ 131.108.192.0/18四块地址,独立的分配给四个组织,而不是传统的一个组织一个主类地址再子网化了。
路由表查找顺序
1.从IP数据包中提取目的IP地址。
2.先用直连网段去挨个匹配,即用每个直连路由条目的子网掩码和目的网络进行And运算,再与该条目的网络前缀进行匹配。
3.如果没有直连匹配的项,查看是否有目的地址的主机路由存在。
4.如果没有主机路由,则匹配路由表中的其他条目,逐条进行匹配。
5.如果依然没有匹配的项,就看是否有默认路由,有的话通过默认路由发出去,如果连默认路由都没有,丢弃该数据包,返回ICMP信息指明该目的网络不可达。
命令 ip classless 对路由表查找有影响,如果关闭了(默认是开启的),那么就不会用精确掩码去和目的地址去匹配(比如我写10.1.1.0 255.255.255.0),而是用这个该网络的主网络位去匹配,即255.0.0.0,这样只要有别的子网在,就不会通过默认路由转发数据。
另外一个命令 ip subnet-zero 在路由器中是默认启用的,以支持全0的子网,比如172.16.0.0/24,如果关闭的话,在给接口配置地址的时候像 ip address 172.16.0.1 255.255.255.0 这样就是非法的了。
超网 vs 聚合
关于“聚合”和“超网”,大家都说这两个是一个概念,我觉得还是有些区别的。
“聚合”的概念等同于路由汇总,目的是为了减小路由负载,汇总的网络不必连续,但网络前缀必须在数字上相似,确保用唯一的网络前缀向其它网络广播,且这些网络在地域上足够相近,从而能从同一个ISP连接到Internet,举例来讲,将192.168.64.0/24和192.168.65.0/24汇总成192.168.64.0/23通告出去。
“超网”的概念先于CIDR 15个月提出,概念是将数个相邻的网络地址合并成一个单独的更大的网络,目的在于省去在这些网络间路由的麻烦,规则是这些网络地址数字上必须相邻,且必须连在同一个接口上,如果不是的话,这些网络间的流量就会通过Router来路由,超网也就没有意义了,举例来讲,从192.24.0.0/24到192.31.255.0/24有2^11个C类网络,可以用192.24.0.0/13来表示。
简单来说,超网是将小网络合成大网络,针对网络本身,聚合是对现有网络形成的路由条目进行汇总,针对的是路由表。
PS 3: 还有个小技巧,比如192.168.1.129/27 和 192.168.1.65/27一看就不在同一网段,129-65=64,/27掩码每个子网主机数为2^(32-27) = 32, 64>32,所以肯定不在同一子网。
策略路由
策略路由的优先级高于路由表,即使路由表中没有相对应的路由条目,单纯在策略路由也能转发正常数据包。具体是用route-map来实现,步骤如下:
1)定义好对象 即在写route-map的时候需要match的东东,比较常见的是地址,用ACL来定义,注意标准ACL只能针对源来做策略,而扩展ACL可以针对源,目的网络或者具体的上层应用。
(config)# access-list 1 permit 1.1.1.0 0.0.0.255
(config)# access-list 101 permit tcp 1.1.5.0 0.0.0.255 any eq telnet
PS:在我们做实验验证时,可以通过ip telnet source-interface loop 0 来改变自己telnet时的源地址为Loopbak 0
2)写route-map,下面是一个具体例子,基本的组成元素就是match和set,即针对什么东东以及执行的动作是什么。
(config)# route-map to-r1 // 定义一个route-map,名字要可读性强
(config-route-map)# match ip add 1 // 这里的1就是指的access-list 1
(config-route-map)# match length 0 200 // 针对的源地址以及数据包大小,二者需同时匹配
(config-route-map)# set ip next-hop 23.1.1.3 //定义好要策略的具体动作,这里是改变下一跳
这里最后的一条set命令可以有两种选择:
set ip next-hop 23.1.1.3 (对端IP)
set default interface fa0/0 (本地出口)
不过这两条命令是有区别的,前者直接应用策略路由,而后者先检查路由表,如果没有明细路由对应再用策略路由。
需要注意的是,如果default interface为以太口,由于我们并未告知路由器下一跳的IP地址,路由器也就没有办法通过ARP解析出Mac,会出现封装失败的情况,不过在转发失败之后会进行ARP请求。
这样的命令可能会让我们联想到静态路由,不过区别在于静态路由如果指定以太口为本地出口,比如 ip route 0.0.0.0 0.0.0.0 fa0/0,通过show arp 可以看到这条命令在敲下去以后会添加相应的ARP表项,也就是会发起ARP请求。
3)应用在接口,这里没有in 和out 的概念,因为肯定是该接口收到这个数据包后进行匹配然后按策略路由转发。
(config-if)# ip policy route-map to-r1
在CIDR以前,每个主类网络号只可以分配给一个组织使用,这个组织可以利用子网化技术使得一个主类网络划分为多个子网,但是所有子网必须是一致的掩码,也就是说只能分一次子网,即FLSM。
VLSM是FLAM的增强版,是“子网的子网化”,使得同一网络号可以有不同的子网掩码,而这也就决定了VLSM只能在无类网络环境中使用,当然这不是迫于无奈的选择,而是技术进步的必然。
但是VLSM只是提高了分配地址块的使用效率,却没能解决地址分配的低效,很多组织呗分配到了多个C类地址,而不是一个单独的B类地址。
CIDR(无类别域间路由)
CIDR应运而生,CIDR是以“位”为单位决定IP地址的网路位和主机位,不再受原来的八位组限制,那么从后向前归位,CIDR能够聚合汇总路由信息,从而缩小路由表大小,减小开销,这对BGP来讲是很Help的。
从前向后的借位,CIDR使得子网不再只有本地意义,分配更为灵活,比如,131.108.0.0/16可以分成131.108.0.0/18 ~ 131.108.192.0/18四块地址,独立的分配给四个组织,而不是传统的一个组织一个主类地址再子网化了。
路由表查找顺序
1.从IP数据包中提取目的IP地址。
2.先用直连网段去挨个匹配,即用每个直连路由条目的子网掩码和目的网络进行And运算,再与该条目的网络前缀进行匹配。
3.如果没有直连匹配的项,查看是否有目的地址的主机路由存在。
4.如果没有主机路由,则匹配路由表中的其他条目,逐条进行匹配。
5.如果依然没有匹配的项,就看是否有默认路由,有的话通过默认路由发出去,如果连默认路由都没有,丢弃该数据包,返回ICMP信息指明该目的网络不可达。
命令 ip classless 对路由表查找有影响,如果关闭了(默认是开启的),那么就不会用精确掩码去和目的地址去匹配(比如我写10.1.1.0 255.255.255.0),而是用这个该网络的主网络位去匹配,即255.0.0.0,这样只要有别的子网在,就不会通过默认路由转发数据。
另外一个命令 ip subnet-zero 在路由器中是默认启用的,以支持全0的子网,比如172.16.0.0/24,如果关闭的话,在给接口配置地址的时候像 ip address 172.16.0.1 255.255.255.0 这样就是非法的了。
超网 vs 聚合
关于“聚合”和“超网”,大家都说这两个是一个概念,我觉得还是有些区别的。
“聚合”的概念等同于路由汇总,目的是为了减小路由负载,汇总的网络不必连续,但网络前缀必须在数字上相似,确保用唯一的网络前缀向其它网络广播,且这些网络在地域上足够相近,从而能从同一个ISP连接到Internet,举例来讲,将192.168.64.0/24和192.168.65.0/24汇总成192.168.64.0/23通告出去。
“超网”的概念先于CIDR 15个月提出,概念是将数个相邻的网络地址合并成一个单独的更大的网络,目的在于省去在这些网络间路由的麻烦,规则是这些网络地址数字上必须相邻,且必须连在同一个接口上,如果不是的话,这些网络间的流量就会通过Router来路由,超网也就没有意义了,举例来讲,从192.24.0.0/24到192.31.255.0/24有2^11个C类网络,可以用192.24.0.0/13来表示。
简单来说,超网是将小网络合成大网络,针对网络本身,聚合是对现有网络形成的路由条目进行汇总,针对的是路由表。
PS 3: 还有个小技巧,比如192.168.1.129/27 和 192.168.1.65/27一看就不在同一网段,129-65=64,/27掩码每个子网主机数为2^(32-27) = 32, 64>32,所以肯定不在同一子网。
策略路由
策略路由的优先级高于路由表,即使路由表中没有相对应的路由条目,单纯在策略路由也能转发正常数据包。具体是用route-map来实现,步骤如下:
1)定义好对象 即在写route-map的时候需要match的东东,比较常见的是地址,用ACL来定义,注意标准ACL只能针对源来做策略,而扩展ACL可以针对源,目的网络或者具体的上层应用。
(config)# access-list 1 permit 1.1.1.0 0.0.0.255
(config)# access-list 101 permit tcp 1.1.5.0 0.0.0.255 any eq telnet
PS:在我们做实验验证时,可以通过ip telnet source-interface loop 0 来改变自己telnet时的源地址为Loopbak 0
2)写route-map,下面是一个具体例子,基本的组成元素就是match和set,即针对什么东东以及执行的动作是什么。
(config)# route-map to-r1 // 定义一个route-map,名字要可读性强
(config-route-map)# match ip add 1 // 这里的1就是指的access-list 1
(config-route-map)# match length 0 200 // 针对的源地址以及数据包大小,二者需同时匹配
(config-route-map)# set ip next-hop 23.1.1.3 //定义好要策略的具体动作,这里是改变下一跳
这里最后的一条set命令可以有两种选择:
set ip next-hop 23.1.1.3 (对端IP)
set default interface fa0/0 (本地出口)
不过这两条命令是有区别的,前者直接应用策略路由,而后者先检查路由表,如果没有明细路由对应再用策略路由。
需要注意的是,如果default interface为以太口,由于我们并未告知路由器下一跳的IP地址,路由器也就没有办法通过ARP解析出Mac,会出现封装失败的情况,不过在转发失败之后会进行ARP请求。
这样的命令可能会让我们联想到静态路由,不过区别在于静态路由如果指定以太口为本地出口,比如 ip route 0.0.0.0 0.0.0.0 fa0/0,通过show arp 可以看到这条命令在敲下去以后会添加相应的ARP表项,也就是会发起ARP请求。
3)应用在接口,这里没有in 和out 的概念,因为肯定是该接口收到这个数据包后进行匹配然后按策略路由转发。
(config-if)# ip policy route-map to-r1
转贴自Foxmail论坛精华区)
一、简介
这一部分内容将详细讨论email头的方方面面。主要为用户架设邮件服务器提供理论基础并为管理员在出现电子邮件垃圾骚扰时提供发现垃圾邮件的真正源头。根据邮件头的知识有助于发现伪造的邮件。对于希望了解邮件是如何在网络中传输的用户同样会有帮助。
虽然在讨论中尽量有意避免如何伪造一封邮件的讨论,但是在讨论中的内容可能被恶意读者用作创建伪造邮件的基础。因为要在文章中举例说明,因此在文章中有若干虚构的域名和随意分配的IP地址作为示例使用。这些域名和IP都是任意任意选择和伪造的,和Internet上真实的域名和IP没有任何关系。
二、Email的传输过程
这部分包含一个简单的对一个电子邮件生命周期的分析。这对于理解邮件头能为你提供哪些信息是非常重要的背景信息。
从表面上看来邮件似乎是直接从发送者机器传递到接收者地址,但通常情况下事情并不是这样。一个典型的电子邮件在其生命周期中至少要经过四台计算机。
这是因为大多数企业或组织都有一个被称为“邮件服务器”专用服务器来处理电子邮件,而这一般并不是用户阅读邮件的计算机。对于ISP来说,用户从家里面的计算机拨号接入ISP网络,这里将用户家中的计算机称为客户机,而将ISP专门处理邮件的计算机称为邮件服务器。当一个用户发送邮件,他一般是在自己的计算机上编辑邮件,然后将邮件发送到ISP的邮件服务器上。客户机就此已经完成了自己的工作,而后面的工作则由ISP的邮件服务器来完成。首先ISP邮件服务器查找接收者指定的邮件服务器的IP地址,然后将邮件发送给该目的服务器。现在邮件则存储在接收者邮件服务器上等待接收者收取。当接收者从接受邮件服务器取得发送给他的邮件到自己的PC机以后,通常该邮件将被删除。
假设若干个虚构的用户和。zhangsan是263这个ISP的拨号用户。使用outook express这个邮件客户程序收发邮件。lisi是中科院的一个虚构用户,他使用工作站通过单位局域网连接进入互联网。
如果lisi想给zhangsan发送邮件,他在工作站(假设名字为alpha.zky.ac.cn)上编辑邮件,编辑好的信件从工作站发送到中科院的邮件服务器:mail.zky.ac.cn。一旦信件被发送到mail.zky.ac.cn,以后的信件发送过程就和lisi没有关系了。中科院的邮件服务器发现这是发送给263.net的某个用户的信件,则和263的邮件服务器-比如说是mail.263.net-通信,并将邮件传送给它。现在邮件则被存储在mail.263.net 之上直到zhangsan在自己的PC机上拨号连接到263网络察看并收取信件,这时mail.263.net将存储的邮件传送到zhangsan的个人PC机上。
在这个过程中,邮件头将三次被加到邮件中:在编辑时由邮件客户程序加入;当邮件传输到mail.zky.ac.cn时被mail.zky.ac.cn加入;当从mail.zky.ac.cn传送到mail.263.net时被mail.263.net加入;通常来说客户收取信件时并不添加邮件头。下面我们就仔细看看这些邮件头是如何产生的。
当lisi的邮件客户程序编辑邮件并将其发送给mail.zky.ac.cn时,邮件内容如下。这些内容都是由邮件编辑程序(outlook express)添加的:
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
当邮件从mail.zky.ac.cn传送到mail.263.net后,邮件内容变为(新添加的内容是由mail.zky.ac.cn):
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
当mail.263.net收到信件并存储等待zhangsan收取时,邮件内容变为,(新添加的内容是由mail.263.com添加的):
Received: from mail.zky.ac.cn (mail.zky.ac.cn [124.211.3.78]) by mail.263.net (8.8.5/8.7.2) with ESMTP id LAA20869 for ; Tue, 18 Mar 1997 14:39:24 -0800 (PST)
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
最后这封信的内容才是zhangsan收取并阅读的内容。下面是对其中内容的详细分析:
Received: from mail.zky.ac.cn
上面的内容表示该邮件是来自于自称是mail.zky.ac.cn的服务器。
(mail.zky.ac.cn [124.211.3.78])
这句话表示该服务器的真实名字的确是mail.zky.ac.cn,也就是说它自称的身份是正确的,其IP地址为124.211.3.78。
by mail.263.net (8.8.5/8.7.2)
接收这封邮件的机器是mail.263.net。其运行的邮件程序为sendmail,版本为8.8.5/8.7.2。
with ESMTP id LAA20869
接收邮件的服务器为该邮件赋有ID号LAA20869(通常该号码是邮件服务器内部使用的,但是管理员可以根据该ID号在log文件中查找关于该信件的相关信息,但是通常该号都是没有意义的) 。
for ;
该邮件是发送给地址zhangsan@263.net的。可以看到该邮件头没有To:相关内容。
Tue, 18 Mar 1997 14:39:24 -0800 (PST)
这次邮件传输发生时间为:太平洋时间Tuesday, March 18, 1997, at 14:39:24(太平洋时间,因为它比格林威治时间晚8个小时,因此是"-0800")。
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
该邮件头记录了邮件是从alpha.zky.ac.cn(lisi的工作站)传送到到邮件服务器mail.zky.ac.cn的。传送发生在太平洋时间14:36:17。发送计算机自称是alpha.zky.ac.cn,其真实名经dns查询的确是alpha.zky.ac.cn,其IP地址为124.211.3.11,邮件服务器软件为sendmail v8.8.5。该信件被邮件服务器的mail.zky.ac.cn赋给的ID号为004A21。
From: lisi@zky.ac.cn (Li Si)
该邮件是由lisi@zky.ac.cn发送的,其名字为Li Si。
To: zhangsan@263.net
邮件目的地址为:zhangsan@263.net。
Date: Tue, Mar 18 1997 14:36:14 PST
邮件编辑时间为14:36:14 Pacific Standard Time on Tuesday, March 18, 1997。
Message-Id: mail.zky.ac.cn给该邮件分配了这个号码来标识它。它和Received头中的SMTP机ESMTP ID号是不一样的。因为该号码是一直伴随整个邮件的。而其它ID则仅仅在特定的邮件服务器上的邮件传输阶段相关联。因此该机器ID号对其它机器来说没有任何意义。有时候Message-ID包含了发送者邮件地址在其中。
X-Mailer: Outlook Express 5.5
该消息是使用Outlook Express发送的,版本号为5.5。
Subject: 中午搓饭?
邮件标题。
三、邮件协议
这部分内容相对其它部分来说具有更多原理性内容,主要讨论邮件是如何从一点传输到另外一点的细节。你不需要理解每一句话,但是熟悉这方面的内容有助于在邮件传输出现奇怪现象时弄明白问题所在。由于垃圾电子邮件发送者常常故意制造一些奇怪的情况以掩饰自己的身份,因此能理解这些奇怪的现象对对付这些家伙是非常有用的。
为了在网络上传输数据,计算机网络协议使用了称为端口的访问入口,你可以将端口看做是一个通道,通过它计算机可以监听网络通信以提供服务。为了同时监听多个通信,计算机需要有使用端口号码标识多个不同的端口以区别这些通信。而和电子邮件传输相关的端口是25。
正常情况
让我们重新讨论上面的例子,但是这次我们仅仅关心mail.zky.ac.cn到mail.263.net之间的通信过程。首先mail.zky.edu.cn打开一个到mail.263.net的25号端口的连接,然后通过该连接发送邮件,当然在发送邮件过程中会有一些管理命令交互过程。交互中的命令和相应都或多或少的是可读的。命令是SMTP协议规定的。如果监听两者之间的通信,可能有以下内容:(粗体部分是mail.zky.ac.cn发出的)
220 mail.263.net ESMTP Sendmail 8.8.5/1.4/8.7.2/1.13; Tue, Mar 18 1997 14:38:58 -0800 (PST)
HELO mail.zky.ac.cn
250 mail.263.net Hello mail.zky.ac.cn [124.211.3.78], pleased to meet you
MAIL FROM: lisi@zky.ac.cn
250 lisi@zky.ac.cn... Sender ok
RCPT TO: zhangsan@263.net
250 zhangsan@263.net... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (R.T. Hood)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
Do you have time to meet for lunch?
--lisi
.
250 LAA20869 Message accepted for delivery
QUIT
221 mail.263.net closing connection
整个传输依赖于五个SMTP核心命令(当然SMTP还有一些其它命令,但是它们并不是用来完成真正的邮件传输):HELO,MAIL FROM,RCPT TO,DATA和QUIT。
邮件发送者HELO命令用来标识自己的身份。HELO mail.zky.ac.cn可以被解读为"嗨,我是mail.zky.ac.cn"。当然这里发送者可能会撒谎,但是没有任何机制能防止发送者mail.zky.ac.cn 说"嗨,我是mail.xxx.com"或是"嗨,我是mail.yyy.com"。然而在大多数情况下接收者都有一些方法来确认发送者的真实身份。
MAIL FROM命令标识开始邮件传输,含义是"我有从某人发送来的邮件",该命令后跟的地址就是所谓的“信封地址”(在后面我们将深入讨论),信封from地址不一定是发送者自己的地址。这个明显的安全漏洞是不可避免的(因为接收者并不知道发送者机器上有哪些地址),但是在特定的情况下这又是一个有用处的特色。
RCPT TO和MAIL FROM是相辅相成的。其指定邮件接收者。通过多个RCPT TO命令一个邮件可以被发送给多个接收者。(在后面的邮件中继部分将解释该特色可能针对某些不安全的系统滥用)。该命令后跟的地址称为"envelope to"地址。其指定了邮件将被投递给哪些用户,而和信件中的To:指定的地址没有关系。
DATA命令指示开始实际的邮件内容传输。DATA命令后输入的任何内容都被看做是邮件的一部分。而格式并没有任何限制。以一个英文单词加冒号开始的行一般被邮件程序看做是邮件头。以英文句号符号(.)开始的行被认为是邮件内容结束。
QUIT命令终止连接。
SMTP协议规范定义在RFC 821中。
非正常情况
上面的例子有些过于简单。上面的例子有一个假设前提:两个组织的邮件服务器相互之间能直接访问,而不需要经过代理、防火墙等安全设备。这在当前Internet环境下情况往往是这样的。但由于安全对于某些组织来说非常重要,而且网络或组织可能变得越来越庞大,情况就不那么简单了。对于具有代理型防火墙系统的邮件传输来说,区别就在于在邮件的头中多了一次转发过程的记录,也就是邮件首先从发送者邮件服务器发送到防火墙上,然后再从防火墙发送到目的邮件服务器。
四、邮件中继
对于某些具有特殊的“生命”周期的邮件头可能和前面讨论的情况完全不同:
Received: from unwilling.intermedia.com (unwilling.intermedia.com [98.134.11.32]) by mail.zky.ac.cn (8.8.5) id 004B32 for ; Wed, Jul 30 1997 16:39:50 -0800 (PST)
Received: from linuxaid.com.cn ([202.99.11.120]) by unwilling.intermedia.com (8.6.5/8.5.8) with SMTP id LAA12741; Wed, Jul 30 1997 19:36:28 -0500 (EST)
From: Anonymous Spammer
To: (recipient list suppressed)
Message-Id:
X-Mailer: Massive Annoyance
Subject: WANT TO MAKE ALOT OF MONEY???
这个邮件头和以前的不同之处可能会令你认为这是一封垃圾邮件,但是这里引起你的怀疑的是"Received:"头。从"Received:"头看来,邮件是来自linuxaid.com.cn,然后从这里传输给unwilling.intermedia.com,然后从这里再次传输到最终目的地址:mail.zky.ac.cn。从"Received:"头看来事情就是这样的,但是中间为什么会出现unwilling.intermedia.com呢?因为它和发送者和接收者都没有直接的关系。
要理解原因需要对SMTP协议进行一些了解。本质上来讲,传输过程是这样的:linuxaid.com.cn连接unwilling.intermedia.com的SMTP端口。告诉它“请发送这封邮件到lisi@zky.ac.cn。它可能是以最直接的方法来实现:RCPT TO:lisi@zky.ac.cn。到现在为止,unwilling.intermedia.com接管对该邮件的处理。因为它被告知将该信件转发给其他一个域:zky.ac.cn,它就查找对于域名zky.ac.cn的邮件服务器然后将邮件转发给zky.ac.cn。这个过程通常被称作邮件中继(mail relaying)。
出现邮件中继是由于历史的原因,使用邮件中继是有它的好处的。到八十年代末期,很多网络中的计算机都不是直接通信来传输邮件。而是通过邮件路由来传递邮件,通过邮件路由服务器一步一步地进行邮件传输。这样做是非常麻烦的,发送者往往需要手工指定一封邮件需要经过哪些邮件路由服务器,比如需要从San Francisco发送一封邮件到New York,则需要在信封中添加如下内容:
San Francisco, Sacramento, Reno, Salt Lake City, Rock Springs, Laramie, North Platte, Lincoln, Omaha, Des Moines, Cedar Rapids, Dubuque, Rockford, Chicago, Gary, Elkhart, Fort Wayne, Toledo, Cleveland, Erie, Elmira, Williamsport, Newark, New York City, Greenwich Village, #12 Desolation Row, Apt. #35, R.A. Zimmermann
如果从邮局工作人员的角度来考虑,这种模型是非常有用的。在Gary的邮局只需要知道如何和临近的邮局Chicago和Elkhart通信,而无需消耗资源计算如何将邮件发送到New York(这时候就很清楚为什么这种模式对于邮件发送者来说非常糟糕,为什么这种方法被抛弃了)。但是这就是邮件被传输的过程。因此服务器具有这样的中继的能力在那时是很重要的。
而现在中继通常被用作不道德的广告商用来隐藏它们的原始地址,将埋怨转嫁给被用来中继的服务器而不是其所在ISP的技术。同样通过中继可以实现将发送信件的负载转移到中继服务器上,从而实现盗用中继服务器的服务资源。在这里最重要的一点是理解邮件内容是在发送点linuxaid.com.cn被编辑。中间的服务器unwilling.intermedia.com只是参加了中间的传输工作,它并不能对发送者有任何的约束力。
在上面的例子中应该注意的另外一点是"Message-Id:"并不是由发送者服务器(linuxaid.com.cn)而是中继计算机(unwilling.intermedia. com)填写的。这是被中继的邮件的一个典型特性,该特性反映了发送服务器并没有提供Message-Id的事实。本文出自 51CTO.COM技术博客
一、简介
这一部分内容将详细讨论email头的方方面面。主要为用户架设邮件服务器提供理论基础并为管理员在出现电子邮件垃圾骚扰时提供发现垃圾邮件的真正源头。根据邮件头的知识有助于发现伪造的邮件。对于希望了解邮件是如何在网络中传输的用户同样会有帮助。
虽然在讨论中尽量有意避免如何伪造一封邮件的讨论,但是在讨论中的内容可能被恶意读者用作创建伪造邮件的基础。因为要在文章中举例说明,因此在文章中有若干虚构的域名和随意分配的IP地址作为示例使用。这些域名和IP都是任意任意选择和伪造的,和Internet上真实的域名和IP没有任何关系。
二、Email的传输过程
这部分包含一个简单的对一个电子邮件生命周期的分析。这对于理解邮件头能为你提供哪些信息是非常重要的背景信息。
从表面上看来邮件似乎是直接从发送者机器传递到接收者地址,但通常情况下事情并不是这样。一个典型的电子邮件在其生命周期中至少要经过四台计算机。
这是因为大多数企业或组织都有一个被称为“邮件服务器”专用服务器来处理电子邮件,而这一般并不是用户阅读邮件的计算机。对于ISP来说,用户从家里面的计算机拨号接入ISP网络,这里将用户家中的计算机称为客户机,而将ISP专门处理邮件的计算机称为邮件服务器。当一个用户发送邮件,他一般是在自己的计算机上编辑邮件,然后将邮件发送到ISP的邮件服务器上。客户机就此已经完成了自己的工作,而后面的工作则由ISP的邮件服务器来完成。首先ISP邮件服务器查找接收者指定的邮件服务器的IP地址,然后将邮件发送给该目的服务器。现在邮件则存储在接收者邮件服务器上等待接收者收取。当接收者从接受邮件服务器取得发送给他的邮件到自己的PC机以后,通常该邮件将被删除。
假设若干个虚构的用户和。zhangsan是263这个ISP的拨号用户。使用outook express这个邮件客户程序收发邮件。lisi是中科院的一个虚构用户,他使用工作站通过单位局域网连接进入互联网。
如果lisi想给zhangsan发送邮件,他在工作站(假设名字为alpha.zky.ac.cn)上编辑邮件,编辑好的信件从工作站发送到中科院的邮件服务器:mail.zky.ac.cn。一旦信件被发送到mail.zky.ac.cn,以后的信件发送过程就和lisi没有关系了。中科院的邮件服务器发现这是发送给263.net的某个用户的信件,则和263的邮件服务器-比如说是mail.263.net-通信,并将邮件传送给它。现在邮件则被存储在mail.263.net 之上直到zhangsan在自己的PC机上拨号连接到263网络察看并收取信件,这时mail.263.net将存储的邮件传送到zhangsan的个人PC机上。
在这个过程中,邮件头将三次被加到邮件中:在编辑时由邮件客户程序加入;当邮件传输到mail.zky.ac.cn时被mail.zky.ac.cn加入;当从mail.zky.ac.cn传送到mail.263.net时被mail.263.net加入;通常来说客户收取信件时并不添加邮件头。下面我们就仔细看看这些邮件头是如何产生的。
当lisi的邮件客户程序编辑邮件并将其发送给mail.zky.ac.cn时,邮件内容如下。这些内容都是由邮件编辑程序(outlook express)添加的:
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
当邮件从mail.zky.ac.cn传送到mail.263.net后,邮件内容变为(新添加的内容是由mail.zky.ac.cn):
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
当mail.263.net收到信件并存储等待zhangsan收取时,邮件内容变为,(新添加的内容是由mail.263.com添加的):
Received: from mail.zky.ac.cn (mail.zky.ac.cn [124.211.3.78]) by mail.263.net (8.8.5/8.7.2) with ESMTP id LAA20869 for ; Tue, 18 Mar 1997 14:39:24 -0800 (PST)
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (Li Si)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
最后这封信的内容才是zhangsan收取并阅读的内容。下面是对其中内容的详细分析:
Received: from mail.zky.ac.cn
上面的内容表示该邮件是来自于自称是mail.zky.ac.cn的服务器。
(mail.zky.ac.cn [124.211.3.78])
这句话表示该服务器的真实名字的确是mail.zky.ac.cn,也就是说它自称的身份是正确的,其IP地址为124.211.3.78。
by mail.263.net (8.8.5/8.7.2)
接收这封邮件的机器是mail.263.net。其运行的邮件程序为sendmail,版本为8.8.5/8.7.2。
with ESMTP id LAA20869
接收邮件的服务器为该邮件赋有ID号LAA20869(通常该号码是邮件服务器内部使用的,但是管理员可以根据该ID号在log文件中查找关于该信件的相关信息,但是通常该号都是没有意义的) 。
for ;
该邮件是发送给地址zhangsan@263.net的。可以看到该邮件头没有To:相关内容。
Tue, 18 Mar 1997 14:39:24 -0800 (PST)
这次邮件传输发生时间为:太平洋时间Tuesday, March 18, 1997, at 14:39:24(太平洋时间,因为它比格林威治时间晚8个小时,因此是"-0800")。
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
该邮件头记录了邮件是从alpha.zky.ac.cn(lisi的工作站)传送到到邮件服务器mail.zky.ac.cn的。传送发生在太平洋时间14:36:17。发送计算机自称是alpha.zky.ac.cn,其真实名经dns查询的确是alpha.zky.ac.cn,其IP地址为124.211.3.11,邮件服务器软件为sendmail v8.8.5。该信件被邮件服务器的mail.zky.ac.cn赋给的ID号为004A21。
From: lisi@zky.ac.cn (Li Si)
该邮件是由lisi@zky.ac.cn发送的,其名字为Li Si。
To: zhangsan@263.net
邮件目的地址为:zhangsan@263.net。
Date: Tue, Mar 18 1997 14:36:14 PST
邮件编辑时间为14:36:14 Pacific Standard Time on Tuesday, March 18, 1997。
Message-Id: mail.zky.ac.cn给该邮件分配了这个号码来标识它。它和Received头中的SMTP机ESMTP ID号是不一样的。因为该号码是一直伴随整个邮件的。而其它ID则仅仅在特定的邮件服务器上的邮件传输阶段相关联。因此该机器ID号对其它机器来说没有任何意义。有时候Message-ID包含了发送者邮件地址在其中。
X-Mailer: Outlook Express 5.5
该消息是使用Outlook Express发送的,版本号为5.5。
Subject: 中午搓饭?
邮件标题。
三、邮件协议
这部分内容相对其它部分来说具有更多原理性内容,主要讨论邮件是如何从一点传输到另外一点的细节。你不需要理解每一句话,但是熟悉这方面的内容有助于在邮件传输出现奇怪现象时弄明白问题所在。由于垃圾电子邮件发送者常常故意制造一些奇怪的情况以掩饰自己的身份,因此能理解这些奇怪的现象对对付这些家伙是非常有用的。
为了在网络上传输数据,计算机网络协议使用了称为端口的访问入口,你可以将端口看做是一个通道,通过它计算机可以监听网络通信以提供服务。为了同时监听多个通信,计算机需要有使用端口号码标识多个不同的端口以区别这些通信。而和电子邮件传输相关的端口是25。
正常情况
让我们重新讨论上面的例子,但是这次我们仅仅关心mail.zky.ac.cn到mail.263.net之间的通信过程。首先mail.zky.edu.cn打开一个到mail.263.net的25号端口的连接,然后通过该连接发送邮件,当然在发送邮件过程中会有一些管理命令交互过程。交互中的命令和相应都或多或少的是可读的。命令是SMTP协议规定的。如果监听两者之间的通信,可能有以下内容:(粗体部分是mail.zky.ac.cn发出的)
220 mail.263.net ESMTP Sendmail 8.8.5/1.4/8.7.2/1.13; Tue, Mar 18 1997 14:38:58 -0800 (PST)
HELO mail.zky.ac.cn
250 mail.263.net Hello mail.zky.ac.cn [124.211.3.78], pleased to meet you
MAIL FROM: lisi@zky.ac.cn
250 lisi@zky.ac.cn... Sender ok
RCPT TO: zhangsan@263.net
250 zhangsan@263.net... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from alpha.zky.ac.cn (alpha.zky.ac.cn [124.211.3.11]) by mail.zky.ac.cn (8.8.5) id 004A21; Tue, Mar 18 1997 14:36:17 -0800 (PST)
From: lisi@zky.ac.cn (R.T. Hood)
To: zhangsan@263.net
Date: Tue, Mar 18 1997 14:36:14 PST
Message-Id:
X-Mailer: Outlook Express 5.5
Subject: 中午搓饭?
Do you have time to meet for lunch?
--lisi
.
250 LAA20869 Message accepted for delivery
QUIT
221 mail.263.net closing connection
整个传输依赖于五个SMTP核心命令(当然SMTP还有一些其它命令,但是它们并不是用来完成真正的邮件传输):HELO,MAIL FROM,RCPT TO,DATA和QUIT。
邮件发送者HELO命令用来标识自己的身份。HELO mail.zky.ac.cn可以被解读为"嗨,我是mail.zky.ac.cn"。当然这里发送者可能会撒谎,但是没有任何机制能防止发送者mail.zky.ac.cn 说"嗨,我是mail.xxx.com"或是"嗨,我是mail.yyy.com"。然而在大多数情况下接收者都有一些方法来确认发送者的真实身份。
MAIL FROM命令标识开始邮件传输,含义是"我有从某人发送来的邮件",该命令后跟的地址就是所谓的“信封地址”(在后面我们将深入讨论),信封from地址不一定是发送者自己的地址。这个明显的安全漏洞是不可避免的(因为接收者并不知道发送者机器上有哪些地址),但是在特定的情况下这又是一个有用处的特色。
RCPT TO和MAIL FROM是相辅相成的。其指定邮件接收者。通过多个RCPT TO命令一个邮件可以被发送给多个接收者。(在后面的邮件中继部分将解释该特色可能针对某些不安全的系统滥用)。该命令后跟的地址称为"envelope to"地址。其指定了邮件将被投递给哪些用户,而和信件中的To:指定的地址没有关系。
DATA命令指示开始实际的邮件内容传输。DATA命令后输入的任何内容都被看做是邮件的一部分。而格式并没有任何限制。以一个英文单词加冒号开始的行一般被邮件程序看做是邮件头。以英文句号符号(.)开始的行被认为是邮件内容结束。
QUIT命令终止连接。
SMTP协议规范定义在RFC 821中。
非正常情况
上面的例子有些过于简单。上面的例子有一个假设前提:两个组织的邮件服务器相互之间能直接访问,而不需要经过代理、防火墙等安全设备。这在当前Internet环境下情况往往是这样的。但由于安全对于某些组织来说非常重要,而且网络或组织可能变得越来越庞大,情况就不那么简单了。对于具有代理型防火墙系统的邮件传输来说,区别就在于在邮件的头中多了一次转发过程的记录,也就是邮件首先从发送者邮件服务器发送到防火墙上,然后再从防火墙发送到目的邮件服务器。
四、邮件中继
对于某些具有特殊的“生命”周期的邮件头可能和前面讨论的情况完全不同:
Received: from unwilling.intermedia.com (unwilling.intermedia.com [98.134.11.32]) by mail.zky.ac.cn (8.8.5) id 004B32 for ; Wed, Jul 30 1997 16:39:50 -0800 (PST)
Received: from linuxaid.com.cn ([202.99.11.120]) by unwilling.intermedia.com (8.6.5/8.5.8) with SMTP id LAA12741; Wed, Jul 30 1997 19:36:28 -0500 (EST)
From: Anonymous Spammer
To: (recipient list suppressed)
Message-Id:
X-Mailer: Massive Annoyance
Subject: WANT TO MAKE ALOT OF MONEY???
这个邮件头和以前的不同之处可能会令你认为这是一封垃圾邮件,但是这里引起你的怀疑的是"Received:"头。从"Received:"头看来,邮件是来自linuxaid.com.cn,然后从这里传输给unwilling.intermedia.com,然后从这里再次传输到最终目的地址:mail.zky.ac.cn。从"Received:"头看来事情就是这样的,但是中间为什么会出现unwilling.intermedia.com呢?因为它和发送者和接收者都没有直接的关系。
要理解原因需要对SMTP协议进行一些了解。本质上来讲,传输过程是这样的:linuxaid.com.cn连接unwilling.intermedia.com的SMTP端口。告诉它“请发送这封邮件到lisi@zky.ac.cn。它可能是以最直接的方法来实现:RCPT TO:lisi@zky.ac.cn。到现在为止,unwilling.intermedia.com接管对该邮件的处理。因为它被告知将该信件转发给其他一个域:zky.ac.cn,它就查找对于域名zky.ac.cn的邮件服务器然后将邮件转发给zky.ac.cn。这个过程通常被称作邮件中继(mail relaying)。
出现邮件中继是由于历史的原因,使用邮件中继是有它的好处的。到八十年代末期,很多网络中的计算机都不是直接通信来传输邮件。而是通过邮件路由来传递邮件,通过邮件路由服务器一步一步地进行邮件传输。这样做是非常麻烦的,发送者往往需要手工指定一封邮件需要经过哪些邮件路由服务器,比如需要从San Francisco发送一封邮件到New York,则需要在信封中添加如下内容:
San Francisco, Sacramento, Reno, Salt Lake City, Rock Springs, Laramie, North Platte, Lincoln, Omaha, Des Moines, Cedar Rapids, Dubuque, Rockford, Chicago, Gary, Elkhart, Fort Wayne, Toledo, Cleveland, Erie, Elmira, Williamsport, Newark, New York City, Greenwich Village, #12 Desolation Row, Apt. #35, R.A. Zimmermann
如果从邮局工作人员的角度来考虑,这种模型是非常有用的。在Gary的邮局只需要知道如何和临近的邮局Chicago和Elkhart通信,而无需消耗资源计算如何将邮件发送到New York(这时候就很清楚为什么这种模式对于邮件发送者来说非常糟糕,为什么这种方法被抛弃了)。但是这就是邮件被传输的过程。因此服务器具有这样的中继的能力在那时是很重要的。
而现在中继通常被用作不道德的广告商用来隐藏它们的原始地址,将埋怨转嫁给被用来中继的服务器而不是其所在ISP的技术。同样通过中继可以实现将发送信件的负载转移到中继服务器上,从而实现盗用中继服务器的服务资源。在这里最重要的一点是理解邮件内容是在发送点linuxaid.com.cn被编辑。中间的服务器unwilling.intermedia.com只是参加了中间的传输工作,它并不能对发送者有任何的约束力。
在上面的例子中应该注意的另外一点是"Message-Id:"并不是由发送者服务器(linuxaid.com.cn)而是中继计算机(unwilling.intermedia. com)填写的。这是被中继的邮件的一个典型特性,该特性反映了发送服务器并没有提供Message-Id的事实。本文出自 51CTO.COM技术博客
一、OSPF概述
1、链路状态路由协议
快速适应网络变化,在网络发生变化时,发送触发更新,以较低的频率发送定期更新.通过LSA的洪泛,形成完整的LSDB.网络拓扑图,以自己为中心,运行SPF算法,计算到每个网络的最短路径.
邻居表;直接相连的邻接路由器(邻接关系数据库)
拓扑表;网络或区域内的其他路由器及其连接的网络.(LSDB,OSPF拓扑数据库)
路由表;前往每个目的地的最佳路径(转发数据库)
距离矢量和链路状态;使用距离矢量路由选择协议时,路由器依赖于邻居的路由选择决策,路由器并不完全了解网络拓扑.使用链路状态路由选择协议时,每台路由器都完全了解网络拓扑,能够根据准确的网络拓扑信息独立地做出决策.
2、OSPF区域结构
层次化结构
中转区域;将其他类型OSPF区域连接起来,快速、高效的传输IP分组.(区域0)
常规区域;连接用户和资源的其他区域,标准区域、末节区域、绝对末节区域、次末节区域.
3、SPF区域
减少了路由选择表条目、将区域内拓扑变化的影响限制在本地、将LSA扩散限制在区域内.区域术语;骨干路由器,骨干区域,其他区域都和骨干区域相连,ABR,将非骨干区域连接到骨干区域,ABR(分隔LSA扩散区,是执行区域地址汇总的主要地方,常常是默认路由源,维护其连接的每个区域的LSDB)
4、OSPF邻接关系
路由器通过交换Hello获得协议特定的参数发现建立邻居关系,建立邻居关系后,通过交换LSA来同步LSDB,形成完全邻接状态.点到点邻居直接成为邻接,LAN网络中,所有路由器根DR、BDR全full.其他路由器之间为DROther.路由器之间的链路状态信息必须同步,LSA被扩散到整个区域.
5、OSPF度量计算
路由器利用LSDB中的信息,使用SPF算法计算去网络中的最佳路径.每个路由器在一个区域中有着相同的链路状态数据库,以自己为根建立一个最短路径树,计算目的网络最优路径,最小cost之各,放入转发数据库.
6、链路状态数据的结构
收到LSU后,如果LSDB中没有这样的条目,则将其加入到LSDB中,返回一个链路状态确认,此信息扩散到其他路由器,运行SPF,更新路由表;如果有这样的条目,并信息相同,怱略;有条目信息有更新,则将其加入到LSDB中,返回一个链路状态确认,此信息扩散到其他路由器,运行SPF,更新路由表;有条目,信息更旧,向发送方发新信息.
二、OSPF分组
1、OSPF分组类型
Hello;发现建立维持邻居关系.DBD;检查路由器的数据库之间是否同步.LSR;向另一台路由器请求特定的链路状态记录.LSU;发送请求的链路状态信息.LSAck ;对其他类型的分组进行确认
2、OSPF包头结构
OSPF被IP封装,协议号是89
版本号;V2
分组类型;5种中的哪一种
分组长度;OSPF分组长度多少字节
路由器ID;此分组谁发的
区域ID;分组来自哪个区域
校验和;
身份验证类型;指出路由器是否进行认证,明文还是密文
身份验证;
数据;因包类型改变
Hello;已知邻居组列表
DBD;LSDB摘要
LSR;需要的LSU类型和提供所需LSU的RID
LSU;完整LSA条目,一个更新中可有多个条目
LSA ck;空
3、OSPF邻接关系的建立;hello分组
使用组播地址;224.0.0.5发送hello.路由器ID;Hello/dead(相同);邻居列表;区域ID(相同);路由器优先级;DR IP地址;BDR IP地址;身份验证密码(相同);末节区域标记(相同);
4、交换hello建立邻接关系状态
路由器A启动down状态,向其接口发hello,224.0.0.5,其他路由器收到检查其参数,加入邻居表中init状态.所有路由器发单播应答分组.A收到后,将邻居ID加入到邻居列表中,two-way状态.如果是多路访问网络,选DR、BDR.定期交换hello,维护邻接关系,LAN 10秒、NBMA 30秒.网络类型决定了邻居如何形成邻接,点到点网络邻居自动形成邻接,多路访问网络由DR决定如何形成邻接.
5、路由发现阶段
通过DBD、LSR、LSU、LSAck使所有OSPF路由器的LSDB完全相同(full).形成邻接关系的路由器的状态是准启动exstart.首先通过DBD选举主从路由器,router ID高的成为主路由器,由主路由器控制DBD序号的增长.一旦有设备声称自己是从路由器,则进入exchange状态,通过LSR携带LSA头部向对方描述各自的LSDB.通过LSR携带LSA头部向对方请求相应的LSA,进入loading状态,通过LSU携带LSA进行应答,用LSAck对LSU中的LSA进行确认,最终达到full状态.多路访问中,能够接受有些路由器中有two-way状态.DR通告地址为224.0.0.5,其他路由器为224.0.0.6.
6、LSA序列号
每个LSA在LSDB保持了序列号,32位, 0x80000001开始和结束0x7FFFFFFF,LSA每30分钏洪泛一次,以保持适当的数据库同步,每一次洪泛,序列号加1越大越好,当序列号到达最大,又回到0x80000001,大的序列号将会作废.
Show ip ospf database debug ip ospf packet
三、配置OSPF
1、 启用OSPF进程
R1(config)#router ospf 1(进程号只在本地有作用)
2、指定路由器上的哪些接口将参与OSPF进程以及网络所属的OSPF区域
R1(config-router)#network IP 通配符 area X
R1(config-if)#ip ospf X area X
3、单区域OSPF配置,多区域OSPF配置
4、路由器ID
OSPF路由器ID唯一地标识了网络中的每台OSPF路由器,进程启动时选择路由器ID,路由器是一个唯一的IP地址.选择RID;看是否配置了RID RID(config-router)#router-id 1.1.1.1 选最大回环口地址,选最大物理口的地址,一但选定,不能换.去掉进程,再配,配置后清进程,改后重启设备
5、查看
Show Ip protocols show ip route ospf show ip ospf interface X
Show ip ospf show ip ospf neighbor detail debug ip ospf events
四、OSPF网络类型
根据物理链路类型定义了不同的网络类型
点到点;将一对路由器连接起来的网络
广播;多路访问广播网络
NBMA;连接的路由器超过两台,但没有广播功能,FR、ATM、X.25都属于NBMA,OSPF有五种运行模式.
1、点到点链路;串口接口封装PPP、HDLC、FR ATM点到点子接口、没有DR BDR的选举、OSPF自动检测这种接口类型、OSPF包发送利用多播地址224.0.0.5
2、多路访问一般为以太网和令牌环、选举DR和BDR、所有的设备必须和DR、BDR邻接、包发往DR、BDR为224.0.0.6、包发往其他设备为224.0.0.5
3、选举DR、BDR;组播发hello包、最高低先级的为DR.次高的为BDR、其次选RID最大、DR没有抢占、接口模式下指定优先级、优先级默认为1.值从0-255、优先级为0,不能参加DR、BDR选举.只能成为DRother
4、NBMA拓扑;单一的接口连接到多个站点、拓扑为多个路由器,但不支持广播
5、DR选举在NBMA网络中;OSPF认为,NBMA像其他的广播网、DR、BDR需要和其他的路由器全连接.但NBMA一般做不到、DR、BDR需要一个邻居列表、邻居不能自动发现路由器
6、NBMA网络上的OSPF运行模式;符合RFC 2328兼容模式如下; 非广播( NBMA )、 点对多点、思科附加模式;点对多点非广播、广播、点对点
选择网络类型;ip ospf network [{broadcast | non-broadcast | point-to-multipoint [non-broadcast] | point-to-point}]
7、NBMA模式;作为一个广播网络的协议(行为像一个局域网) .所有串行端口属于同一IP子网.帧中继, X.25 , ATM网络默认为非广播模式.邻居必须是静态配置.重复的LSA更新.符合的RFC 2328.(一个IP子网、必须手工指定邻居、选举DR、BDR、DR和BDR必须与其他所有路由器都直接相连、全互联或部分互联拓扑、hello 30秒)
配置邻居;R1(config-router)# neighbor ip-address [priority number] [poll-interval number] [cost number] [database-filter all]
RouterA(config-router)# neighbor 192.168.1.2 priority 0
RouterA(config-router)# neighbor 192.168.1.3 priority 0
校验show ip ospf neighbor
8、点到多点模式;一个IP 子网、使用OSPF组播hello分组来自动发现邻居、不选举DR和BDR,路由器发送的LSA中包含更多有关邻接路由器的信息、通常用于部分互联或星型拓扑中.Hello 30秒.
配置R1(config-if)#ip ospf network point-to-multipoint
Show ip ospf interface
9、point-to-multipoint nonbroadcast思科私有;如果没有在VC上启用组播和广播,则不能使用遵循RFC的点到多点模式,因为路由器无法使用组播hello分组动态地发现邻接路由器,此时应该使用Cisco 模式,在这种情况下,必须手工指定邻居,无需选举DR和BDR.
R1(config)# interface s0/1.2 multipoint hello 30秒
10、point-to-point Cisco模式;每个子接口属于不同的IP子网、不选举DR、BDR、用于两台路由器需要在一对接口上建立邻接关系时、接口可以是LAN接口,也可以是WAN接口.R1(config)# interface s0/1.2 point-to-point默认模式.不需要指邻居,无需选举DR和BDR.Hello 10秒
11、broadcast;让WAN接口就向LAN接口,一个IP子网,使用OSPF组播hello分组来自动发现邻居、选举DR和BDR,全互联或部分互联拓扑.
查看建立邻接过程debug ip ospf adj
五、OSPF路由类型
1、大型OSPF网络存在的问题;对路由器内存、CPU压力大、链路带宽的占用(LSA多,LSDB大)、生成巨大路由表,导致转发慢、无法压制内部动荡.
解决方案;OSPF分区,把一个大的OSPF网络分成若干个小的相互独立的OSPF网络.区域内部是链路状态(LSA的洪泛不允许被阻碍),区域和区域之间的行为是距离适量
2、路由器类型
由于区域的划分,根据路由器接口与区域的关系,具有不同的类型,行使不同的功能.
内部路由器;把所有OSPF已知的接口放入同一个区域,LSA的传输不能被该路由器阻塞,一个区域所有内部路由器LSDB完全相同.
区域边界路由器(ABR);如果路由器的接口分属于两个或两个以上的区域,用来互联两个相互隔离的区域,针对所属的区域分别维护各自独立的LSDB,ABR是区域和区域,外部和用户交往的入口.建议ABR只互联两个区域.骨干路由器;至少有一个接口属于area 0 用于解决区域间问题,以防止区域间的循环.自治系统边界路由器ASBR;用来互联OSPF网络与外部网络(非OSPF)作了重发布的路由器.
3、 虚链路virtual-link
所有区域必须和区域0有直接的物理连接(ABR必须是骨干路由器)
骨干区域发生分裂,某个区域和区域0没有直接物理连接.虚链路为物理上没有直接连接到area 0的区域创建到 area 0的逻辑连接.注意事项(虚链路必须创建在连接同一个区域的两个ABR上,其中一个ABR是骨干路由器,不能穿越stub区域).
配置;
R1(config-router)# area 要穿越的区域 virtual-link 对方RID [authentication [message-digest | null]] [hello-interval x] [retransmit-interval x] [transmit-delay x] [dead-interval x] [[authentication-key n] | [message-digest-key n md5n]]
查看;show ip ospf show ip ospf virtual-link
1、链路状态路由协议
快速适应网络变化,在网络发生变化时,发送触发更新,以较低的频率发送定期更新.通过LSA的洪泛,形成完整的LSDB.网络拓扑图,以自己为中心,运行SPF算法,计算到每个网络的最短路径.
邻居表;直接相连的邻接路由器(邻接关系数据库)
拓扑表;网络或区域内的其他路由器及其连接的网络.(LSDB,OSPF拓扑数据库)
路由表;前往每个目的地的最佳路径(转发数据库)
距离矢量和链路状态;使用距离矢量路由选择协议时,路由器依赖于邻居的路由选择决策,路由器并不完全了解网络拓扑.使用链路状态路由选择协议时,每台路由器都完全了解网络拓扑,能够根据准确的网络拓扑信息独立地做出决策.
2、OSPF区域结构
层次化结构
中转区域;将其他类型OSPF区域连接起来,快速、高效的传输IP分组.(区域0)
常规区域;连接用户和资源的其他区域,标准区域、末节区域、绝对末节区域、次末节区域.
3、SPF区域
减少了路由选择表条目、将区域内拓扑变化的影响限制在本地、将LSA扩散限制在区域内.区域术语;骨干路由器,骨干区域,其他区域都和骨干区域相连,ABR,将非骨干区域连接到骨干区域,ABR(分隔LSA扩散区,是执行区域地址汇总的主要地方,常常是默认路由源,维护其连接的每个区域的LSDB)
4、OSPF邻接关系
路由器通过交换Hello获得协议特定的参数发现建立邻居关系,建立邻居关系后,通过交换LSA来同步LSDB,形成完全邻接状态.点到点邻居直接成为邻接,LAN网络中,所有路由器根DR、BDR全full.其他路由器之间为DROther.路由器之间的链路状态信息必须同步,LSA被扩散到整个区域.
5、OSPF度量计算
路由器利用LSDB中的信息,使用SPF算法计算去网络中的最佳路径.每个路由器在一个区域中有着相同的链路状态数据库,以自己为根建立一个最短路径树,计算目的网络最优路径,最小cost之各,放入转发数据库.
6、链路状态数据的结构
收到LSU后,如果LSDB中没有这样的条目,则将其加入到LSDB中,返回一个链路状态确认,此信息扩散到其他路由器,运行SPF,更新路由表;如果有这样的条目,并信息相同,怱略;有条目信息有更新,则将其加入到LSDB中,返回一个链路状态确认,此信息扩散到其他路由器,运行SPF,更新路由表;有条目,信息更旧,向发送方发新信息.
二、OSPF分组
1、OSPF分组类型
Hello;发现建立维持邻居关系.DBD;检查路由器的数据库之间是否同步.LSR;向另一台路由器请求特定的链路状态记录.LSU;发送请求的链路状态信息.LSAck ;对其他类型的分组进行确认
2、OSPF包头结构
OSPF被IP封装,协议号是89
版本号;V2
分组类型;5种中的哪一种
分组长度;OSPF分组长度多少字节
路由器ID;此分组谁发的
区域ID;分组来自哪个区域
校验和;
身份验证类型;指出路由器是否进行认证,明文还是密文
身份验证;
数据;因包类型改变
Hello;已知邻居组列表
DBD;LSDB摘要
LSR;需要的LSU类型和提供所需LSU的RID
LSU;完整LSA条目,一个更新中可有多个条目
LSA ck;空
3、OSPF邻接关系的建立;hello分组
使用组播地址;224.0.0.5发送hello.路由器ID;Hello/dead(相同);邻居列表;区域ID(相同);路由器优先级;DR IP地址;BDR IP地址;身份验证密码(相同);末节区域标记(相同);
4、交换hello建立邻接关系状态
路由器A启动down状态,向其接口发hello,224.0.0.5,其他路由器收到检查其参数,加入邻居表中init状态.所有路由器发单播应答分组.A收到后,将邻居ID加入到邻居列表中,two-way状态.如果是多路访问网络,选DR、BDR.定期交换hello,维护邻接关系,LAN 10秒、NBMA 30秒.网络类型决定了邻居如何形成邻接,点到点网络邻居自动形成邻接,多路访问网络由DR决定如何形成邻接.
5、路由发现阶段
通过DBD、LSR、LSU、LSAck使所有OSPF路由器的LSDB完全相同(full).形成邻接关系的路由器的状态是准启动exstart.首先通过DBD选举主从路由器,router ID高的成为主路由器,由主路由器控制DBD序号的增长.一旦有设备声称自己是从路由器,则进入exchange状态,通过LSR携带LSA头部向对方描述各自的LSDB.通过LSR携带LSA头部向对方请求相应的LSA,进入loading状态,通过LSU携带LSA进行应答,用LSAck对LSU中的LSA进行确认,最终达到full状态.多路访问中,能够接受有些路由器中有two-way状态.DR通告地址为224.0.0.5,其他路由器为224.0.0.6.
6、LSA序列号
每个LSA在LSDB保持了序列号,32位, 0x80000001开始和结束0x7FFFFFFF,LSA每30分钏洪泛一次,以保持适当的数据库同步,每一次洪泛,序列号加1越大越好,当序列号到达最大,又回到0x80000001,大的序列号将会作废.
Show ip ospf database debug ip ospf packet
三、配置OSPF
1、 启用OSPF进程
R1(config)#router ospf 1(进程号只在本地有作用)
2、指定路由器上的哪些接口将参与OSPF进程以及网络所属的OSPF区域
R1(config-router)#network IP 通配符 area X
R1(config-if)#ip ospf X area X
3、单区域OSPF配置,多区域OSPF配置
4、路由器ID
OSPF路由器ID唯一地标识了网络中的每台OSPF路由器,进程启动时选择路由器ID,路由器是一个唯一的IP地址.选择RID;看是否配置了RID RID(config-router)#router-id 1.1.1.1 选最大回环口地址,选最大物理口的地址,一但选定,不能换.去掉进程,再配,配置后清进程,改后重启设备
5、查看
Show Ip protocols show ip route ospf show ip ospf interface X
Show ip ospf show ip ospf neighbor detail debug ip ospf events
四、OSPF网络类型
根据物理链路类型定义了不同的网络类型
点到点;将一对路由器连接起来的网络
广播;多路访问广播网络
NBMA;连接的路由器超过两台,但没有广播功能,FR、ATM、X.25都属于NBMA,OSPF有五种运行模式.
1、点到点链路;串口接口封装PPP、HDLC、FR ATM点到点子接口、没有DR BDR的选举、OSPF自动检测这种接口类型、OSPF包发送利用多播地址224.0.0.5
2、多路访问一般为以太网和令牌环、选举DR和BDR、所有的设备必须和DR、BDR邻接、包发往DR、BDR为224.0.0.6、包发往其他设备为224.0.0.5
3、选举DR、BDR;组播发hello包、最高低先级的为DR.次高的为BDR、其次选RID最大、DR没有抢占、接口模式下指定优先级、优先级默认为1.值从0-255、优先级为0,不能参加DR、BDR选举.只能成为DRother
4、NBMA拓扑;单一的接口连接到多个站点、拓扑为多个路由器,但不支持广播
5、DR选举在NBMA网络中;OSPF认为,NBMA像其他的广播网、DR、BDR需要和其他的路由器全连接.但NBMA一般做不到、DR、BDR需要一个邻居列表、邻居不能自动发现路由器
6、NBMA网络上的OSPF运行模式;符合RFC 2328兼容模式如下; 非广播( NBMA )、 点对多点、思科附加模式;点对多点非广播、广播、点对点
选择网络类型;ip ospf network [{broadcast | non-broadcast | point-to-multipoint [non-broadcast] | point-to-point}]
7、NBMA模式;作为一个广播网络的协议(行为像一个局域网) .所有串行端口属于同一IP子网.帧中继, X.25 , ATM网络默认为非广播模式.邻居必须是静态配置.重复的LSA更新.符合的RFC 2328.(一个IP子网、必须手工指定邻居、选举DR、BDR、DR和BDR必须与其他所有路由器都直接相连、全互联或部分互联拓扑、hello 30秒)
配置邻居;R1(config-router)# neighbor ip-address [priority number] [poll-interval number] [cost number] [database-filter all]
RouterA(config-router)# neighbor 192.168.1.2 priority 0
RouterA(config-router)# neighbor 192.168.1.3 priority 0
校验show ip ospf neighbor
8、点到多点模式;一个IP 子网、使用OSPF组播hello分组来自动发现邻居、不选举DR和BDR,路由器发送的LSA中包含更多有关邻接路由器的信息、通常用于部分互联或星型拓扑中.Hello 30秒.
配置R1(config-if)#ip ospf network point-to-multipoint
Show ip ospf interface
9、point-to-multipoint nonbroadcast思科私有;如果没有在VC上启用组播和广播,则不能使用遵循RFC的点到多点模式,因为路由器无法使用组播hello分组动态地发现邻接路由器,此时应该使用Cisco 模式,在这种情况下,必须手工指定邻居,无需选举DR和BDR.
R1(config)# interface s0/1.2 multipoint hello 30秒
10、point-to-point Cisco模式;每个子接口属于不同的IP子网、不选举DR、BDR、用于两台路由器需要在一对接口上建立邻接关系时、接口可以是LAN接口,也可以是WAN接口.R1(config)# interface s0/1.2 point-to-point默认模式.不需要指邻居,无需选举DR和BDR.Hello 10秒
11、broadcast;让WAN接口就向LAN接口,一个IP子网,使用OSPF组播hello分组来自动发现邻居、选举DR和BDR,全互联或部分互联拓扑.
查看建立邻接过程debug ip ospf adj
五、OSPF路由类型
1、大型OSPF网络存在的问题;对路由器内存、CPU压力大、链路带宽的占用(LSA多,LSDB大)、生成巨大路由表,导致转发慢、无法压制内部动荡.
解决方案;OSPF分区,把一个大的OSPF网络分成若干个小的相互独立的OSPF网络.区域内部是链路状态(LSA的洪泛不允许被阻碍),区域和区域之间的行为是距离适量
2、路由器类型
由于区域的划分,根据路由器接口与区域的关系,具有不同的类型,行使不同的功能.
内部路由器;把所有OSPF已知的接口放入同一个区域,LSA的传输不能被该路由器阻塞,一个区域所有内部路由器LSDB完全相同.
区域边界路由器(ABR);如果路由器的接口分属于两个或两个以上的区域,用来互联两个相互隔离的区域,针对所属的区域分别维护各自独立的LSDB,ABR是区域和区域,外部和用户交往的入口.建议ABR只互联两个区域.骨干路由器;至少有一个接口属于area 0 用于解决区域间问题,以防止区域间的循环.自治系统边界路由器ASBR;用来互联OSPF网络与外部网络(非OSPF)作了重发布的路由器.
3、 虚链路virtual-link
所有区域必须和区域0有直接的物理连接(ABR必须是骨干路由器)
骨干区域发生分裂,某个区域和区域0没有直接物理连接.虚链路为物理上没有直接连接到area 0的区域创建到 area 0的逻辑连接.注意事项(虚链路必须创建在连接同一个区域的两个ABR上,其中一个ABR是骨干路由器,不能穿越stub区域).
配置;
R1(config-router)# area 要穿越的区域 virtual-link 对方RID [authentication [message-digest | null]] [hello-interval x] [retransmit-interval x] [transmit-delay x] [dead-interval x] [[authentication-key n] | [message-digest-key n md5n]]
查看;show ip ospf show ip ospf virtual-link